gpt4 book ai didi

docker - 如何通过docker API正确获取docker镜像的总大小?

转载 作者:行者123 更新时间:2023-12-02 18:07:45 26 4
gpt4 key购买 nike

我想通过docker API获取docker镜像的总大小,例如GET /v2/<name>/manifests/<reference>此处描述 docker spec

我得到了一个带有大小的层列表,比如这个 example , 我把这些尺寸加起来,但得到的数字小于 docker images命令显示,因为我知道 docker 注册表将这些层文件存储为 gzipped tar 文件,所以这个总和应该小于 docker images 显示的大小命令。

如何通过docker API正确获取总图像大小?
我想获得与 docker images 相同的大小命令显示。

最佳答案

TLDRdocker images 给出的大小是 未压缩大小 已安装的图像 本地 ,你只能得到来自注册表 的尺寸压缩图像 (对于每个架构,如果你想要每个层)。
来自本地镜像docker images 给出的大小是 系统上图像的未压缩大小 .

# getting the size of alpine:latest
docker images alpine:latest --format "{{.Repository}}:{{.Tag}} -> {{.Size}}"

# alpine:latest -> 5.57MB
如果您下载图像 locally 可以获得相同的信息通过使用 docker inspect命令。
docker inspect alpine:latest | jq '.[].Size' 

# 5573013
从注册表
据我所知你只能得到 从注册表中获取图像的压缩大小 .
curl -s https://hub.docker.com/v2/repositories/library/alpine/tags/ | \
jq '.results[] | select(.name=="latest") | .full_size'

# 2796860
事实上,注册表可以给出 的图像大小。每个架构 .
curl -s https://hub.docker.com/v2/repositories/library/alpine/tags/ | \
jq '.results[] | select(.name=="latest") | .images[] | {architecture: .architecture, size: .size}'

# {
# "architecture": "arm",
# "size": 2405675
# }
# {
# "architecture": "arm",
# "size": 2601912
# }
# {
# "architecture": "386",
# "size": 2791407
# }
# {
# "architecture": "s390x",
# "size": 2565829
# }
# {
# "architecture": "ppc64le",
# "size": 2803218
# }
# {
# "architecture": "amd64",
# "size": 2796860
# }
# {
# "architecture": "arm64",
# "size": 2706555
# }
您甚至可以获取 的详细信息每层的压缩大小通过使用 docker manifest inspect实验命令。
# activate experimental mode
export DOCKER_CLI_EXPERIMENTAL=enabled

docker manifest inspect -v alpine:latest | \
jq '.[] | select(.Descriptor.platform.architecture=="amd64") | .SchemaV2Manifest.layers[].size'

# 2796860
如果有多个图层,您可以将它们相加。这是一个带有 jupyter/base-notebook:latest 的示例
# getting the size through the API
curl -s https://hub.docker.com/v2/repositories/jupyter/base-notebook/tags | \
jq '.results[] | select(.name=="latest") | .full_size'

# 187647701

# summing each layer
docker manifest inspect jupyter/base-notebook:latest | jq '[.layers[].size] | add'

# 187647701

关于docker - 如何通过docker API正确获取docker镜像的总大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40377199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com