Project Icon

dive

Docker镜像分析与优化工具 深入探索层级内容

dive是一个开源的Docker镜像分析工具,可深入探索镜像层级内容,帮助优化容器大小。它通过可视化界面展示层级结构和文件变化,并提供镜像效率评估。支持多种镜像源和容器引擎,易于集成到CI流程。dive为开发者和DevOps工程师提供了理解和优化Docker镜像的有力工具。支持多平台安装,包括Ubuntu、Debian、RHEL、CentOS、Arch Linux、MacOS和Windows,可通过命令行或Docker容器方式运行,提供灵活的使用选项。dive还具备CI集成功能,能自动评估镜像效率,为持续优化Docker镜像提供支持。

dive

GitHub 发布 验证 Go 报告卡 许可证: MIT 捐赠

一个用于探索 Docker 镜像、层内容以及发现缩小 Docker/OCI 镜像大小方法的工具。

图片

要分析 Docker 镜像,只需使用镜像标签/ID/摘要运行 dive:

dive <你的镜像标签>

或者你可以直接使用 docker 命令运行 dive

alias dive="docker run -ti --rm  -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive"
dive <你的镜像标签>

# 例如
dive nginx:latest

如果你想构建镜像然后直接跳转到分析:

dive build -t <某个标签> .

在 Macbook 上构建(仅支持 Docker 容器引擎)

docker run --rm -it \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v  "$(pwd)":"$(pwd)" \
      -w "$(pwd)" \
      -v "$HOME/.dive.yaml":"$HOME/.dive.yaml" \
      wagoodman/dive:latest build -t <某个标签> .

此外,你可以在 CI 流程中运行此命令,以确保将浪费的空间降到最低(这会跳过 UI):

CI=true dive <你的镜像>

图片

这是测试版质量! 如果你想要新功能或发现bug,欢迎提交问题 :)

基本特性

按层显示 Docker 镜像内容

当你在左侧选择一个层时,右侧会显示该层与所有先前层组合的内容。此外,你可以使用箭头键完全探索文件树。

指示每层的变化

文件树中会标示已更改、修改、添加或删除的文件。可以调整为显示特定层的更改,或累积到该层的更改。

估算"镜像效率"

左下方窗格显示基本层信息和一个实验性指标,用于猜测你的镜像包含多少浪费空间。这可能是由于跨层复制文件、移动文件或未完全删除文件造成的。提供百分比"得分"和总浪费文件空间。

快速构建/分析循环

你可以用一条命令构建 Docker 镜像并立即进行分析: dive build -t 某个标签 .

你只需将 docker build 命令替换为相同的 dive build 命令即可。

CI 集成

分析镜像并根据镜像效率和浪费空间获得通过/失败结果。只需在调用任何有效的 dive 命令时在环境中设置 CI=true

支持多种镜像源和容器引擎

使用 --source 选项,你可以选择从哪里获取容器镜像:

dive <你的镜像> --source <源>

dive <源>://<你的镜像>

有效的 选项如下:

  • docker:Docker 引擎(默认选项)
  • docker-archive:磁盘上的 Docker Tar 存档
  • podman:Podman 引擎(仅限 Linux)

安装

Ubuntu/Debian

使用 deb 包:

DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb

使用 snap:

sudo snap install docker
sudo snap install dive
sudo snap connect dive:docker-executables docker:docker-executables
sudo snap connect dive:docker-daemon docker:docker-daemon

RHEL/Centos

DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.rpm
rpm -i dive_${DIVE_VERSION}_linux_amd64.rpm

Arch Linux

可在额外仓库中获取,并可通过 pacman 安装:

pacman -S dive

Mac

如果你使用 Homebrew

brew install dive

如果你使用 MacPorts

sudo port install dive

或从发布页面下载最新的 Darwin 构建版本。

Windows

下载最新发布版本

Go 工具 需要 Go 1.10 或更高版本。

go get github.com/wagoodman/dive

注意:以这种方式安装时,运行 dive -v 将无法看到正确的版本。

Nix/NixOS

在 NixOS 上:

nix-env -iA nixos.dive

在非 NixOS 系统上(Linux、Mac):

nix-env -iA nixpkgs.dive

Docker

docker pull wagoodman/dive

docker pull quay.io/wagoodman/dive

运行时需要包含 docker socket 文件:

