写点什么

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

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

关注

评论

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

LT浏览器——响应式网站测试利器

FunTester

性能测试 自动化测试 web测试 兼容性测试 测试报告

业内首发!腾讯位置服务推出移动端3D数据可视化图层

波场链DAPP开发|波场链TRONCHAIN介绍

Geek_23f0c3

DAPP智能合约交易系统开发 波场链DAPP开发 tronchainDAPP

LeetCode题解:219. 存在重复元素 II,哈希表,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

接口测试--apipost如何自定义变量

与风逐梦

软件测试 接口测试

Apache HBase MTTR 优化实践:减少恢复时长

华为云开发者联盟

Apache hadoop zookeeper HBase MapReduce服务

MySQL 系列教程之(七)DQL:从 select 开始

若尘

MySQL 数据库 8月日更

评DeepMind神经网络求解MIP论文:并非无所不能

杉数科技

神经网络 机器学习 算法 Deep learning 智能优化算法

抖音快手短视频获客系统软件开发

Spring数据库事务典型错误用法剖析

博文视点Broadview

抖音快手短视频营销获客系统软件开发简介

阿里p9的Java面试心路历程笔记,轻松拿到了90w年薪的Offer

Java~~~

Java spring 架构 面试 JVM

Regan Yue带你一起学习微软AZ-900认证的有关知识「 第IV章」

Regan Yue

云计算 微软 8月日更 微软认证

搜房记

escray

生活记录 8月日更

Compose 中的文字

Changing Lin

8月日更

如何请求一个需要登陆才能访问的接口(基于cookie)——apipost

Proud lion

大前端 后端 Postman Cookie 接口工

前端,测试如何修改后端接口返回的响应数据

CodeNongXiaoW

项目管理 大前端 测试 后端 接口管理工具

Go 语言,一文彻底搞懂 slice 实现原理

微客鸟窝

Go 语言 8月日更

抖音快手短视频智能询盘获客系统软件开发介绍

摄影利器一加9 Pro,让你轻松成为手机摄影师

Geek_8a195c

MySQL 不完全入门指南

Java 编程 架构 面试 架构师

2分钟玩转中文接口测试工具-ApiPost

CodeNongXiaoW

项目管理 大前端 测试 后端

JS对象拷贝:深拷贝和浅拷贝

华为云开发者联盟

js 对象 对象拷贝 深拷贝 浅拷贝

AI 场景的存储优化之路

焱融科技

人工智能 云计算 AI 分布式 高性能

抖音快手AI智能获客询盘软件系统开发内容

抖音快手短视频询盘获客系统开发搭建

netty系列之:自定义编码和解码器要注意的问题

程序那些事

Java Netty 程序那些事

面试官:你说说一条更新SQL的执行过程?

艾小仙

抖音快手智能获客黑科技软件系统开发费用

【Vue2.x 源码学习】第三十九篇 - 组件部分 - 创建组件虚拟节点

Brave

源码 vue2 8月日更

抖音快手获客软件系统开发价格

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