Управление версиями образа Docker с помощью стека докеров

Я настроил промежуточный и рабочий сервер. Поток выглядит следующим образом. Я разрабатываю и помещаю свой новый образ в промежуточный реестр. Там код тестируется, и если все подходит, я хочу отправить изображение на рабочий сервер. Я также хочу использовать управление версиями. Я подумал об увеличении тега изображения (не только последнего). Я развертываю свое приложение с помощью стека докеров и файла компоновки.

Теперь я хочу спросить о лучшей практике.

Пример: текущее изображение: xyz:0.1 новое изображение: xyz:0.2

В моем файле компоновки я ссылаюсь на изображение xyz:auto_lastest_version_here.

Я хочу видеть строку версии, а не только последний тег. Есть ли уже механизм или способ сократить обновление до docker pull -> вытащить последнюю доступную версию стека, развернуть... для обновления конкретного контейнера.

РЕДАКТИРОВАТЬ: я думаю, я могу написать сценарий, в котором я извлекаю последний тег из изображений и ссылаюсь на него, используя env var в моем файле компоновки. Я просто подумал, что может быть более простой или стандартный способ, предоставляемый докером.


person FishingIsLife    schedule 13.03.2020    source источник


Ответы (1)


Имена и теги репозитория изображений — это просто строки, прикрепленные к большому двоичному объекту, который является фактическими данными изображения. Docker и реестр docker на самом деле не имеют понятия о самой последней версии большого двоичного объекта — тег «:latest» даже не имеет внутреннего значения — это просто строка, которая используется по умолчанию при сборке, и есть ничто не мешает вам пометить старое изображение как :latest.

К счастью, вы можете пометить изображение несколькими тегами, и это дает разумное решение. Что касается меня, я помечаю строку, идентифицирующую версию, которую я хочу использовать на своем рабочем сервере, например «:live» или «:production», в дополнение к тегу фактического номера версии. Таким образом, допустим, у вас есть изображения myimage:1.0.0, myimage:1.0.1 и myimage:1.1.0, вы можете запустить:

docker tag "myimage:1.1.0" "myimage:production"

...чтобы добавить к нему производственный тег. Файл стека, который вы развертываете на рабочем сервере, всегда будет ссылаться на myimage:production.

Реальным преимуществом этого является то, что если пользователи начнут жаловаться на проблемы при переходе на 1.1.0, вы можете просто пометить myimage:1.0.1 как myimage:production и повторно развернуть, и он переключится обратно на более старую версию.

Не уверен, что это «лучшая» практика, но я использую именно ее.

person Steve Bennett    schedule 20.03.2020
comment
Это абсолютно гениально! :) Я искал решение, которое позволило бы мне НЕ изменять стек развертывания файлов YAML с версиями, но оставить их прежними. Теперь я понимаю, как. Ваше здоровье! - person IvanD; 09.02.2021