容器镜像差异分析工具 container-diff

概述

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 主要有两个子命令, analyzediff 分别是分析镜像 和 比较镜像。

分析镜像

分析镜像使用 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

输出如下:
容器镜像差异分析工具 container-diff_第1张图片

比较镜像

比较镜像差异,使用的是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_第2张图片

存在问题

通过一段时间的使用,发现container-diff 对镜像的文件系统差异比较,有时候不能完全比较出来,所以对于出的结果,仅做参考,不能保证百分百正确。
同时这个项目虽然是谷歌的项目,但是并没有得到google的官方支持,已经有好几年没有更新了,基本上是处在维护状态,社区也不是很活跃。

你可能感兴趣的:(云原生,k8s,linux,kubernetes,docker)