写点什么

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

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

关注

评论

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

甲方日常 29

句子

工作 随笔杂谈 日常

反向保理系统设计

森林

Kubeless 架构设计 | 玩转 Kubeless

donghui

Serverless kubeless

Week 2 学习总结

balsamspear

极客大学架构师训练营

【高并发】秒杀系统架构解密,不是所有的秒杀都是秒杀(升级版)!!

冰河

并发编程 高并发 架构设计 秒杀 异步

MySQL-技术专题-解决死锁问题

洛神灬殇

第四周 作业二:系统架构学习总结【未陌】

a d e

系统架构 互联网架构

都别拦着我,我要删库了

MySQL从删库到跑路

Linux oracle重装 MySQL 运维 root

JAVA中的内部类详解

倔强的攻城狮

Java

中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解

京东科技开发者

技术 网络 GAN 芯片

Week 2命题作业

balsamspear

极客大学架构师训练营

架构师训练营第 1 期 - 第四周课后练习

Anyou Liu

极客大学架构师训练营

图解超难理解的 Paxos 算法(含伪代码)

多颗糖

分布式 算法 分布式系统 架构师 一致性算法

Netty源码解析 -- 服务端启动过程

binecy

Netty nio

当我在听播客时,我在听什么?

Nydia

MySQL-技术专题-mysql的联合索引

洛神灬殇

mybatis plus 自动更新数据库时间的小坑

废材姑娘

Java mybatis

数字经济2.0—趋势、逻辑、选择

CECBC

区块链 数字经济

IDEA常用设置、快捷键及代码模板

jiangling500

IDEA

《谛听说智能》迎来圆满落幕,企业降本增效新指南

Geek_e670ab

第四周 作业一:系统架构【未陌】

a d e

系统架构

有状态的服务其实可以做更多的事情

架构师修行之路

分布式 微服务

kubernetes是微服务发展的必然产物

架构师修行之路

Kubernetes 分布式 微服务

MySQL-技术专题-事务和并发一致性问题

洛神灬殇

后疫情时期,看区块链如何赋能文创产业加快经济复苏?

CECBC

区块链技术 文创产业

打破区块链游戏经济的隔阂,或许该从跨游戏资产入手

CECBC

区块链 游戏

深拷贝链表,python处理音频信号和数字信号、vim教程、swift单元测试和UI测试 John 易筋 ARTS 打卡 Week 21

John(易筋)

单元测试 ARTS 打卡计划 python 数字信号 vim教程 深拷贝链表

头条终面:写个消息中间件

yes

面试 消息队列

学习笔记:架构师训练营-第四周

四夕晖

高并发 系统架构演化

读——沟通的艺术,看入人里,看出人外(第三章)

废材姑娘

浅析:线程安全

朱华

Java 多线程与高并发

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