dive工具可直观定位镜像中占用空间最多的文件。它逐层展开统计新增文件大小、高亮冗余内容,支持按大小排序、关键词搜索,并配合docker system df -v缩小分析范围,结合.dockerignore、多阶段构建等源头优化策略,再通过waste得分验证效果。

直接用 Dive 工具就能直观定位镜像里占用空间最多的文件,比手动 inspect 或查 overlay2 路径高效得多。
用 Dive 快速定位大文件
Dive 是专为镜像层分析设计的命令行工具,它能逐层展开、统计每层新增文件大小,并高亮显示重复或未清理的冗余内容。
- 安装后运行
dive <image_name></image_name>,进入交互界面,按Tab切换到“Layers”视图 - 每层右侧显示该层新增文件总大小,顶部会标出当前层最大单个文件(如
/usr/lib/libxxx.so或日志包) - 切换到“Files”视图,可按文件大小倒序排列,直接看到前 20 名大文件及其所在路径和所属 layer ID
- 支持搜索(
/键),输入.tar、node_modules、cache等关键词快速过滤常见体积大户
配合 docker system df -v 定位问题镜像
先缩小范围,再深入分析:
- 运行
docker system df -v,查看 “Images” 表格中 SIZE 最大的几项 - 记下对应 IMAGE ID 或 REPOSITORY:TAG,作为 dive 的目标对象
- 若发现某镜像 UNIQUE SIZE 明显偏高(接近 TOTAL SIZE),说明它没复用基础层,大概率存在未清理的构建产物
构建阶段就避免大文件写入
分析只是手段,关键在源头控制:
- COPY 或 ADD 操作前,确认源目录不含
node_modules、.git、dist/*.zip等非运行必需内容 - 用
.dockerignore排除构建上下文中的大文件和敏感目录 - 多阶段构建中,只 COPY 编译产物,不 COPY 整个构建环境(比如 Go 的
go build输出后,第二阶段不带GOROOT) - RUN 命令合并:把
apt install和apt clean写在同一行,防止缓存层残留几百 MB 的包缓存
验证优化效果
改完 Dockerfile 后别只看最终镜像大小:
- 用
dive build -t new-img .一键构建并打开分析界面,对比前后各层新增体积 - 重点关注 “Waste” 得分——Dive 给出的浪费空间百分比,下降明显说明优化有效
- 导出层报告:
dive --no-color --ci --quiet <image> 2>&1 | grep "Waste"</image>可用于 CI 中自动校验