docker run --rm -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    wagoodman/dive:latest <dive 参数...>

Docker for Windows(显示 PowerShell 兼容的换行符;对于 Command Prompt 兼容性,请合并为单行)

docker run --rm -it `
    -v /var/run/docker.sock:/var/run/docker.sock `
    wagoodman/dive:latest <dive 参数...>

注意: 根据您本地运行的 Docker 版本,可能需要将 Docker API 版本指定为环境变量:

   DOCKER_API_VERSION=1.37 dive ...

或者如果您使用 Docker 镜像运行:

docker run --rm -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e DOCKER_API_VERSION=1.37 \
    wagoodman/dive:latest <dive 参数...>

CI 集成

当使用环境变量 CI=true 运行 dive 时,dive UI 将被绕过,转而分析您的 Docker 镜像,并通过返回代码给出通过/失败的指示。目前通过在仓库根目录的 .dive-ci 文件支持三个指标:

rules:
  # 如果效率测量低于 X%,则标记为失败。
  # 以 0-1 之间的比率表示。
  lowestEfficiency: 0.95

  # 如果浪费的空间量至少为 X 或大于 X,则标记为失败。
  # 以 B、KB、MB 和 GB 表示。
  highestWastedBytes: 20MB

  # 如果浪费的空间占镜像的 X% 或更多,则标记为失败。
  # 注意:基础镜像层不包括在总镜像大小中。
  # 以 0-1 之间的比率表示;如果达到或超过阈值则失败。
  highestUserWastedPercent: 0.20

您可以使用 --ci-config 选项覆盖 CI 配置路径。

快捷键绑定

快捷键绑定描述
Ctrl + CQ退出
Tab在层视图和文件树视图之间切换
Ctrl + F过滤文件
PageUp向上滚动一页
PageDown向下滚动一页
Ctrl + A层视图:查看聚合的镜像修改
Ctrl + L层视图:查看当前层修改
Space文件树视图:展开/折叠目录
Ctrl + Space文件树视图:展开/折叠所有目录
Ctrl + A文件树视图:显示/隐藏添加的文件
Ctrl + R文件树视图:显示/隐藏删除的文件
Ctrl + M文件树视图:显示/隐藏修改的文件
Ctrl + U文件树视图:显示/隐藏未修改的文件
Ctrl + B文件树视图:显示/隐藏文件属性
PageUp文件树视图:向上滚动一页
PageDown文件树视图:向下滚动一页

UI 配置

无需配置,但您可以创建配置文件并覆盖值:

# 支持的选项为 "docker" 和 "podman"
container-engine: docker
# 即使在解析镜像存档时出现错误,也继续分析
ignore-errors: false
log:
  enabled: true
  path: ./dive.log
  level: info

# 注意:您可以通过用逗号分隔值来指定多个绑定。
# 注意:UI 提示源自第一个绑定
keybinding:
  # 全局绑定
  quit: ctrl+c
  toggle-view: tab
  filter-files: ctrl+f, ctrl+slash

  # 层视图特定绑定
  compare-all: ctrl+a
  compare-layer: ctrl+l

  # 文件视图特定绑定
  toggle-collapse-dir: space
  toggle-collapse-all-dir: ctrl+space
  toggle-added-files: ctrl+a
  toggle-removed-files: ctrl+r
  toggle-modified-files: ctrl+m
  toggle-unmodified-files: ctrl+u
  toggle-filetree-attributes: ctrl+b
  page-up: pgup
  page-down: pgdn

diff:
  # 您可以更改文件树(右侧窗格)中显示的默认文件。默认显示所有差异类型。
  hide:
    - added
    - removed
    - modified
    - unmodified

filetree:
  # 默认目录折叠状态
  collapse-dir: false

  # 文件树应占屏幕宽度的百分比(必须 >0 且 <1)
  pane-width: 0.5

  # 在文件树旁显示文件属性
  show-attributes: true

layer:
  # 启用显示此层和所有先前层的所有更改
  show-aggregated-changes: false

dive 将在以下位置搜索配置:

  • $XDG_CONFIG_HOME/dive/*.yaml
  • $XDG_CONFIG_DIRS/dive/*.yaml
  • ~/.config/dive/*.yaml
  • ~/.dive.yaml

如果需要,可以使用 .yml 代替 .yaml

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号