Поиск по сайту:

Автоматическое обновление запущенных контейнеров Docker с помощью Watchtower

Автоматизация обновления базового образа контейнера Docker с помощью Watchtower

Поддержание актуальности контейнеров Docker — одна из важных задач DevOps-инженера. Обновление контейнеров Docker вручную — довольно трудоемкая задача. В этом руководстве объясняется, что такое Watchtower, как установить Watchtower и как автоматически обновлять работающие контейнеры Docker с помощью Watchtower в Linux.

Что такое Сторожевая башня?

Watchtower – это бесплатное приложение с открытым исходным кодом, которое позволяет отслеживать работающие контейнеры Docker и автоматически обновлять их при обнаружении каких-либо изменений в их базовых образах.

Когда сторожевая башня обнаруживает, что работающий контейнер нуждается в обновлении, она корректно останавливает работающий контейнер, отправляя ему сигнал SIGTERM.

Затем он загрузит новый образ и, наконец, перезапустит Контейнер с теми же параметрами, которые использовались при его первоначальном развертывании. Все будет происходить автоматически в фоновом режиме, поэтому вмешательство пользователя не потребуется. я

В этом руководстве мы увидим, как автоматически обновлять работающие контейнеры Docker с помощью Watchtower в Unix-подобных операционных системах.

Я тестировал это руководство в системах CentOS и Ubuntu, однако процедура одинакова для всех дистрибутивов Linux.

Установить Сторожевую башню в Linux

Сама Watchtower доступна в виде образа Docker. Так что развернуть его не составляет большого труда. Установите Docker на свой компьютер с Linux и мгновенно запустите Watchtower для мониторинга контейнеров Docker.

Обратитесь к следующим руководствам по установке Docker в системах на базе RPM и DEB.

  • Как установить Docker в CentOS
  • Как установить Docker в Ubuntu
  • Руководство для начинающих по Docker Desktop для Linux

После установки Docker вы можете развернуть контейнер Watchtower, используя следующую команду от имени пользователя root:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

Если вы установили Docker Desktop, запустите контейнер Watchtower от имени обычного пользователя.

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

Эта команда извлечет последний образ сторожевой башни и запустит контейнер сторожевой башни.

Пример вывода:

Unable to find image 'containrrr/watchtower:latest' locally
latest: Pulling from containrrr/watchtower
1045b2f97fda: Pull complete 
35a104a262d3: Pull complete 
1a0671483169: Pull complete 
Digest: sha256:bbf9794a691b59ed2ed3089fec53844f14ada249ee5e372ff0e595b73f4e9ab3
Status: Downloaded newer image for containrrr/watchtower:latest
91c104ef0e9896e8cd5ff30d9f13e728dbfad66443830ec2ac85dde6d7d37564

Запуск Docker-контейнера Watchtower

Автоматическое обновление запущенных контейнеров Docker с помощью Watchtower

Теперь Watchtower запущен с другими работающими контейнерами в вашей системе. Посмотреть список запущенных Docker-контейнеров можно с помощью команды:

docker ps

Пример вывода:

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                         NAMES
91c104ef0e98   containrrr/watchtower       "/watchtower"            14 minutes ago   Up 14 minutes   8080/tcp                                      watchtower
f90b462b0712   bitnami/wordpress-nginx:6   "/opt/bitnami/script…"   19 minutes ago   Up 19 minutes   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp   ostechnix-wordpress-1

Как видно из приведенного выше вывода, контейнер Watchtower работает вместе с другим контейнером с именем "ostechnix-wordpress-1". С этого момента Сторожевая Башня будет следить за этим контейнером каждые несколько минут.

Если он обнаружит какие-либо изменения в базовом образе этого контейнера, он корректно завершит работу контейнера "ostechnix-wordpress-1" и перезапустит его с новым образом с теми же параметрами, которые использовались при первоначальном запуске.

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

Как Watchtower обновляет многосвязные контейнеры?

Watchtower достаточно умен, когда дело доходит до мониторинга нескольких связанных контейнеров.

Допустим, сейчас мы запускаем два контейнера.

docker ps

Пример вывода:

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                         NAMES
91c104ef0e98   containrrr/watchtower       "/watchtower"            14 minutes ago   Up 14 minutes   8080/tcp                                      watchtower
f90b462b0712   bitnami/wordpress-nginx:6   "/opt/bitnami/script…"   19 minutes ago   Up 19 minutes   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp   ostechnix-wordpress-1
a895f082438a   bitnami/mariadb:10.6        "/opt/bitnami/script…"   20 minutes ago   Up 19 minutes   3306/tcp                                      ostechnix-mariadb-1

Просмотр запущенных Docker-контейнеров

Как вы видите в приведенном выше выводе, мы запускаем два контейнера: «ostechnix-wordpress-1» и «ostechnix-mariadb-1». Контейнер mariadb связан с контейнером WordPress.

Если Watchtower обнаружит обновление для контейнера WordPress, он сначала завершит работу связанного контейнера, например «mariadb», а затем остановит контейнер WordPress.

После обновления контейнера WordPress Watchtower перезапустит оба контейнера в правильном порядке с теми же параметрами, которые использовались при их первоначальном развертывании, чтобы приложение снова заработало правильно. В нашем случае сначала будет запущен контейнер mariadb, а затем контейнер wordpress, чтобы гарантировать, что ссылка продолжает работать.

Мониторинг конкретного контейнера

По умолчанию Watchtower будет отслеживать все контейнеры Docker, работающие в демоне Docker, на который он указывает.

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

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower ostechnix-wordpress-1

В приведенном выше примере сторожевая башня будет отслеживать наличие обновлений только для контейнера с именем «ostechnix-wordpress-1», а другие работающие контейнеры будут игнорироваться.

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

Отправка уведомлений

Возможно, вы захотите получать уведомление при каждом обновлении контейнеров. Вы можете отправлять уведомления по электронной почте, Slack, MSTeams, Gotify и т. д.

В следующем примере показано, как отправить уведомление по электронной почте. Я предполагаю, что у вас уже настроен SMTP-сервер.

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e WATCHTOWER_NOTIFICATIONS=email \
  -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=fromaddress@gmail.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_TO=toaddress@gmail.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=fromaddress@gmail.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=app_password \
  -e WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2 \
  containrrr/watchtower

Для получения более подробной информации посетите репозиторий Watchtower на GitHub и ссылки на официальный сайт Watchtower, представленные ниже.

Ресурсы:

  • Сторожевая башня GitHub
  • Веб-сайт Сторожевой башни

Рекомендуемая загрузка – Бесплатная электронная книга: «Пособия по контейнеризации Docker»

Рекомендуется к прочтению:

  • Начало работы с Docker
  • ctop — инструмент мониторинга командной строки для контейнеров Linux
  • Dockly — управление контейнерами Docker из терминала
  • Portainer – самый простой способ управления Docker
  • PiCluster — простое веб-приложение для управления Docker

Статьи по данной тематике