在拉动之前如何确定Docker映像大小?


34

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

如何确定拉动之前的下载大小?

docker.io pull [image]

1
这不是一个一般性的答案,而是查看stackbrew ubuntu图像的构建方式,您可以从使用的tarball中猜出图像大小的下限。(对于可预测的带宽使用情况,您可以自己构建映像-然后您将知道下载了多少文件,即只是tarball本身。)
sr_14年

Answers:


14

看一下Docker的API,Docker Remote 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方法是通过search GET /images/search,但是API并未显示为此返回的任何size属性。

参考文献


感谢您的见解!希望码头团队将通过docker search
Sepero 2014年

@Sepero-是的,我敢肯定,随着时间的流逝,诸如此类的东西将会增加。如果此A解决了您的问题,请标记为已接受,以便其他人也知道您的问题也已解决。
slm

太棒了,正是我所需要的!
Brady Dowling

7

这不是您问题的直接答案,但我希望它会有所帮助。

在 我的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'

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

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

请注意,它没有显示任何给定图像所需的实际下载量,并且会在下载图像后显示结果,但是它可以使您了解给定图像与其他图像相比肿的程度。

您可以在一台计算机上运行它来决定是要在另一台计算机上下载该图像还是要完全使用它。




1
  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 Container Registry)上的图像。我想出了三种方法。

    • 使用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 manifest inspect

    • 将映像推送到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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.