01 引言
在日常的开发中,我们很多时候会使用docker
的命令去查看镜像的元数据信息以及构建镜像的过程,一般我们会使用inspect
和history
的两个命令:
docker inspect | docker history |
从上图可以看得出这些信息对我们去分析一个镜像的每一层(Layer
)的组成来说还是不太够,不够清晰明了,这个时候,我们可以使用dive,效果如下:
02 Dive 相关概念
Github地址:https://github.com/wagoodman/dive
根据官网描述,Dive是一款用于查看docker
镜像层内容以及分析优化 docker/oci
镜像大小的工具,从star
来看,也是一款比较热门的开源框架了。
Dive的功能亮点有如下:
- 按层(Layer)显示Docker镜像:在左侧选择一个图层时,将显示该图层的内容以及右侧的所有先前图层。此外,还可以使用箭头键全面浏览文件树;
- 指出每一层的变化:文件树中指示已更改,修改,添加或删除的文件,可以对其进行调整以显示特定层的更改,或显示直到该层的汇总更改;
- 估算“镜像效率”:左下方的窗格显示基本图层信息和实验指标,该指标将猜测图像所包含的浪费空间(这可能是由于跨层复制文件,跨层移动文件或没有完全删除文件。提供百分比“得分”和总浪费文件空间);
- 快速构建/分析周期:可以构建一个Docker镜像并使用以下命令立即进行分析:
dive build -t some-tag
(只需要用docker build 相同的 dive build 命令替换命令即可)。
03 Dive 安装
Ubuntu/Debian:
wget https://github.com/wagoodman/dive/releases/download/v0.9.2/dive_0.9.2_linux_amd64.deb sudo apt install ./dive_0.9.2_linux_amd64.deb
RHEL/Centos:
curl -OL https://github.com/wagoodman/dive/releases/download/v0.9.2/dive_0.9.2_linux_amd64.rpm rpm -i dive_0.9.2_linux_amd64.rpm
Arch Linux:
yay -S dive
Mac:
brew install dive
Windows:
- 下载地址:https://github.com/wagoodman/dive/releases/download/v0.9.2/dive_0.9.2_windows_amd64.zip
- 还需要go工具(1.10以上版本):
go get github.com/wagoodman/dive
04 Dive 使用
安装完成之后,使用dive --help
可以查看其用法,翻译后的含义如下:
用法: dive [IMAGE] [flags] dive [command] Flags: --ci 跳过交互式TUI并根据CI规则进行验证 (等同于 CI=true) --ci-config string 如果环境设置 CI=true , 使用给定的yaml来驱动验证规则. (default ".dive-ci") --config string 配置文件(默认是 $HOME/.dive.yaml, ~/.config/dive/*.yaml, or $XDG_CONFIG_HOME/dive.yaml) -h, --help 帮助 --highestUserWastedPercent string (只有在指定--ci才有效) 最大允许的字节浪费百分比 (as a ratio between 0-1), 否则ci校验失败. (默认 "0.1") --highestWastedBytes string (只有在指定--ci才有效) 最大允许的字节浪费, 否则ci校验失败. (默认 "disabled") -i, --ignore-errors 镜像分析失败继续运行 -j, --json string 跳过交互式TUI,将层分析统计数据写入给定文件. --lowestEfficiency string (只有在指定--ci才有效) 最低允许镜像的效率 (as a ratio between 0-1), 否则ci校验失败. (默认 "0.9") --source string 容器引擎拉取镜像的地方,允许的值: docker, podman, docker-archive (默认 "docker") -v, --version 显示版本号
下面举些例子。
4.1 显示镜像详情
分析镜像命令:
dive <image tag/id/digest>
举例:
dive mysql:8.0.30
4.2 分析镜像
可以直接显示分析结果,而不显示详情。
分析命令:
CI=true dive <image tag/id/digest>
举例:
CI=true dive mysql:8.0.30
05 其它
除了使用docker命令以及dive,类似的工具还可以使用Dedockify:
06 文末
本文主要讲解了hive的一些基本概念及用法,希望能帮助到大家,谢谢大家的阅读,本文完!