dive 镜像层分析工具
dive 是一款用 Go 编写的命令行工具,可逐层浏览 Docker/OCI 镜像内容,直观展示每层新增、修改、删除的文件,并估算镜像「效率」与浪费空间,帮助开发者精简镜像体积。
爱鲜报评分
0.0
0 人评分
55k
星数
否
中文
Go
主语言
是
活跃
68
贡献者
人工分析
EDITORIAL推荐理由
镜像体积膨胀往往源于多层重复写入或未清理的临时文件,dive 用 TUI 把每一层的文件变化摊开给你看,定位问题非常直观。它支持 CI 模式,可把镜像效率与浪费空间设为流水线门禁,适合纳入日常构建流程。项目星数超 5 万、社区活跃,MIT 协议可放心使用。
适用场景
- 排查 Docker 镜像体积过大、定位冗余层
- 优化 Dockerfile 分层与清理逻辑
- 在 CI 流水线中设置镜像效率门禁
- 学习镜像分层存储原理与文件系统变化
- 审计第三方镜像的文件内容与来源
优点
- TUI 交互式浏览,逐层对比文件变化一目了然
- 内置镜像效率评分与浪费空间估算,量化优化效果
- 支持 CI=true 无界面模式,可接入流水线做质量门禁
- 支持 docker、podman、docker-archive 多种镜像来源
- 安装方式丰富,覆盖主流包管理器与容器运行
- Go 单二进制分发,无额外运行时依赖
缺点
- 项目自述仍为 beta 质量,功能与输出可能变动
- 效率评分属实验性指标,仅供参考不宜作为唯一标准
- TUI 需要终端交互,纯脚本环境需切换 CI 模式
- 依赖本地 Docker/Podman 守护进程或镜像归档文件
- 对镜像层数极多的镜像,加载与浏览可能较慢
上手难度
入门
dive 是什么
dive 是一个用于逐层探索 Docker/OCI 镜像的命令行工具。它以 TUI(终端界面)形式展示镜像的每一层,左侧选择层、右侧查看该层叠加后的文件树,并用颜色标记文件的新增、修改与删除。
除了浏览,dive 还会给出一个实验性的「镜像效率」评分,估算因跨层重复写入、移动文件或未彻底删除而产生的浪费空间,帮助你判断镜像还能瘦身多少。
核心功能
- 按层查看镜像内容:选中某一层后,右侧展示该层与之前所有层合并后的文件树,可用方向键完整浏览目录结构。
- 标记层内变更:文件树中区分新增、修改、删除的文件,并可切换「仅看当前层」或「累计到当前层」的变更视图。
- 估算镜像效率:左下角展示层信息与浪费空间估算,同时给出百分比评分和浪费字节数。
- 构建后立即分析:用
dive build替代docker build,构建完成后直接进入分析界面。 - CI 集成:设置
CI=true后跳过界面,仅做分析并通过返回码给出通过/失败结果。 - 多镜像来源:通过
--source或source://image语法指定来源,支持docker、docker-archive、podman。
基本用法
分析一个已有镜像:
dive nginx:latest
构建并立即分析:
dive build -t my-app:dev .
指定镜像来源:
dive my-app:dev --source podman
# 或
dive docker-archive://./image.tar
在 CI 中以无界面模式运行:
CI=true dive my-app:dev
CI 门禁配置
在仓库根目录放置 .dive-ci 文件,可配置三条规则(示意):
rules:
lowestEfficiency: 0.95 # 效率低于该比例则失败
highestWastedBytes: 20MB # 浪费空间超过该值则失败
highestUserWastedPercent: 0.20 # 用户层浪费占比超过该值则失败
具体字段含义与默认值请以官方文档为准。
安装方式概览
dive 提供多种安装渠道,可按平台选择:
- Ubuntu/Debian:deb 包或 snap(注意 snap 与 apt 安装的 Docker 可能冲突)
- RHEL/CentOS:rpm 包
- Arch Linux:
pacman -S dive - macOS:Homebrew 或 MacPorts
- Windows:Chocolatey、scoop 或 winget
- Go:
go install github.com/wagoodman/dive@latest - Nix/NixOS:
nix-env -iA nixpkgs.dive - Docker:直接拉取镜像运行,需挂载 Docker socket
使用建议
- 把 dive 当作镜像体检工具:先看效率评分与浪费空间,再逐层定位问题文件。
- 优化 Dockerfile 时,关注「同一文件在多层被写入」和「临时文件未在同一层删除」两类典型浪费。
- 在 CI 中先用较宽松的阈值观察一段时间,再逐步收紧门禁,避免误伤正常构建。
- 若使用 Colima 等替代运行时,可能需要设置
DOCKER_HOST才能读取本地镜像。
评论
- 暂无评论,来写第一条吧。