如何分析并探索Docker容器镜像的内容

开源
通过分析 Docker 镜像,我们可以发现在各个层之间可能重复的文件并通过移除它们来减小 Docker 镜像的大小。Dive 工具不仅仅是一个 Docker 镜像分析工具,它还可以帮助我们来构建镜像。Dive 是一个用 Go 编程语言编写的自由开源工具。

https://s3.51cto.com/oss/201811/05/345842ab22a546d678117d276709893a.png

或许你已经了解到 Docker 容器镜像是一个轻量、独立、含有运行某个应用所需全部软件的可执行包,这也是为什么容器镜像会经常被开发者用于构建和分发应用。假如你很好奇一个 Docker 镜像里面包含了什么东西,那么这篇简要的指南或许会帮助到你。今天,我们将学会使用一个名为 Dive 的工具来分析和探索 Docker 镜像每层的内容。

通过分析 Docker 镜像,我们可以发现在各个层之间可能重复的文件并通过移除它们来减小 Docker 镜像的大小。Dive 工具不仅仅是一个 Docker 镜像分析工具,它还可以帮助我们来构建镜像。Dive 是一个用 Go 编程语言编写的自由开源工具。

安装 Dive

首先从该项目的 发布页 下载***版本,然后像下面展示的那样根据你所使用的发行版来安装它。

假如你正在使用 Debian 或者 Ubuntu,那么可以运行下面的命令来下载并安装它。

  1. $ wget https://github.com/wagoodman/dive/releases/download/v0.0.8/dive_0.0.8_linux_amd64.deb
  1. $ sudo apt install ./dive_0.0.8_linux_amd64.deb

在 RHEL 或 CentOS 系统中

  1. $ wget https://github.com/wagoodman/dive/releases/download/v0.0.8/dive_0.0.8_linux_amd64.rpm
  1. $ sudo rpm -i dive_0.0.8_linux_amd64.rpm

Dive 也可以使用 Linuxbrew 包管理器来安装。

  1. $ brew tap wagoodman/dive
  1. $ brew install dive

至于其他的安装方法,请参考 Dive 项目的 GitHub 网页

分析并探索 Docker 镜像的内容

要分析一个 Docker 镜像,只需要运行加上 Docker 镜像 ID 的 dive 命令就可以了。你可以使用 sudo docker images 来得到 Docker 镜像的 ID。

  1. $ sudo dive ea4c82dcd15a

上面命令中的 ea4c82dcd15a 是某个镜像的 ID。

然后 dive 命令将快速地分析给定 Docker 镜像的内容并将它在终端中展示出来。

 

正如你在上面的截图中看到的那样,在终端的左边一栏列出了给定 Docker 镜像的各个层及其详细内容,浪费的空间大小等信息。右边一栏则给出了给定 Docker 镜像每一层的内容。你可以使用 Ctrl+空格 来在左右栏之间切换,使用 UP/DOWN 光标键来在目录树中进行浏览。

下面是 dive 的快捷键列表:

  • Ctrl+空格 —— 在左右栏之间切换
  • 空格 —— 展开或收起目录树
  • Ctrl+A —— 文件树视图:展示或隐藏增加的文件
  • Ctrl+R —— 文件树视图:展示或隐藏被移除的文件
  • Ctrl+M —— 文件树视图:展示或隐藏被修改的文件
  • Ctrl+U —— 文件树视图:展示或隐藏未修改的文件
  • Ctrl+L —— 层视图:展示当前层的变化
  • Ctrl+A —— 层视图:展示总的变化
  • Ctrl+/ —— 筛选文件
  • Ctrl+C —— 退出

在上面的例子中,我使用了 sudo 权限,这是因为我的 Docker 镜像存储在 /var/lib/docker/ 目录中。假如你的镜像保存在你的家目录 ($HOME)或者在其他不属于 root 用户的目录,你就没有必要使用 sudo 命令。

你还可以使用下面的单个命令来构建一个 Docker 镜像并立刻分析该镜像:

  1. $ dive build -t <some-tag>

Dive 工具仍处于 beta 阶段,所以可能会存在 bug。假如你遇到了 bug,请在该项目的 GitHub 主页上进行报告。

好了,这就是今天的全部内容。现在你知道如何使用 Dive 工具来探索和分析 Docker 容器镜像的内容以及利用它构建镜像。希望本文对你有所帮助。 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2014-11-27 09:59:02

dockerlinux技巧

2016-08-23 09:16:46

Docker镜像容器

2019-07-16 14:44:52

DockerMySQL操作系统

2023-05-30 14:56:18

Docker开发容器

2021-10-26 07:24:10

Gorsair容器安全工具

2021-12-22 10:45:56

Docker RegiHarborLinux

2019-09-10 13:34:30

Linux操作系统软件

2019-03-28 10:20:09

容器镜像系统运维Linux

2022-07-18 11:13:07

容器安全Docker

2016-01-28 10:07:07

DockerDocker镜像

2024-01-16 09:39:13

Docker系统

2022-10-08 00:00:02

Docker项目技术

2021-12-12 22:20:47

Docker开发容器

2019-07-01 09:33:58

DockerNginx操作系统

2024-01-10 09:48:52

Docker工具

2023-11-26 00:52:12

Docker镜像容器

2018-06-05 08:58:38

Docker存储容器

2020-08-24 07:00:00

服务器Docker技术

2023-06-16 16:06:02

lazydockerDocker容器

2022-01-05 18:19:30

容器镜像Golang
点赞
收藏

51CTO技术栈公众号