写点什么

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

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

关注

评论

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

谈谈PHP switch case和其他语言的区别

芥末拌个饭吧

php Go 10月月更

「CSS畅想」当我拥有了一个小夜灯,我的CSS副属性被激活了

叶一一

CSS JavaScript 前端 10月月更

Docker搭建私有镜像仓库与WordPress

okokabcd

Docker

「趣学前端」玩转CSS的2D转换,也许能有个代码纸片人

叶一一

CSS 前端 10月月更

还不会配置Python虚拟环境?看这篇就懂了

芥末拌个饭吧

后端 配置管理 python 3.5+ 10月月更

2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。 要求时间复杂度O(N)。 输入: nums = [1,1,1

福大大架构师每日一题

算法 rust 福大大

可能的二分法

掘金安东尼

算法 10月月更

【c++图论例题学习】洛谷 P3366最小生成树

贤鱼很忙

10月月更

Python还不会用日志模块?本文给你答案

芥末拌个饭吧

python 3.5+ logging模块 10月月更

如何在 SAP BTP Java 应用里使用 SAP HANA 数据库

汪子熙

云原生 Cloud SAP 10月月更 btp

读书笔记 | 你最终能走多远,取决于见识

宇宙之一粟

读书笔记 10月月更

长安链源码分析之网络模块 net-liquid(2)

【一Go到底】第十六天---函数

指剑

Go golang 10月月更

「CSS畅想」有一天,我遇到了一个奇特的路灯,眼里一下子有了光

叶一一

CSS JavaScript 前端 10月月更

【一Go到底】第十六天---跳转控制goto&return

指剑

Go golang 10月月更

Linux 中 Grep 命令的常见示例,非常全面!

wljslmz

Linux grep 10月月更

STM32L0 系列 EEPROM 读写,程序卡死?

矜辰所致

EEPROM STM32L051 10月月更

Python进阶(二十四)Python中函数的参数定义和可变参数

No Silver Bullet

Python 函数 可变参数 10月月更

PriorityQueue 源码解析(二)

知识浅谈

Priority Queue 10月月更

【LeetCode】用栈操作构建数组Java题解

Albert

算法 LeetCode 10月月更

【c++图论学习】洛谷P1396营救

贤鱼很忙

c++ 算法 10月月更

CorelDRAW 2019 软件应用项目(一)

张立梵

设计师 CorelDRAW 2022 10月月更

跟着卷卷龙一起学Camera--双摄03

卷卷龙

ISP camera 10月月更

跟着卷卷龙一起学Camera--双摄05

卷卷龙

ISP camera 10月月更

长安链源码分析之网络模块net-liquid(1)

「趣学前端」提到布局,我第一个会想到的是flex

叶一一

CSS 前端 10月月更

我用【c++】写出了会说话的学生考勤系统

贤鱼很忙

c++ 10月月更

flask sqlalchemy使用简述

芥末拌个饭吧

sqlalchemy python 3.5+ 10月月更

跟着卷卷龙一起学Camera--双摄04

卷卷龙

ISP camera 10月月更

python程序能打包吗?看这篇就知道了

芥末拌个饭吧

python 3.5+ pyinstaller 10月月更

Goroutine是什么?进程、线程、协程又是什么?有什么区别和联系?

王中阳Go

Go 线程 进程 协程 10月月更

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