#docker
#docker
Вопрос:
Я экспериментирую с Docker и не понимаю одну вещь — теги docker. Я покажу пример:
Я хотел бы использовать, скажем, openjdk:8u91-jdk
поскольку я хотел бы создать и протестировать версию, которая у нас есть в производстве. Однако, когда я пытаюсь создать контейнер из этого изображения, его нельзя загрузить, поскольку его нельзя найти на Dockerhub.
Аналогично, предположим, что я теперь использую последнюю версию на данный момент openjdk:8u102-jdk
и также обновляю производственную систему для этого. В какой-то момент обязательно произойдет обновление изображения, и вдруг моя сборка перестанет работать?
Я не хочу просто использовать openjdk:8-jdk
, так как тогда я понятия не имею, что будет использоваться для сборки.
Я думаю, что я чего-то не хватает. Как я могу использовать конкретную предыдущую версию изображения?
Ответ №1:
Вероятно, вы могли бы взять его Dockerfile и обновить переменные среды JAVA_VERSION и JAVA_DEBIAN_VERSION, чтобы отразить версию OpenJDK, которую вы хотите использовать, а затем создать ее самостоятельно.
Ответ №2:
Все, что делает тег, это указывает на определенную группу уровней файловой системы, что означает, что базовое содержимое может измениться в любое время. Это одна из проблем, над решением которой работают другие поставщики контейнеризации и спецификация appC, обычно с использованием чего-то похожего на хэш git commit.
Однако в хорошо управляемых общедоступных репозиториях контейнеров Docker большую часть времени будет существовать некоторая абстракция, которая работает без наличия статического тега для ссылки.
Глядя на теги в репозитории OpenJDK, кажется, вам повезло.
Теги (обычно) структурированы следующим образом:
-
latest
: указывает на самую последнюю стабильную сборку самой последней версии. Обычно это происходит динамично -
8-alpine
: указывает на самую последнюю стабильную сборку версии 8, использующую Alpine Linux для дистрибутива, обычно это динамический -
8u92-alpine
: указывает на конкретную сборку версии 8. Обычно они будут перестроены только для включения исправлений безопасности
Это означает, что если вы хотите выполнить привязку к 8u92-alpine, все, что вам нужно сделать, это ссылаться на этот конкретный тег ( openjdk:8u92-alpine
) при использовании ваших команд docker.
Все это, как говорится, если вам действительно нужно 8u91
, даже если в репозитории openjdk нет помеченной сборки, вы все равно можете проверить Dockerfile для 8u91, собрать его и запустить самостоятельно.