Dive 是一个用于探索 Docker/OCI 容器镜像的工具,它可以分析镜像的层,并找出减小镜像大小的机会。它同时提供了用于交互式探索的终端用户界面和用于自动化效率验证的 CI 模式。
有关具体的安装说明,请参阅 安装。有关基本命令用法,请参阅 基本用法。
Dive 通过提供以下功能来满足理解容器镜像组成的需求:
Dive 遵循一种模块化架构模式,将镜像解析、分析和呈现分离开来
来源:go.mod1-33 README.md42-48 README.md77-93
Dive 由几个关键组件组成,它们协同工作来分析容器镜像
| 组件 | 描述 | 代码位置 |
|---|---|---|
| 镜像解析器 | 确定并连接到适当的镜像源 | dive/image/resolver.go |
| 层提取器 | 从每个镜像层中提取元数据和内容 | dive/image/layer.go |
| 文件树构建器 | 构建代表每个层文件系统的文件树 | dive/filetree/file_tree.go |
| 层比较器 | 识别层之间的差异 | dive/filetree/comparer.go |
| 效率计算器 | 计算空间浪费指标 | dive/filetree/efficiency.go |
| 终端用户界面 | 提供用于探索的交互式界面 | runtime/ui |
来源:go.mod5-33
Dive 通过统一的解析器接口支持多种镜像源
dive 的终端 UI 提供两个主要面板用于探索容器镜像
UI 提供丰富的键盘导航用于检查层和文件
| 按键绑定 | 描述 |
|---|---|
| Tab键 | 在层和文件树视图之间切换 |
| Ctrl+A | 层视图:查看聚合的镜像修改 |
| Ctrl+L | 层视图:查看当前层修改 |
| Space键 | 文件树视图:折叠/展开一个目录 |
| Ctrl+F | 按名称筛选文件 |
Dive 可以集成到 CI 流水线中,以强制执行镜像效率标准
Dive 支持通过 YAML 文件进行配置,以自定义其行为
| 配置文件位置 | 优先级 |
|---|---|
$XDG_CONFIG_HOME/dive/*.yaml | 最高 |
$XDG_CONFIG_DIRS/dive/*.yaml | ↓ |
~/.config/dive/*.yaml | ↓ |
~/.dive.yaml | 最低 |
配置选项包括容器引擎选择、键绑定、UI 布局和日志设置。
Dive 以 Go 语言实现,并组织成几个关键包
代码库遵循清晰的关注点分离,允许在保持一致用户界面的同时添加新的镜像源和分析方法。
来源:go.mod1-33