В исследовательских целях я пытаюсь просканировать общедоступный реестр Docker ( https://registry.hub.docker.com/ ) и выяснить: 1) сколько слоев в среднем образе и 2) размеры этих слоев, чтобы получить идея распределения.
Однако я изучил API и публичные библиотеки, а также подробную информацию о github, но я не могу найти никакого метода, чтобы:
- получить все общедоступные репозитории / изображения (даже если их тысячи, мне все еще нужен начальный список для перебора)
- найти все слои изображения
- найти размер слоя (то есть не изображения, а отдельного слоя).
Может ли кто-нибудь помочь мне найти способ получить эту информацию?
Спасибо!
РЕДАКТИРОВАТЬ: может ли кто-нибудь проверить, что поиск «*» в реестре Docker возвращает все репозитории, а не только что-либо, где упоминается «*»? https://registry.hub.docker.com/search?q=*
image
docker
web-crawler
user134589
источник
источник
docker history myimage
и вы увидите размер каждого слоя. В более общем плане, на изображении вы можетеdocker history myimage | awk 'NR>1 {print $1}' | xargs docker inspect --format '{{ ((index .ContainerConfig.Cmd ) 0) }}'
увидеть, какие команды былиhttps://registry.hub.docker.com/search?q=*
показывает мне 87031 репозиториев,Ответы:
Вы можете найти слои изображений в папке / var / lib / docker / aufs / Layers; укажите, если вы настроили драйвер хранилища как aufs (опция по умолчанию)
Пример:
Теперь для просмотра слоев контейнеров, созданных с помощью образа «Ubuntu»; перейдите в каталог / var / lib / docker / aufs / sizes и укажите, что файл начинается с идентификатора контейнера (здесь это 0ca502fa6aae *)
Это покажет результат того же, запустив
Чтобы просмотреть полный идентификатор слоя; запустить с параметром --no-trunc как часть команды history.
источник
docker history
команда не будет отображать слои изображения, как показано в папке / var / lib / docker / aufs / sizes. Прочтите обновление здесь .docker history
Команда больше не сообщает фактическую информацию о дисковом хранилище слоя на хосте докеров. Проверьте этот блогПосмотрите погружение, написанное на голанге.
Отличный инструмент!
источник
Сначала вы можете найти идентификатор изображения, используя:
Затем найдите слои изображения и их размеры:
Примечание: я использую Docker версии 1.13.1.
источник
На мой взгляд,
docker history <image>
достаточно. Это возвращает размер каждого слоя:источник
Здесь есть очень хороший ответ: https://stackoverflow.com/a/32455275/165865
Просто запустите изображения ниже:
источник
Это проверит изображение докера и распечатает слои:
источник
еще один инструмент: https://github.com/CenturyLinkLabs/dockerfile-from-image
GUI с использованием ImageLayers.io
источник
https://hub.docker.com/search?q=* показывает все изображения во всем Docker-хабе, это невозможно получить с помощью команды поиска, так как он не принимает подстановочные знаки.
Начиная с версии v1.10, вы можете найти все слои изображения, потянув его и используя следующие команды:
3) Размер можно найти в
/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/size
хотя LAYERID! = Diff_ids, найденные с помощью предыдущей команды. Для этого вам нужно посмотреть/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/diff
и сравнить с выходными данными предыдущей команды, чтобы правильно сопоставить правильный diff_id и размер.источник
Действительно, можно запросить информацию о манифесте или большом двоичном объекте с сервера реестра докеров, не выгружая образ на локальный диск.
Вы можете обратиться к API реестра v2, чтобы получить манифест изображения.
Обратите внимание, что вам нужно обрабатывать другую версию манифеста. Для v2 вы можете напрямую получить размер слоя и дайджеста blob. Для манифеста v1 вы можете ЗАГОЛОВИТЬ URL-адрес загрузки большого двоичного объекта, чтобы получить фактический размер слоя.
Существует простой сценарий для обработки вышеуказанных случаев, который будет постоянно поддерживаться.
источник
Не совсем исходный вопрос, но чтобы найти общую сумму всех изображений без двойного подсчета общих слоев, полезно следующее (ubuntu 18):
источник
Я решил эту проблему, используя функцию поиска на веб-сайте Docker, где «*» - это действительный поиск, который возвращает 200 тыс. Репозиториев, а затем я просканировал каждую отдельную страницу. Анализ HTML позволяет мне извлекать все имена изображений на каждой странице.
источник