这个项目能做什么
dive 是一个命令行工具,用于探索 Docker/OCI 镜像、检查每一层的内容,并发现减小镜像体积的方法。它使用 Go 编写,并以 MIT 许可证发布。
## 核心用法
按标签、ID 或摘要分析现有镜像:
```bash
dive <your-image-tag>
```
也可以通过挂载 Docker socket 直接以 Docker 运行:
```bash
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive"
dive nginx:latest
```
可以在一步中构建镜像并立即分析:
```bash
dive build -t <some-tag> .
```
## 基本功能
- **逐层查看镜像内容**:在左侧选择某一层,右侧即可查看该层及之前所有层合并后的内容。文件树可用方向键导航。
- **层变更指示**:新增、修改或删除的文件会在文件树中高亮显示。视图可在特定层的变更与截至所选层的累计变更之间切换。
- **镜像效率估算**:左下面板显示基本层信息,并提供一个实验性指标,用于估算浪费的空间,例如跨层重复的文件、被移动的文件或未完全删除的文件。它会同时给出百分比评分和浪费文件空间的总量。
- **快速构建/分析循环**:用 `dive build` 替代 `docker build`,即可在构建后立即分析镜像。
- **CI 集成**:在环境中设置 `CI=true` 后,将跳过交互界面,并根据规则分析镜像,返回通过/失败结果。
- **多种镜像来源**:`--source` 选项用于选择从哪里获取镜像。支持的来源包括 `docker`(默认)、`docker-archive`(磁盘上的 Docker tar 归档)以及 `podman`(仅限 Linux)。
## CI 集成
在 `CI=true` 下运行 dive 会绕过交互式界面,并通过退出码返回通过/失败指示。仓库根目录中的 `.dive-ci` 文件可定义规则:
```yaml
rules:
# 如果效率低于 X% 则失败,以 0-1 之间的比率表示。
lowestEfficiency: 0.95
# 如果浪费空间达到或超过 X 则失败,单位为 B、KB、MB、GB。
highestWastedBytes: 20MB
# 如果浪费空间占镜像的 X% 或更多则失败,以 0-1 之间的比率表示。
# 基础镜像层不计入镜像总大小。
highestUserWastedPercent: 0.20
```
CI 配置路径可通过 `--ci-config` 覆盖。
## 安装
文档中记录了多种安装方式:
- **Ubuntu/Debian**:下载 `.deb` 发布包并使用 `apt` 安装。
- **Snap**:`snap install dive`,并连接到 Docker 可执行文件和守护进程。README 提醒,如果 Docker 是通过 `apt-get` 安装的,不建议使用 Snap 方式。
- **RHEL/CentOS**:下载 `.rpm` 发布包并使用 `rpm -i` 安装。
- **Arch Linux**:位于 extra 仓库,可通过 `pacman -S dive` 安装。
- **macOS**:可通过 Homebrew(`brew install dive`)或 MacPorts(`sudo port install dive`)安装,也可使用 Darwin 发布构建。
- **Windows**:可通过 Chocolatey(`choco install dive`)、Scoop(`scoop install main/dive`)、winget(`winget install --id wagoodman.dive`)或 Windows 发布构建安装。
- **Go 工具**:`go install github.com/wagoodman/dive@latest`(需要 Go 1.10 或更高版本;以这种方式安装时,版本输出可能不准确)。
- **Nix/NixOS**:`nix-env -iA nixos.dive` 或 `nix-env -iA nixpkgs.dive`。
- **Docker 镜像**:拉取 `docker.io/wagoodman/dive` 或 `ghcr.io/wagoodman/dive`,并在运行时挂载 Docker socket。
对于 Colima 等替代运行时,可能需要设置 Docker host,例如:
```bash
export DOCKER_HOST=$(docker context inspect -f '{{ .Endpoints.docker.Host }}')
```
## 快捷键
交互式界面包含用于退出、在层视图和文件树视图之间切换、过滤文件、滚动、折叠目录,以及切换新增/删除/修改/未修改文件可见性的快捷键。常用快捷键包括:Tab 切换视图,Ctrl+F 过滤文件,Space 折叠/展开目录,以及 Ctrl+A/Ctrl+R/Ctrl+M/Ctrl+U 显示或隐藏不同文件变更类型。
## 配置
无需任何配置,但可以使用 YAML 配置文件覆盖默认值。示例设置包括容器引擎(`docker` 或 `podman`)、错误处理、日志、快捷键、差异视图默认项、文件树行为(如折叠状态和面板宽度),以及层视图聚合默认项。dive 会在 `$XDG_CONFIG_HOME/dive/*.yaml`、`$XDG_CONFIG_DIRS/dive/*.yaml`、`~/.config/dive/*.yaml` 和 `~/.dive.yaml` 中查找配置;也接受 `.yml`。
评论
0 评分人数达到10人后显示
登录后参与讨论。