报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

谷歌开源 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:003501
用户头像

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

关注

评论

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

270年经典传承,贾斯特里尼&布鲁克斯——红酒中的高端代表

联营汇聚

【FAQ】在华为鸿蒙车机上集成华为帐号的常见问题总结

HarmonyOS SDK

HMS Core

HTTP通用首部字段

穿过生命散发芬芳

HTTP 12月月更

设计模式之美——里式替换(LSP)

GalaxyCreater

设计模式

模块三-外包学生管理系统的架构文档

悟空

学生管理系统架构

贾斯特里尼&布鲁克斯为何被称为葡萄酒典范?

联营汇聚

世界元素多元化发展,法国名酒贾斯特里尼&布鲁克斯受推崇

联营汇聚

架构误区系列9:强扭的「复用」

agnostic

MMEval正式支持OneFlow评测

OneFlow

机器学习 深度学习 算法

Zebec Chain缘何能成为新晋应用链,熊市下又为何值得我们关注?

股市老人

什么是DevSecOps?理解DevOps安全性

华为云PaaS服务小智

DevOps

超越10倍开发者

俞凡

研发效能

还在手动发早安,教你用java实现每日给女友微信发送早安

华为云开发者联盟

Java 开发 代码 华为云 12 月 PK 榜

设计模式之美——对扩展开放、对修改关闭

GalaxyCreater

设计模式

WEB23

Lenyi

网络安全 CTF ctfshow 爆破

LED显示屏行业真的需要8K分辨率吗?

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

华为云CodeArts Req需求管理工具,7大特性限时免费体验

华为云开发者联盟

需求管理 开发 华为云 12 月 PK 榜

Java中Map集合的三种遍历方式

@下一站

Java 程序设计 map 12月日更 12月月更

2022-12-24:给定一个字符串s,其中都是英文小写字母, 如果s中的子串含有的每种字符都是偶数个, 那么这样的子串就是达标子串,子串要求是连续串。 返回s中达标子串的最大长度。 1 <= s的长

福大大架构师每日一题

Linux 算法 Shell 福大大

【web 开发基础】PHP 中的预定义数组详解之一 (47)

迷彩

数组 全局变量 PHP基础 预定义数组

基于K-means聚类算法进行客户人群分析

华为云开发者联盟

人工智能 机器学习 华为云 12 月 PK 榜

ChatGPT进化的秘密

OneFlow

人工智能 机器学习 深度学习 GPT

【Java基础】Win10如何配置jdk环境变量(配置java环境变量)

No8g攻城狮

Java、 java 并发 Java IO

为什么更推荐使用组合而非继承关系?

JAVA旭阳

Java 架构

极客时间运维训练营第九周作业

好吃不贵

Android Studio开发Android APP

芯动大师

Android Studio 开发环境 新建工程

贾斯特里尼&布鲁克斯葡萄酒,用品质征服世界

联营汇聚

基于随机森林算法进行硬盘故障预测

华为云开发者联盟

人工智能 机器学习 华为云 12 月 PK 榜

YOLOv5全面解析教程②:如何制作训练效果更好的数据集

OneFlow

人工智能 深度学习 数据集

WEB21

Lenyi

网络安全 CTF ctfshow 爆破

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