这个项目能做什么

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`。