Использование «предыдущих» версий изображений с помощью Docker

#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, собрать его и запустить самостоятельно.