下载 Docker 映像的大小



在拉取 Docker 镜像时,它会将其下载到单独的部分(层(中。在实际下载图像之前,我需要获取图像所有必要层的下载大小。

有没有办法做到这一点?


可以只运行docker pull命令并观察输出:

ffcacfbccecb: Downloading [+++++>    ] 14.1 MB/30.13 MB
ffcdbdebabbe: Downloading [++>       ] 1.1 MB/12.02 MB

所以它的下载大小是"42.15"。

但是,我启用了一些选项来逐个下载图层:

ffcacfbccecb: Downloading [+++++>    ] 14.1 MB/30.13 MB
ffcdbdebabbe: Waiting

所以这个解决方案对我不起作用。

不幸的是,Docker Hub API 没有公开记录。但是,您可以获取用于 API 的 JWT,然后调用以列出标记以获取大小。下面是一个使用 jq 解析大小(以字节为单位(的示例:

首先进行身份验证以获取令牌:

export HUBUSER=andyshinn
export HUBPASS=mypass
export HUBTOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${HUBUSER}'", "password": "'${HUBPASS}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)

现在,您可以查询标签 API 以筛选特定标签并获取大小。在这个例子中,我们获取官方库wordpress图像并过滤掉latest标签:

curl -s -H "Authorization: JWT ${TOKEN}" "https://hub.docker.com/v2/repositories/library/wordpress/tags/?page_size=100" | jq -r '.results[] | select(.name == "latest") | .images[0].size'

你应该得到类似169817871的东西,它是整个图像的大小,以字节为单位。这是根据 https://gist.github.com/kizbitz/e59f95f7557b4bbb8bf2 找到的信息修改的示例。

@Andy的方式是完美的。多谢!这确实对我有帮助。

  1. 参考他的回答,我使用以下命令来获取托管在 Docker Hub 上的 Docker 映像的压缩大小:

    curl -s -H "Authorization: JWT " "https://hub.docker.com/v2/repositories/library/<image-name>/tags/?page_size=100" | jq -r '.results[] | select(.name == "<tag-name>") | .images[0].size' | numfmt --to=iec-i
    
  2. 对于另一个注册表(如Microsoft容器注册表(上的映像,我想出了三种方法:

    • 使用docker manifest inspect观察清单数据,这可以让您了解如何获得图像的压缩大小。

      docker manifest inspect -v <registry-domain>/<image-name> | grep size | awk -F ':' '{sum+=$NF} END {print sum}' | numfmt --to=iec-i
      

      要启用docker manifest inspect,请编辑~/.docker/config.json文件并将experimental设置为enable。(参考:码头工人清单检查(

    • 将镜像推送到 Docker Hub,你可以在 Docker Hub 网站上获取镜像的压缩大小。

    • 使用docker save将图像保存到.tar文件,然后将其压缩为.tar.gz文件。

      docker save my-image:latest > my-image.tar
      # Compress the .tar file
      gzip my-image.tar
      # Check the size of the compressed image
      ls -lh my-image.tar.gz
      

你可以去Docker页面,例如:MySQL容器标签,正如你在这个图像中看到的强文本,我希望它对你和其他的人有所帮助。

然而,@Andy提供的答案更像是程序员的选择,也是更好的方法。我通常使用另一种我觉得更容易和方便的方式。

我经常使用在线实验室来测试Docker-image的大小和性能。我最喜欢的是 play-with-docker,它提供了一个大约 3 小时的终端会话,你可以自由地做任何事情。图像在那里可以轻松快速地下载。之后,我会获得有关图像所需的所有信息,无论是大小还是其他任何信息。我还可以通过当时和那里使用它来查看该图像是否适合我的工作。

最新更新