下载 Docker 镜像的大小

Rav*_*ina 5 docker

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

有没有办法做到这一点?


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

ffcacfbccecb: Downloading [+++++>    ] 14.1 MB/30.13 MB
ffcdbdebabbe: Downloading [++>       ] 1.1 MB/12.02 MB
Run Code Online (Sandbox Code Playgroud)

所以它的下载大小是“42.15”。

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

ffcacfbccecb: Downloading [+++++>    ] 14.1 MB/30.13 MB
ffcdbdebabbe: Waiting
Run Code Online (Sandbox Code Playgroud)

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

And*_*inn 4

不幸的是,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)
Run Code Online (Sandbox Code Playgroud)

现在,您可以查询标签 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'
Run Code Online (Sandbox Code Playgroud)

您应该返回类似169817871整个图像大小(以字节为单位)的信息。这是根据https://gist.github.com/kizbitz/e59f95f7557b4bbb8bf2中的信息修改的示例。

  • 值得一提的是,我们可以将 `curl` 输出 pip 到 `numfmt --to=iec-i` 以获得人类可读的数字,例如:`162Mi`。 (2认同)