查找每个Docker镜像的图层和图层大小

use*_*589 78 image web-crawler docker

出于研究目的,我正在尝试抓取公共Docker注册表(https://registry.hub.docker.com/)并找出1)平均图像有多少层,以及2)这些层的大小以获得分配的想法.

但是我研究了API和公共库以及github上的细节,但是我找不到任何方法:

  • 检索所有公共存储库/图像(即使这些是数千个,我仍然需要一个起始列表来迭代)
  • 找到图像的所有图层
  • 找到图层的大小(所以不是图像,而是单个图层).

任何人都可以帮我找到检索此信息的方法吗?

谢谢!

编辑:是否有人能够验证在Docker注册表中搜索'*'是否返回所有存储库而不是任何在任何地方提到'*'的东西?https://registry.hub.docker.com/search?q=*

Vis*_*esn 68

您可以在/ var/lib/docker/aufs/layers文件夹中找到图像的图层; 如果您将存储驱动程序配置为aufs(默认选项),则提供

例:

 docker ps -a
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
 0ca502fa6aae        ubuntu              "/bin/bash"         44 minutes ago      Exited (0) 44 seconds ago                       DockerTest
Run Code Online (Sandbox Code Playgroud)

现在查看使用图像"Ubuntu"创建的容器层; 转到/ var/lib/docker/aufs/layers目录,cat文件以容器ID开头(这里是0ca502fa6aae*)

 root@viswesn-vm2:/var/lib/docker/aufs/layers# cat    0ca502fa6aaefc89f690736609b54b2f0fdebfe8452902ca383020e3b0d266f9-init 
 d2a0ecffe6fa4ef3de9646a75cc629bbd9da7eead7f767cb810f9808d6b3ecb6
 29460ac934423a55802fcad24856827050697b4a9f33550bd93c82762fb6db8f
 b670fb0c7ecd3d2c401fbfd1fa4d7a872fbada0a4b8c2516d0be18911c6b25d6
 83e4dde6b9cfddf46b75a07ec8d65ad87a748b98cf27de7d5b3298c1f3455ae4
Run Code Online (Sandbox Code Playgroud)

这将通过运行显示相同的结果

root@viswesn-vm2:/var/lib/docker/aufs/layers# docker history ubuntu
IMAGE               CREATED             CREATED BY                                         SIZE                COMMENT
d2a0ecffe6fa        13 days ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                 
29460ac93442        13 days ago         /bin/sh -c sed -i 's/^#\s*\   (deb.*universe\)$/   1.895 kB            
b670fb0c7ecd        13 days ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   194.5 kB            
83e4dde6b9cf        13 days ago         /bin/sh -c #(nop) ADD file:c8f078961a543cdefa   188.2 MB 
Run Code Online (Sandbox Code Playgroud)

查看完整的图层ID; 使用--no-trunc选项作为history命令的一部分运行.

docker history --no-trunc ubuntu
Run Code Online (Sandbox Code Playgroud)

  • 自从Docker版本1.10开始,随着内容可寻址存储的引入,图像和图层现在已经分开.`docker history`命令不再告诉docker主机上的实际层磁盘存储信息.检查这个[博客](http://windsock.io/explaining-docker-image-ids/) (6认同)
  • docker 1.10 版以后不再是这种情况。`docker history` 命令不会提供 /var/lib/docker/aufs/layers 文件夹中所示的图像层。阅读更新 [此处](https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/#copying-makes-containers-efficient)。 (3认同)

Yuc*_*uci 28

这是一篇关于Docker Image的Show Layers的好文章

您可以先找到图片ID:

$ docker images -a
Run Code Online (Sandbox Code Playgroud)

然后找到它的图层和大小:

$ docker history --no-trunc <Image ID>
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是Docker 1.13.1版

$ docker -v
Docker version 1.13.1, build 092cba3
Run Code Online (Sandbox Code Playgroud)

  • +1我不得不删除 --no-trunc 因为输出在我的终端上不可用,但这仍然提供了很好的信息。 (4认同)

030*_*030 14

我认为docker history <image>就足够了。这将返回每个图层的大小:

$ docker history jenkinsci-jnlp-slave:2019-1-9c
IMAGE        CREATED    CREATED BY                                    SIZE  COMMENT
93f48953d298 42 min ago /bin/sh -c #(nop)  USER jenkins               0B
6305b07d4650 42 min ago /bin/sh -c chown jenkins:jenkins -R /home/je… 1.45GB
Run Code Online (Sandbox Code Playgroud)


sun*_*cmf 10

他们在这里有一个非常好的答案:https: //stackoverflow.com/a/32455275/165865

只需在图片下方运行:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nate/dockviz images -t
Run Code Online (Sandbox Code Playgroud)


lvt*_*llo 8

这将检查docker图像并打印图层:

$ docker image inspect nginx -f '{{.RootFS.Layers}}'
[sha256:d626a8ad97a1f9c1f2c4db3814751ada64f60aed927764a3f994fcd88363b659 sha256:82b81d779f8352b20e52295afc6d0eab7e61c0ec7af96d85b8cda7800285d97d sha256:7ab428981537aa7d0c79bc1acbf208c71e57d9678f7deca4267cc03fba26b9c8]
Run Code Online (Sandbox Code Playgroud)


Lev*_*von 5

退房潜水写在golang。

很棒的工具。

您可以调整源代码,以便将显示的所有信息导出到json文件中。