AX 爱鲜报

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 才能读取本地镜像。

评论

登录后才可评论与评分

0 条评论

  • 暂无评论,来写第一条吧。