Как определить размер изображения Докера прежде чем быть вытянутым?

Так как Вы выполняете это на другом уровне оболочки, он расширен, прежде чем он будет выполнен в подоболочке. Самый легкий способ зафиксировать это состоит в том, чтобы выйти из любых специальных символов в имени файла:

adb shell find /storage/sdcard0/Sound\ Recordings/ | tail -1 | while IFS= read -r file ; do
    adb pull "$(printf %q "$file")" ~/Desktop/
done
35
14.01.2018, 19:57
6 ответов

Глядя на 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 не показывает никаких атрибутов размера, возвращаемых для этого.

Ссылки

14
27.01.2020, 19:36

Это не прямой ответ на ваш вопрос, но я надеюсь, что это будет полезно, тем не менее.

в скрипте скрипта диска В моем докер экспериментов Я использую что-то вроде этого:

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'

OR может скачать этот скрипт: Использование диска и запустить e.g. ./ Использование диска «Ubuntu Busybox GCC» Чтобы иметь использование диска (как сообщает DU -SH ), отображаемые для этих 3 изображений:

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

Обратите внимание, что оно не T покажет фактическую загрузку, необходимую для любого данного изображения, и он будет отображать результат после загрузки изображения, но он дает некоторую идею о том, как раздутый - это данное изображение по сравнению с другими.

Вы можете запустить его на одном компьютере, чтобы решить, хотите ли вы загрузить это изображения на других машинах, или использовать его вообще.

6
27.01.2020, 19:36
  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. Я выявляю 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
2
27.01.2020, 19:36

Для HTTP API v2 размер доступен через ресурс тегов в sizeи full_size. Вот пример URL из одного из тегов моего репозитория:

https://cloud.docker.com/v2/repositories/deepdriveio/deepdrive/tags/?page_size=25&page=1

4
27.01.2020, 19:36

Если вы действительно изучили код Docker для операции извлечения, я думаю, что ваш ответ там. Если образ контейнера не кэшируется, то при извлечении образа докер сначала собирает информацию об образе из реестра, например, количество слоев, размер каждого слоя и т. д. и т. д.

Я бы посоветовал прочитать этот файл.

https://github.com/moby/moby/blob/master/distribution/xfer/download.go

1
27.01.2020, 19:36

Я знаю, что это старый вопрос, но на сегодняшний день (10/2020 )веб-сайт теперь отображает эту информацию. Если вы нажмете на вкладку «Теги», он покажет вам сжатый размер прямо здесь:

Пример Ubuntu на докер-хабеhttps://hub.docker.com/_/ubuntu?tab=tags

enter image description here

6
18.10.2020, 15:53

Теги

Похожие вопросы