Ми можемо шукати доступні файли зображень на веб-сайті докера так:
Як я можу сказати, який розмір (и) для завантаження будуть перед витягненням?
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 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 "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 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