概述
container-diff
是google出的一个容器差异比较工具,通过这个工具可以比较两个镜像之间存在的文件差异、RPM包差异、apt包差异、pip包差异和node包差异。
container-diff
也包括了对单个镜像分析能力,像文件分析啊、apt包、rpm包分析等功能。
在日常工作中,如果我们想知道一个镜像的新旧版本之间有哪些变更,或者面对两个类似的镜像不知道该用哪一个的时候,就可以使用这个工具来分析比较一下差异,我们就能更加深入得了解镜像内部。
安装
各个操作系统最新的安装包可以到github上下载 container-diff仓库地址
MAC
curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-darwin-amd64 && \
sudo install container-diff-darwin-amd64 /usr/local/bin/container-diff
Linux
curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 && \
sudo install container-diff-linux-amd64 /usr/local/bin/container-diff
Windows
windows 可以直接下载exe安装包
地址: https://storage.googleapis.com/container-diff/latest/container-diff-windows-amd64.exe
使用
container-diff
可以支持远程镜像分析,和本地镜像分析,在使用的时候,如果是本地镜像,需要在镜像名前面加 daemon://
前缀,如果是远程镜像仓库的需要加remote://
前缀
container-diff
主要有两个子命令, analyze
和 diff
分别是分析镜像 和 比较镜像。
分析镜像
分析镜像使用 analyze
子命令,使用方式如下:
# 分析镜像,输出镜像的名称、摘要和占用磁盘大小
container-diff analyze <img>
# 输出镜像历史构建记录
container-diff analyze <img> --type=history
# 输出镜像所有的文件
container-diff analyze <img> --type=file
# 输出镜像大小
container-diff analyze <img> --type=size
# 输出镜像安装的rpm包
container-diff analyze <img> --type=rpm
# 输出镜像安装的pip包
container-diff analyze <img> --type=pip
# 输出镜像安装的apt包
container-diff analyze <img> --type=apt
# 输出镜像安装的nodeJs包
container-diff analyze <img> --type=node
# 可以同时输出多种包
container-diff analyze <img> --type=apt --type=node
例如分析nginx镜像安装了哪些apt包,注意 本地镜像需要加 daemon://
前缀
container-diff analyze daemon://nginx --type=apt
输出如下:
比较镜像
比较镜像差异,使用的是diff
子命令,使用方式如下:
# 默认比较两个镜像的占用磁盘大小
container-diff diff <img1> <img2>
# 比较两个镜像的历史构建记录
container-diff diff <img1> <img2> --type=history
# 比较两个镜像的文件差异,包括新增的文件、删除的文件、修改的文件
container-diff diff <img1> <img2> --type=file
# 比较两个镜像的占用磁盘大小,即默认行为
container-diff diff <img1> <img2> --type=size
# 比较两个镜像的rpm包差异
container-diff diff <img1> <img2> --type=rpm
# 比较两个镜像的pip包差异
container-diff diff <img1> <img2> --type=pip
# 比较两个镜像的apt包差异
container-diff diff <img1> <img2> --type=apt
# 比较两个镜像的nodejs包差异
container-diff diff <img1> <img2> --type=node
例如,分析nginx:1.24 和 nginx:1.25 这两镜像升级后变更了哪些文件,可以使用如下命令
container-diff diff daemon://nginx:1.25 daemon://nginx:1.24 --type=file
输出如下:
存在问题
通过一段时间的使用,发现container-diff
对镜像的文件系统差异比较,有时候不能完全比较出来,所以对于出的结果,仅做参考,不能保证百分百正确。
同时这个项目虽然是谷歌的项目,但是并没有得到google的官方支持,已经有好几年没有更新了,基本上是处在维护状态,社区也不是很活跃。