Может ли Docker автоматически перезапускать контейнеры и фиксировать изменения с новым тегом образа?

Я использую Docker для своего развертывания, и в его нынешнем виде я использую Docker-Compose (файл .yml) для одновременного запуска ~ 6 контейнеров. Каждое изображение в файле Compose находится локально (без подключения к Интернету в среде развертывания).

В настоящее время шаги, которые предпринимает мое развертывание, следующие:

  1. Запустить docker-compose up (запускает 6 контейнеров из локальных образов, таких как image1:latest, image2:latest и т. д., используя образы с тегом «latest»)
  2. При выходе/остановке у меня 6 остановленных контейнеров. Вручную перезапустите каждый из шести остановленных контейнеров (docker start xxx)
  3. Вручную фиксируйте каждый перезапущенный контейнер (docker commit xxx)
  4. Вручную повторно помечайте каждое из изображений предыдущего поколения постепенно (изображение1:последнее -> изображение1:версия1, изображение1:версия2 и т. д.) и вручную удаляйте изображение, содержащее «последний» тег
  5. Вручную пометьте каждый из зафиксированных контейнеров (которые теперь являются изображениями) тегом «последней» (image1:latest)

В этом процессе скорее участвует пользователь, и наше развертывание требует участия пользователя только для запуска команды «docker-compose up», а затем выключения/остановки Docker-Compose.

Требуемая конечная цель состоит в том, чтобы сценарий или Docker самостоятельно выполнял эти шаги и в итоге получал образы разных поколений (image1:version1, image1:version2, image1:latest и т. д.).

Итак, мой вопрос заключается в том, как мне создать сценарий (или сделать это с помощью Docker), где сценарий (или Docker) может автономно:

  • Перезапустите остановленные контейнеры после остановки/выхода из Docker-Compose.
  • Зафиксируйте перезапущенные контейнеры
  • Повторно пометьте предыдущие изображения последними тегами с увеличенным номером версии (image1:version1, image1:version2 и т. д.), затем удалите предыдущее изображение1:последнее изображение.
  • Пометьте недавно зафиксированные перезапущенные контейнеры (которые теперь являются образами) тегом «последний»

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


person OriolesMagic    schedule 30.03.2016    source источник
comment
Ваш шаг 4 и шаг 5 немного сбивают с толку. Как я читал, вы помечаете последнюю -> инкрементную версию, удаляете последний тег, а затем повторно помечаете инкрементную версию как последнюю. Почему так?   -  person Tommy    schedule 30.03.2016
comment
При начальном/первом запуске у вас есть все 6 образов (необходимых для docker-compose для запуска 6 контейнеров), а compose захватывает образ с последним тегом. Затем нам нужно сохранить изображения нового поколения и присвоить им последний тег. Предыдущее поколение (первоначальная популяция) также не может иметь последний тег, поэтому мне нужно повторно пометить его номером версии. Цель состоит в том, чтобы сохранять новые поколения изображений по ходу работы и иметь новейшее поколение, содержащее последнее изображение для компоновки, чтобы получить их при следующем запуске.   -  person OriolesMagic    schedule 30.03.2016


Ответы (1)


Проект «Сторожевая башня» пытается решить эту проблему.

https://github.com/CenturyLinkLabs/watchtower

Он автоматически перезапускает работающий контейнер при обновлении базового образа.

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

Я никогда не пробовал, но стоит попробовать!

Дайте нам знать, как это происходит. Я собираюсь добавить этот вопрос в избранное, так как это звучит отлично.

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

docker inspect

ваш друг, так как он дает вам массу информации о контейнерах и изображениях. Позволяет определить текущий статус.

person danday74    schedule 30.03.2016