文章目录dive给 Docker 镜像做一次逐层解剖1、 这玩意儿是干嘛的2、 怎么看浪费在哪3、 怎么用4、 放进 CI 流水线5、 适合谁用dive给 Docker 镜像做一次逐层解剖dive 在 GitHub 上已经拿到 53.9K Star 了。这个 Go 写的命令行工具只做一件事把 Docker 镜像一层层拆开让你看清楚每一层里塞了什么浪费了多少空间。1、 这玩意儿是干嘛的让 Docker 镜像的每一层变成可浏览的目录树。Docker 镜像的本质是分层叠加。Dockerfile 里每条 RUN 指令生成一层。装依赖是一层删临时文件又是一层。表面上文件被删了实际前面那层的数据还留在镜像里只是被后面那层盖掉了。结果就是你写了一个自认为 50M 的小镜像拉下来发现快 1G。多出来的 950M 全是历史残留。dive 做的事就是把这些残留找出来。它逐层拆解镜像标记每一层里新增的文件、修改的文件、删除的文件算出一个效率分告诉你浪费了多少字节。用终端里的交互界面操作上下左右就能浏览所有层级和文件。2、 怎么看浪费在哪dive 提供两种视角。第一种是聚合视图。选中某一层右边文件树展示从第一层到这一层累积的全部文件。新增、修改、删除每种用不同颜色标出来。按 CtrlA 就能看到镜像从开始到当前层的全部累积变化。第二种是单层差异。只看当前层相对于上一层的改动按 CtrlL 切换到这个模式。适合定位到具体是哪一层引入了不该有的文件或者哪一层覆盖了一个大文件。它对浪费的定义很直接同一文件在不同层之间被复制算浪费文件在这一层写入、下一层被覆盖算浪费文件被删了但前面层还残留也算浪费。三项汇总后给一个效率百分比同时给出浪费字节的具体数字。左下角能看到每层的体积和累计大小效率低于某个比例会醒目提示。3、 怎么用一行命令dive 镜像名比如dive nginx:latest回车后打开终端交互界面。左边是层列表列出每条指令生成的一层右边是该层的文件树。方向键上下移动Tab 在左右面板之间切换空格可以折叠展开目录。不需要手动拉镜像dive 自己去取。支持 Docker 引擎、Podman 引擎、本地 tar 归档三种来源用--source参数切换。也能直接dive build -t some-tag .替代docker build编完立刻看结果不用切工具。用 Docker 版的更省事设个 aliasalias divedocker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive安装途径覆盖了主流平台Ubuntu 用 apt 或 snapCentOS 用 rpmMac 用 brewWindows 用 choco 或 scoopArch 用 pacman也有 Go install 和 Nix 方式。4、 放进 CI 流水线CI 模式设置一个环境变量CItrue dive 镜像名此时 dive 跳过交互界面分析镜像后根据规则文件.dive-ci里的阈值判断通过还是失败返回对应的退出码。规则文件配置三条最低效率比例、最大浪费空间、用户层浪费比例上限。任一条不达标CI 就标失败。适合放在镜像构建流水线里做质量卡点每次 build 完自动跑一遍。5、 适合谁用每天跟 Docker 镜像打交道、被镜像体积困扰的开发者。维护 CI 流水线、想把镜像瘦身检查自动化的 DevOps。对容器镜像体积有明确约束、需要定期审计镜像结构的团队。积困扰的开发者。维护 CI 流水线、想把镜像瘦身检查自动化的 DevOps。对容器镜像体积有明确约束、需要定期审计镜像结构的团队。
dive:给 Docker 镜像做一次逐层解剖
发布时间:2026/6/8 6:46:22
文章目录dive给 Docker 镜像做一次逐层解剖1、 这玩意儿是干嘛的2、 怎么看浪费在哪3、 怎么用4、 放进 CI 流水线5、 适合谁用dive给 Docker 镜像做一次逐层解剖dive 在 GitHub 上已经拿到 53.9K Star 了。这个 Go 写的命令行工具只做一件事把 Docker 镜像一层层拆开让你看清楚每一层里塞了什么浪费了多少空间。1、 这玩意儿是干嘛的让 Docker 镜像的每一层变成可浏览的目录树。Docker 镜像的本质是分层叠加。Dockerfile 里每条 RUN 指令生成一层。装依赖是一层删临时文件又是一层。表面上文件被删了实际前面那层的数据还留在镜像里只是被后面那层盖掉了。结果就是你写了一个自认为 50M 的小镜像拉下来发现快 1G。多出来的 950M 全是历史残留。dive 做的事就是把这些残留找出来。它逐层拆解镜像标记每一层里新增的文件、修改的文件、删除的文件算出一个效率分告诉你浪费了多少字节。用终端里的交互界面操作上下左右就能浏览所有层级和文件。2、 怎么看浪费在哪dive 提供两种视角。第一种是聚合视图。选中某一层右边文件树展示从第一层到这一层累积的全部文件。新增、修改、删除每种用不同颜色标出来。按 CtrlA 就能看到镜像从开始到当前层的全部累积变化。第二种是单层差异。只看当前层相对于上一层的改动按 CtrlL 切换到这个模式。适合定位到具体是哪一层引入了不该有的文件或者哪一层覆盖了一个大文件。它对浪费的定义很直接同一文件在不同层之间被复制算浪费文件在这一层写入、下一层被覆盖算浪费文件被删了但前面层还残留也算浪费。三项汇总后给一个效率百分比同时给出浪费字节的具体数字。左下角能看到每层的体积和累计大小效率低于某个比例会醒目提示。3、 怎么用一行命令dive 镜像名比如dive nginx:latest回车后打开终端交互界面。左边是层列表列出每条指令生成的一层右边是该层的文件树。方向键上下移动Tab 在左右面板之间切换空格可以折叠展开目录。不需要手动拉镜像dive 自己去取。支持 Docker 引擎、Podman 引擎、本地 tar 归档三种来源用--source参数切换。也能直接dive build -t some-tag .替代docker build编完立刻看结果不用切工具。用 Docker 版的更省事设个 aliasalias divedocker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker.io/wagoodman/dive安装途径覆盖了主流平台Ubuntu 用 apt 或 snapCentOS 用 rpmMac 用 brewWindows 用 choco 或 scoopArch 用 pacman也有 Go install 和 Nix 方式。4、 放进 CI 流水线CI 模式设置一个环境变量CItrue dive 镜像名此时 dive 跳过交互界面分析镜像后根据规则文件.dive-ci里的阈值判断通过还是失败返回对应的退出码。规则文件配置三条最低效率比例、最大浪费空间、用户层浪费比例上限。任一条不达标CI 就标失败。适合放在镜像构建流水线里做质量卡点每次 build 完自动跑一遍。5、 适合谁用每天跟 Docker 镜像打交道、被镜像体积困扰的开发者。维护 CI 流水线、想把镜像瘦身检查自动化的 DevOps。对容器镜像体积有明确约束、需要定期审计镜像结构的团队。积困扰的开发者。维护 CI 流水线、想把镜像瘦身检查自动化的 DevOps。对容器镜像体积有明确约束、需要定期审计镜像结构的团队。