在拉取 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的方式是完美的。多谢!这确实对我有帮助。
-
参考他的回答,我使用以下命令来获取托管在 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
-
对于另一个注册表(如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 小时的终端会话,你可以自由地做任何事情。图像在那里可以轻松快速地下载。之后,我会获得有关图像所需的所有信息,无论是大小还是其他任何信息。我还可以通过当时和那里使用它来查看该图像是否适合我的工作。