写点什么

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

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

关注

评论

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

什么是 Office Open XML 文件格式

汪子熙

xml 微软 Office 8月月更 openOffice

Spring Security OAuth实现GitHub快捷登录

阿提说说

Spring Security OAuth

模块九(电商秒杀系统)

Geek_701557

开源一夏 | 对于jQuery选择器和动画效果停止动画的实战心得【前端jQuery框架】

恒山其若陋兮

开源 8月月更

【LeetCode】算术三元组的数目Java题解

Albert

LeetCode 8月月更

Python爬虫eval混淆,爬虫进阶实战系列

梦想橡皮擦

Python 爬虫 8月月更

MySQL 指令

武师叔

8月月更

Go-Excelize API源码阅读(三)——OpenReader()

Regan Yue

Go 开源 源码分析 8月日更 8月月更

OpenHarmony像素单位

坚果

开源 OpenHarmony 8月月更

SpringBoot实战:国际化组件MessageSource的执行逻辑与源码

看山

源码 spring源码 MessageSource Spring原理 SpringBoot实战

深入浅出边缘云 | 6. 监控与遥测

俞凡

架构 边缘计算 网络 深入浅出边缘云

详解中断系统

timerring

8月月更

leetcode 232. Implement Queue using Stacks 用栈实现队列(简单)

okokabcd

LeetCode 数据结构与算法 栈和队列

Python 教程之输入输出(7)—— 如何在 Python 中不使用换行符进行打印?

海拥(haiyong.site)

Python 8月月更

Spring(四、配置数据源)

开源 MySQ Druid 8月月更

低成本、大容量、高交互…Polkadot 引领 GameFi 实现新突破

One Block Community

区块链

2022-Java后端工程师面试指南-(SSM)

自然

spring cloud stream Java core 8月月更

企业文化如何治好“企业内耗”?

涛哥 数字产品和业务架构

企业文化 企业架构

聊聊电源自动切换电路(常用自动切换电路总结)

矜辰所致

电路设计 8月月更 电源自动切换

STM32+移远MC20模块采用MQTT协议登录OneNet上传GPS数据

DS小龙哥

8月月更

全面了解Java中的15种锁概念及机制!

TimeFriends

8月月更

《编程的原则》读书笔记(一):编程的前提和准则

Chares

软件工程 软件开发 程序开发 编程原理

Java+EasyExcel实现文件导入导出

Bug终结者

Java 8月月更

即将开幕!阿里云飞天技术峰会邀您一同探秘云原生最佳实践

阿里巴巴云原生

阿里云 云原生 阿里云飞天技术峰会

jvm(一 )内存区域的划分

想要飞的猪

JVM JVM运行时数据区

关于架构的认知

yuexin_tech

架构

数据治理(二):数据治理功能方面

Lansonli

大数据 数据治理 8月月更

2022-Java后端工程师面试指南-(消息队列)

自然

Rocket Rabbit MQ 8月月更

2022-Java后端工程师面试指南-(计算机网络)

自然

网络 8月月更

一文带你搞懂OAuth2.0

闫同学

Go 后端 OAuth 2.0

毕业总结

Geek_701557

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