Самостоятельно обновляемый стек докеров - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть док-стек, развернутый с более чем 20 сервисами, которые составляют мое приложение.Я хотел бы знать, есть ли способ обновить этот стек последними изменениями программного обеспечения из одного из контейнеров, работающих как часть стека?

Подход, который я пробовал:

  1. В одном из контейнеров для службы смонтированы сокет докера и файл / usr / bin / docker и загружен последний файл compose с сервера.
  2. Создан скрипт, который загружает последнюю версиюimages
  3. Инициируйте docker stack deploy с новым файлом compose

Все работает нормально, но если служба, которая запускает этот процесс, сама имеет обновление и если docker stack deployпытается создать эту службу до того, как какая-либо другая служба в стеке, затем обновление стека завершается неудачно.Любое предложение или альтернативные подходы для этого?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Не существует готового решения для режима роя докеров (что-то вроде сторожевой башни для одного докера).Я думаю, что вы уже нашли лучшее решение для этого автоматически.Я бы посоветовал вам поместить контейнер обновления (тот, который обновляет службы) в список игнорируемых.Затем на одном из ваших главных узлов создайте cron, который обновляет этот один контейнер.Я знаю, что это не идеальное решение, но оно должно работать.

0 голосов
/ 22 ноября 2018

Стандартный способ сделать это - создать новый образ Docker, содержащий ваш новый код приложения.Пометьте его (как в аргументе docker build -t) какой-то уникальной версией, например, тегом управления исходным кодом или отметкой даты.Запустите новый контейнер с новым кодом приложения, затем остановите и удалите старый контейнер.

Как правило, вы не обновляете программное обеспечение внутри работающего контейнера.Удалите старый контейнер и запустите новый контейнер с программным обеспечением и версией, которую вы хотите.Кроме того, этим обычно управляет оператор, система непрерывного развертывания или система оркестровки, а не сам контейнер.(Монтирование сокета Docker в контейнер представляет собой значительную угрозу безопасности.)

(Представьте себе, что вы настраиваете вторую копию кластера, которая работает точно так же, как ваш производственный кластер, за исключением того, что в нем есть необходимое программное обеспечение.развертывание завтра. Вы не хотите, чтобы ваш производственный кластер брал это самостоятельно, пока вы не протестировали его. Эта схема должна дать вам воспроизводимую настройку развертывания, чтобы легко запустить этот подготовительный кластер, но также дать вамконтроль над тем, какие конкретные версии работают.)

...