写点什么

谷歌开源 Docker 镜像分析比对工具 container-diff

  • 2017-11-29
  • 本文字数:1018 字

    阅读完需:约 3 分钟

谷歌发布了一个叫作 container-diff 的工具,用于分析比对 Docker 镜像。它支持文件系统比对,并能够感知到由 apt、npm 和 pip 这些包管理器所带来的变更。

Dockerfile 用于创建容器镜像,一旦 Dockerfile 发生变更,就需要重新创建新的镜像。Dockerfile 是普通的文本文件,使用源码控制系统的 diff 工具就可以比较出它们之间的区别。不过,要对 Dockerfile 文件里的命令所产生的镜像变更记进行可视化,或者列出具体的镜像变更内容就很困难。应用程序被打包到镜像之后,如果依赖了第三方特定版本的依赖项,事情就会变得复杂,况且,下游的依赖项也会让跟踪变得更加复杂。未被跟踪的依赖项会导致镜像体积膨胀,让镜像下载时间变长。

container-diff 会分析镜像的“语义”差别,将结果以一种用户可理解的格式呈现给用户,这样用户就可以采取相应的行动。container-diff 支持 Python 的 pip 包管理器、Linux 上的 apt 工具以及 node.js 包管理器 npm 。另外,它还可以用于分析文件系统的变化。该工具可以一次性分析一个或几个甚至所有包管理器的内容。

在分析镜像时,可以指定本地的 Docker 后台路径、远程的镜像仓库地址或文件路径。如果已经使用 Docker 的保存命令导出镜像,那么可以使用后者。在使用该工具分析后台镜像时,镜像不需要处于运行状态。该工具还能输出单个镜像的修改历史。

其他类似的工具还有 Anchore 的 diff 工具以及 Atomic 项目的“ atomic diff ”命令。Docker 的“docker history”命令只能列出每个 Dockerfile 的变更历史,这个只需要检查一下 Dockerfile 就知道了。一些反向工程可以揭示底层的一些细节,但很难将其抽取成事件,比如之前安装了哪些包。Atomic 的工具可以列出文件系统的差别,而且可以用在RPM 上,也就是说,它可以列出安装了哪些RPM 包。另外,“atomic diff”命令可以用于比较两个容器、容器和镜像、两个镜像之间的差别。

根据谷歌的文章所述,container-diff 可以成为开发流程的一部分,可以与持续集成系统集成起来,提供自动化的变更日志管理,而且它的输出结果是JSON 格式的。如果镜像处于仓库当中,不管是私有仓库还是像Google Container Registry 这样的仓库,container-diff 都为它们提供了认证机制,这个认证机制是通过 docker-credentials-helpers 包来实现的。这个包使用本地程序(比如 OSX 上的 osxkeychain)来保存 Docker 认证信息。

查看英文原文 container-diff - an Open Source Tool from Google for Analyzing Differences Between Docker Images

2017-11-29 18:003632
用户头像

发布了 322 篇内容, 共 151.2 次阅读, 收获喜欢 148 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营:模块一作业

Geek_93ffb0

「架构实战营」

1-5聚合架构第六讲:聊聊开山祖Zachman框架

钰湚—付晓岩

企业架构 软件工程 数字化转型 软件架构 业务架构

7个连环问揭开java多线程背后的弯弯绕

华为云开发者联盟

Java 多线程 工作内存 主内存

拆分电商系统为微服务

Beyond Ryan

盘点JavaScript哪些常用的数组对象

你好bk

JavaScript 大前端 数组 html/css 12月日更

🏆【Alibaba中间件技术系列】「Sentinel技术专题」分布式系统的流量防卫兵的基本介绍(入门源码介绍)

码界西柚

Sentine SpringCloud Alibaba Alibaba技术 限流熔断 12月日更

如何建成有效的前端效能度量体系

benyasin

大前端 研发效能 研发度量 研发提效

低代码实现探索(五)前端组件图形化脚本

零道云-混合式低代码平台

震惊!大势已来!!区块链的真正价值是什么?

CECBC

分布式理论之CAP理论

卢卡多多

CAP理论 12月日更

安全第二话

张老蔫

28天写作

你看到什么是因为要你看到什么

mtfelix

28天写作

1-1聚合架构第二讲:企业架构的认知历程

钰湚—付晓岩

企业架构 软件工程 数字化转型 软件架构 业务架构

1-6聚合架构第七讲:聊聊togaf的发展历程

钰湚—付晓岩

企业架构 软件工程 数字化转型 软件架构

低代码实现探索(三)后台模型执行设计

零道云-混合式低代码平台

代码出现异常时,我应该怎么处理?

JavaEdge

签约计划第二季

青藤:一招制敌!微隔离,让勒索软件不再横行

青藤云安全

低代码实现探索(四)前端组件核心模型

零道云-混合式低代码平台

普普通通的Route

Time-sun

flutter

区块链等技术将为中欧跨境电商带来革新以及助力城市产业转型升级

CECBC

聚合架构第一讲:开篇啦

钰湚—付晓岩

企业架构 软件工程 数字化转型 软件架构 业务架构

数字人民币对人民币国际化的长远影响

CECBC

1-2聚合架构第三讲:从包饺子看工程与架构

钰湚—付晓岩

企业架构 软件工程 数字化转型 软件架构 业务架构

1-4聚合架构第五讲:架构方法的进步也不容易

钰湚—付晓岩

企业架构 软件工程 数字化转型 软件架构 业务架构

谈谈创业感想

wood

创业 28天写作

中国制造的“天工开物”新篇,如何在云上进化?

脑极体

团建的目的是什么?(7/28)

赵新龙

28天写作

MySQL探秘(七):InnoDB行锁算法

程序员历小冰

MySQL 28天写作 12月日更

1-3聚合架构第四讲:工程方法的进步也不容易

钰湚—付晓岩

企业架构 软件工程 数字化转型 软件架构 业务架构

通过阅读 SpringCloud 源码 来 理解接口和抽象的区别

悟空聊架构

接口 抽象 28天写作 悟空聊架构 12月日更

数据产品实战-业务洞察

第519区

数据分析 产品经理 数据产品经理 指标体系 数据洞察

谷歌开源Docker镜像分析比对工具container-diff_Linux_Hrishikesh Barua_InfoQ精选文章