如何查看Docker镜像的树形视图?

67

我知道docker已经弃用了--tree标志从docker images命令中。但是我找不到任何方便的命令来获取与docker images --tree相同的输出结果。我发现dockviz,但它似乎是另一个要运行的容器。有没有内置的cli命令可以查看映像的树形视图而不使用dockviz

1个回答

104

更新于2021年11月:对于在线公共图像,您可以使用在线服务contains.dev

更新于2018年11月,docker 18.09.
现在您可以使用wagoodman/dive,这是一个用于探索Docker镜像中每个层的工具。

dive

To analyze a Docker image simply run dive with an image tag/id/digest:

dive <your-image-tag>

or if you want to build your image then jump straight into analyzing it:

dive build -t <some-tag> .

目前(2015年9月,docker 1.8),问题5001提到的解决方法仍然是dockviz

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nate/dockviz images -t

-t 选项允许保持在命令行界面中(无需图形界面)。


2016年9月更新(Docker 1.10之后:即将推出1.11和1.12),一年后,如同样的问题5001中所述,由Michael Härtl提到:

自1.10以来,层ID的工作方式已经发生了根本性的变化。关于这个主题的详细解释,请参见#20399。也有#20451,但我不确定nate/dockviz镜像是否可以使用它。

就个人而言,我发现新层的工作方式非常令人困惑,透明度比以前低得多。而且文档也不是很好。
据我所知,@tonistiigi在上述问题中的评论是唯一可用的公共解释。

Tõnis Tiigi

在v1.10之前,没有层的概念,或者说每个镜像只有一个层。您构建了一条图像链,然后推拉这条链。链中的所有图像都有自己的配置。
现在有一个层的概念,它是一个内容可寻址的文件系统差异。每个图像配置都有一个层引用数组,组成图像的根文件系统,没有任何图像需要从其父级运行。推拉只移动单个图像,父级图像仅用于本地构建以供缓存使用。
如果您使用Dockerfile构建图像,则每个命令都会将历史记录项添加到图像配置中。这将存储命令,因此您可以在docker history中看到它。由于这是图像配置的一部分,因此它也随推/拉移动并包含在校验和验证中。
以下是一些内容可寻址配置的示例: https://gist.github.com/tonistiigi/6447977af6a5c38bbed8 v1.10中的术语:(实现上术语并没有改变,但我们先前的文档可能简化了事情)。 - 层是文件系统差异。一堆文件,当它们堆叠在一起时,组成一个根文件系统。层由图形驱动程序管理,它们不知道任何关于图像的信息。 - 图像是可以运行并显示在`docker images -a`中的东西。需要有一个配置对象。当容器启动时,它需要一种从图像信息生成根文件系统的方式。在构建过程中,每个Dockerfile命令都会创建一个新的图像。

您可以参考更近期的项目TomasTomecek/sen,该项目:

https://github.com/TomasTomecek/sen/raw/master/data/image-tree.gif


我遇到了这个错误信息:docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"images\": executable file not found in $PATH": unknown. - Ivan Aracki
@IvanAracki 可能是因为 Docker 的 sock 没有正确共享?你输入了什么确切的命令行?在哪个操作系统上?如果问题仍然存在,必须在 https://github.com/justone/dockviz/issues 上报告。 - VonC
在 macOS 上执行以下命令:docker run --rm -v /var/run/docker.sock:/var/run/docker.sock apache/nifi:latest images -t - Ivan Aracki
@IvanAracki 然后这似乎是有道理的:images 只能与 nate/dockviz 一起使用,而不能与 xxx/yyy 一起使用。 https://hub.docker.com/r/apache/nifi/ 不适用于运行 'images'。 - VonC
@joveny 是的,那是一种方法。或者你可以在本地重新构建它。所有可能的安装都列在 https://github.com/wagoodman/dive#installation 上。 - VonC
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接