Обновление службы докеров и развертывание стека докеров с существующим стеком

У меня есть сомнения в использовании команд режима роя докеров для обновления существующих сервисов после развертывания набора сервисов с использованием docker stack deploy. Насколько я понял, каждая служба прикрепляется к дайджесту SHA256 образа во время создания, поэтому, если вы пересобираете и отправляете образ (с тем же тегом) и пытаетесь запустить docker service update, образ службы не обновляется (даже если SHA256 отличается). Наоборот, если вы снова запустите docker stack deploy, все службы будут обновлены новыми образами. Мне удалось обновить образ службы также с помощью docker service update --image repository/image:tag <service>. Это нормальное поведение этих команд или я что-то не понял?

Я использую Docker 17.03.1-ce.


person Alessandro Dionisi    schedule 03.04.2017    source источник


Ответы (2)


Развертывание стека Docker документация гласит: "Создайте и обновите стек из компоновки или файл dab в рое. Эта команда должна быть запущена на узле менеджера». Так что поведение, которое вы описали, соответствует ожиданиям.

Обновление службы Docker документация не так ясна, но вы сами сказали, что она только запускается с --image repository/image:tag <service>, поэтому флаг необходим для обновления изображения.

У вас есть два способа добиться желаемого.

person herm    schedule 03.04.2017
comment
Я просто хочу понять, нормально ли, что docker stack deploy обновляет существующие сервисы, или это ошибка. - person Alessandro Dionisi; 03.04.2017
comment
В документации указано, что развертывание стека предназначено для создания и обновления стека. Так что это не баг, а фича :) - person herm; 03.04.2017
comment
Понятно, что я говорю не о том, что docker stack deploy обновляет стек, а о том, что он также обновляет дайджесты изображений, по сравнению с обычным docker service update. - person Alessandro Dionisi; 03.04.2017
comment
Ваш компоновочный файл описывает, какие изображения вы используете. Если вы не укажете тег, докер сам решит, какое изображение использовать для вас. И насколько я знаю, он всегда использует последнюю версию. Для меня ясно, что он будет вести себя так. В документации указано, что он обновляет стек, и я предполагаю, что это соответствует описанию в вашем файле. - person herm; 03.04.2017

Для docker stack deploy является нормальным и ожидаемым поведением обновлять изображения существующих сервисов до любого хэша, на который ссылается указанный тег.

Если тег отсутствует, предполагается latest, что иногда может быть проблематичным, так как тег latest не совсем понятен большинству людей и, таким образом, приводит к некоторым неожиданным результатам.

person demaniak    schedule 08.02.2018
comment
Вы можете указать какую-нибудь статью, чтобы лучше понять последний тег или объяснить об этом? Благодарю. - person Marco Blos; 17.02.2018
comment
Привет @MarcoBlos, вы можете начать с этого: medium.com/@ mccode/ , container-solutions.com/docker-latest-confusion . - person demaniak; 20.02.2018
comment
Спасибо @demaniak. Теперь в этом вопросе больше информации об этой проблеме. - person Marco Blos; 20.02.2018