Мы можем искать доступные файлы изображений на веб-сайте докера следующим образом:
Как я могу узнать, какой размер будет загружен до вытягивания?
docker.io pull [image]
Мы можем искать доступные файлы изображений на веб-сайте докера следующим образом:
Как я могу узнать, какой размер будет загружен до вытягивания?
docker.io pull [image]
Ответы:
Глядя на API для Docker, 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. Единственный другой метод RESTful, который выглядел так, как если бы вы могли запрашивать изображения docker.io, был через поиск GET /images/search
, но API не показывает никаких атрибутов размера, возвращаемых для этого.
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-using
и запустить, например, ./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
Если вы действительно изучаете код докера для операции извлечения, я думаю, что ваш ответ здесь. Если изображение контейнера не кэшируется, то во время извлечения изображения докер сначала собирает из реестра информацию об изображении, такую как количество слоев, размер каждого слоя и т. Д. И т. Д.
Я хотел бы сослаться, чтобы прочитать этот файл.
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. Я выясняю 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
файл и установите experimental
в enable
. (Ссылка: проверка манифеста Docker )
Переместите изображение в 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