2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

Java 函数式编程

Java-fenn

Java

中小企业如何有效应对计算资源的弹性变化需求?

Serverless Devs

MobPush开发过程常见问题

MobTech袤博科技

ios android 开发者

利用AndroidNativeEmu完成多层jni调用的模拟

Java-fenn

Java

活动回顾 | 基于英特尔技术的端到端音视频优化

网易智企

音视频

微软出品自动化神器Playwright,不用写一行代码(Playwright+Java)系列(二) 之脚本的录制及调试...

Java-fenn

Java

公私域营销新技术:小程序一键转App

Speedoooo

小程序 APP开发 APP软件开发 小程序容器

SQL 嵌套 N 层太长太难写怎么办?

陈橘又青

9月月更

App Deploy as Code! SAE & Terraform 实现 IaC 式部署应用

Serverless Devs

Java 中HashMap 详解

Java-fenn

Java

面试重点:建立Java并发知识体系(含工具全图鉴)

Java-fenn

Java

BAT 名企大厂做接口自动化如何高效使用 Requests ?

霍格沃兹测试开发学社

为什么越来越多的企业开始建立自己的知识库?

Baklib

企业 知识库

解决java多继承问题

Java-fenn

Java

怎样才能做好企业内部wiki(维基)?

Baklib

企业 wiki

【数据库】ClickHouse在亿级广域物联标签云平台ZETag Server的探索与实践

ZETA开发者

数据库 物联网 Clickhouse Server 云平台

leetcode 1110. Delete Nodes And Return Forest 删点成林(中等)

okokabcd

LeetCode 算法与数据结构

Java注解系统学习与实战

Java-fenn

Java

外包程序员的开源 Java 低代码开发平台光 2.3.0 Beta4 版发布,显著提升生成物质量

Java-fenn

Java

接口自动化你不懂?听HttpRunner的作者怎么说

霍格沃兹测试开发学社

JavaScript 闭包难点剖析

Java-fenn

Java

实战指南 | Serverless 架构下的应用开发

Serverless Devs

现代应用参考架构之 OpenTelemetry 集成进展报告

NGINX开源社区

nginx 软件架构 Serverless Kubernetes

Java毕设项目——超市POS收银管理系统(java+SSM+Maven+Mysql+Jsp)

Java-fenn

Java

Java基础 | 如何用Javadoc Tool写规范正确的java注释

Java-fenn

Java

以软件定义物联网芯片,以技术融合推动LPWAN2.0泛在物联

ZETA开发者

芯片 物联网, LoRa LPWA DSP

Baklib|搭建在线帮助中心网页的策略分享

Baklib

页面 帮助中心 在线帮助中心

详解:Java 的静态工厂方法

Java-fenn

Java

java时间日期类

Java-fenn

Java

详解Java中的异常和处理时间

Java-fenn

Java

数据持久化技术(Python)的使用

霍格沃兹测试开发学社

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