如何在拉取之前确定 Docker 镜像的大小?

如何在拉取之前确定 Docker 镜像的大小?

我们可以像这样在 docker 网站上搜索可用的镜像文件:

在拉取之前我如何知道下载大小是多少?

docker.io pull [image]

答案1

查看 Docker 的 API,Docker 远程 API v1.10,似乎没有任何方法可以获取图像的大小。 “2.2 图片”小节展示了如何查询图片的规范。

例子

    GET /images/json?all=0 HTTP/1.1

**Example response**:

    HTTP/1.1 200 OK
    Content-Type: application/json

    [
      {
         "RepoTags": [
           "ubuntu:12.04",
           "ubuntu:precise",
           "ubuntu:latest"
         ],
         "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",
         "Created": 1365714795,
         "Size": 131506275,
         "VirtualSize": 131506275
      },
      {
         "RepoTags": [
           "ubuntu:12.10",
           "ubuntu:quantal"
         ],
         "ParentId": "27cf784147099545",
         "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
         "Created": 1364102658,
         "Size": 24653,
         "VirtualSize": 180116135
      }
    ]

但这个查询需要针对实际的 Docker 实例。下面的示例展示了如何使用上述 RESTful 查询:

$ echo -e "GET /images/json HTTP/1.0\r\n" | nc -U /var/run/docker.sock
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 858
Connection: close
Date: Fri, 20 Dec 2013 16:02:41 GMT

[{"Repository":"ubuntu","Tag":"12.04","Id":"8dbd9e392...",
"Created":1365714795,"Size":131502179,"VirtualSize":131502179},
{"Repository":"ubuntu","Tag":"latest","Id":"8dbd9e392...",
"Created":1365714795,"Size":131502179,"VirtualSize":131502179},
{"Repository":"ubuntu","Tag":"precise","Id":"8dbd9e392...",
"Created":1365714795,"Size":131502179,"VirtualSize":131502179},
{"Repository":"ubuntu","Tag":"12.10","Id":"b750fe792...",
"Created":1364102658,"Size":24653,"VirtualSize":180116135},
{"Repository":"ubuntu","Tag":"quantal","Id":"b750fe792...",
"Created":1364102658,"Size":24653,"VirtualSize":180116135}]

我发现没有办法使用这个特定的 RESTful 调用来查询公共存储库。唯一看起来可以查询 docker.io 图像的其他 RESTful 方法是通过搜索,GET /images/search但 API 没有显示为此返回的任何大小属性。

参考

答案2

这不是对您问题的直接回答,但我希望它仍然有帮助。

在里面磁盘使用脚本 在我的Docker实验 我用这样的东西:

docker run --entrypoint=/bin/sh $image -c 'du -sh / 2>/dev/null | cut -f1'

所以你可以运行,例如:

docker run --entrypoint=/bin/sh ubuntu -c 'du -sh / 2>/dev/null | cut -f1'

或者您可以下载该脚本:磁盘使用情况 并运行 eg./disk-usage "ubuntu busybox gcc"以显示这 3 个图像的磁盘使用情况(由 报告du -sh):

Image   Disk usage
-----   ----------
ubuntu  209M
busybox 2.6M
gcc     1.5G

请注意,它不会显示任何给定图像所需的实际下载,并且会在下载图像后显示结果,但它给出了一些关于给定图像与其他图像相比的臃肿程度的信息。

您可以在一台计算机上运行它来决定是否要在其他计算机上下载该图像,或者根本使用它。

答案3

我知道这是一个老问题,但从今天(10/2020)开始,该网站现在显示此信息。如果您单击“标签”选项卡,它会显示压缩后的大小:

docker hub 上的 ubuntu 示例https://hub.docker.com/_/ubuntu?tab=tags

在此输入图像描述

答案4

  1. 对于 Docker Hub 上的图像:
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
  1. 对于其他注册表(例如 Microsoft 容器注册表)上的映像。我想出了3种方法。

    • 用于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文件并设置experimentalenable。(参考:码头工人清单检查

    • 将镜像推送到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

相关内容