Dockerhub: список всех доступных версий данного изображения? - PullRequest
0 голосов
/ 29 января 2019

Я ищу способ перечислить все общедоступные версии изображения из Dockerhub.Есть ли способ, которым это может быть достигнуто?

В частности, я заинтересован в openjdk:8-jdk-alpine изображениях.

Dockerhub обычно перечисляет только последнюю версию каждого изображения, и нет ссылокк историческим версиям.Для openjdk это в настоящее время 8u191-jdk-alpine3.8:

Dockerhub openjdk alpine

Однако возможно получить более старые версии, если мы знаем ихID дайджеста изображения:

openjdk:8-jdk-alpine@sha256:1fd5a77d82536c88486e526da26ae79b6cd8a14006eb3da3a25eb8d2d682ccd6
openjdk:8-jdk-alpine@sha256:c5c705b462abab858066d412b3f871865684d8f837571c98b68e78c505dc7549

Если повезет, мне удалось найти эти дайджесты для OpenJDK 8 (версии Java 1.8.0_171 и 1.8.0_151 соответственно), по поиску openjdk8 alpine digest и просмотру билетов на github., который включал дайджест изображения.

Но существует ли систематический способ перечисления всех общедоступных дайджестов?

Если посмотреть документацию docker search, то, похоже, нет возможностисписок версий изображения, поиск только по имени.

1 Ответ

0 голосов
/ 29 января 2019

Вам не нужны дайджесты для извлечения «старых» изображений, вам лучше использовать их теги (даже если они не отображаются в Docker Hub).

Я использую следующую команду для получения теговконкретное изображение, анализируя вывод https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags:

REPOSITORY=openjdk # can be "<registry>/<image_name>" ("google/cloud-sdk" for example)
wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
    jq -r '.[].name'

Результат для REPOSITORY=openjdk (1593 тегов на момент написания) выглядит следующим образом:

latest
10
10-ea
10-ea-32
10-ea-32-experimental
10-ea-32-jdk
10-ea-32-jdk-experimental
10-ea-32-jdk-slim
10-ea-32-jdk-slim-experimental
10-ea-32-jre
[...]

Если вы можете 'Если вы не хотите устанавливать jq (инструмент для манипулирования JSON), то вы можете использовать:

wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
    sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | \
    tr '}' '\n'  | \
    awk -F: '{print $3}'

(я уверен, что я получил эту команду от другоговопрос, но я не могу найти где)

Конечно, вы можете отфильтровать вывод этой команды и оставить только интересующие вас теги:

wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
    jq -r '.[].name | select(match("^8.*jdk-alpine"))'

или:

wget -q https://registry.hub.docker.com/v1/repositories/$REPOSITORY/tags -O - | \
    jq -r '.[].name' \
    grep -E '^8.*jdk-alpine'
...