我们可以像这样在docker网站上搜索可用的图像文件:
如何确定拉动之前的下载大小?
docker.io pull [image]
我们可以像这样在docker网站上搜索可用的图像文件:
如何确定拉动之前的下载大小?
docker.io pull [image]
Answers:
看一下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
这不是您问题的直接答案,但我希望它会有所帮助。
在 我的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
请注意,它没有显示任何给定图像所需的实际下载量,并且会在下载图像后显示结果,但是它可以使您了解给定图像与其他图像相比肿的程度。
您可以在一台计算机上运行它来决定是要在另一台计算机上下载该图像还是要完全使用它。
对于HTTP API v2,可通过size
和下的标签资源获得大小full_size
。这是我的一个仓库中的一个示例URL:
https://cloud.docker.com/v2/repositories/deepdriveio/deepdrive/tags/?page_size=25&page=1
如果您真的研究了用于拉操作的docker代码,我想您的答案就在那里。如果未缓存容器的映像,则在拉取映像期间,泊坞窗首先会从注册表中收集有关映像的信息,例如层数,每层大小等。
我将参考阅读此文件。
https://github.com/moxiegirl/docker/blob/master/distribution/xfer/download.go
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 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
文件并将其设置experimental
为enable
。(参考: 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