菜单

概述

相关源文件

Dive 是一个用于探索 Docker/OCI 容器镜像的工具,它可以分析镜像的层,并找出减小镜像大小的机会。它同时提供了用于交互式探索的终端用户界面和用于自动化效率验证的 CI 模式。

有关具体的安装说明,请参阅 安装。有关基本命令用法,请参阅 基本用法

目的与主要功能

Dive 通过提供以下功能来满足理解容器镜像组成的需求:

  • 逐层检查:按层显示 Docker 镜像内容
  • 变更可视化:显示每层中添加、修改或删除的文件
  • 效率分析:通过重复文件、移动文件或未完全删除的文件来识别空间浪费
  • CI 集成:通过可配置的阈值提供自动化的镜像效率检查
  • 多源支持:支持 Docker Engine、Podman 和 Docker Archive 文件

来源:README.md8-65

系统架构

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 通过统一的解析器接口支持多种镜像源

来源:README.md79-93

用户界面和交互

dive 的终端 UI 提供两个主要面板用于探索容器镜像

UI 提供丰富的键盘导航用于检查层和文件

按键绑定描述
Tab键在层和文件树视图之间切换
Ctrl+A层视图:查看聚合的镜像修改
Ctrl+L层视图:查看当前层修改
Space键文件树视图:折叠/展开一个目录
Ctrl+F按名称筛选文件

来源:README.md255-276

CI 集成

Dive 可以集成到 CI 流水线中,以强制执行镜像效率标准

来源:README.md235-253

配置

Dive 支持通过 YAML 文件进行配置,以自定义其行为

配置文件位置优先级
$XDG_CONFIG_HOME/dive/*.yaml最高
$XDG_CONFIG_DIRS/dive/*.yaml
~/.config/dive/*.yaml
~/.dive.yaml最低

配置选项包括容器引擎选择、键绑定、UI 布局和日志设置。

来源:README.md280-351

技术实现

Dive 以 Go 语言实现,并组织成几个关键包

代码库遵循清晰的关注点分离,允许在保持一致用户界面的同时添加新的镜像源和分析方法。

来源:go.mod1-33