fbpx
Перейти до вмісту

Автоматичний контроль оновлень Docker-контейнерів із Watchtower

Watchtower – це інструмент для автоматичного оновлення контейнерів Docker на основі змін у реєстрі Docker Hub. Він дозволяє автоматично оновлювати ваші контейнери у фоновому режимі, усуваючи необхідність вручну оновлювати кожен контейнер вручну. У цій статті ми розглянемо, як встановити Watchtower і приклад його використання.

Встановлення Watchtower

Для встановлення Watchtower необхідно виконати кілька простих кроків:

  1. Встановіть Docker на вашому сервері. Можна використовувати офіційну документацію Docker для встановлення на вашій операційній системі.
  2. Встановіть Watchtower, запустивши таку команду:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

Ця команда завантажить образ Watchtower з Docker Hub і запустить його у фоновому режимі. Він стежитиме за змінами у вашому реєстрі Docker Hub і автоматично оновлюватиме ваші контейнери.

Використання Watchtower

Після встановлення Watchtower ви можете використовувати його для автоматичного оновлення ваших контейнерів. Для цього необхідно запустити ваш контейнер з додатковим тегом “latest”. Наприклад, якщо ви запускаєте контейнер Nginx, то команда запуску матиме такий вигляд:

docker run -d --name nginx --restart always -p 80:80 nginx:latest

Watchtower стежитиме за тегом “latest” у реєстрі Docker Hub і оновлюватиме ваш контейнер, якщо він стане застарілим.

Ви також можете використовувати Watchtower для оновлення контейнерів з іншими тегами. Для цього ви можете вказати тег у команді запуску контейнера, наприклад:

docker run -d --name myapp --restart always myapp:1.0.0

Watchtower стежитиме за образом “myapp:1.0.0” у реєстрі Docker Hub і оновлюватиме ваш контейнер, якщо він стане застарілим.

Повідомлення від Watchtower у Telegram

Watchtower дає змогу надсилати повідомлення в месенджери під час оновлення контейнера. Повний список підтримуваних месенджерів доступний на офф сайті. У цій статті ми розберемо як налаштувати повідомлення для месенджера Telegram.

Створення бота в Telegram

Для отримання повідомлень у Telegram від Watchtower нам необхідно буде створити бота й отримати ChatID каналу для надсилання сповіщень. Детальна інформація про створення бота доступна в докладній інструкції від Telegram.

Отримання chat_id для телеграм-каналу

Для отправки уведомлений в телеграм-канал необходимо получить chat_id канала. Для этого добавьте бота в ваш телеграм-канал и отправьте в канал любое сообщение. Затем перейдите по ссылке https://api.telegram.org/bot<YourBotToken>/getUpdates, заменив <YourBotToken> на токен вашего бота. Вы получите ответ от Telegram API, содержащий chat_id канала. Скопируйте его.

Для надсилання повідомлень у телеграм-канал необхідно отримати chat_id каналу. Для цього додайте бота у ваш телеграм-канал і надішліть у канал будь-яке повідомлення. Потім перейдіть за посиланням https://api.telegram.org/bot<YourBotToken>/getUpdates, замінивши <YourBotToken> на токен вашого бота. Ви отримаєте відповідь від Telegram API, що містить chat_id каналу. Скопіюйте її.

Налаштування Watchtower

Тепер налаштуйте Watchtower на надсилання повідомлень у ваш телеграм-канал. Для цього в команду встановлення Watchtower додамо змінні середовища, які відповідають за налаштування сповіщень

docker run -d --name watchtower \
  -e WATCHTOWER_LIFECYCLE_HOOKS=1 \
  -e WATCHTOWER_NOTIFICATIONS=shoutrrr \
  -e WATCHTOWER_NOTIFICATION_URL=telegram://<YourBotToken>@telegram/?channels=<YourChatId> \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower

Якщо ж ви використовуєте docker-compose, то цей самий код матиме такий вигляд

version: '3.3'
services:
    watchtower:
        container_name: watchtower
        environment:
	    - WATCHTOWER_LIFECYCLE_HOOKS=1
            - WATCHTOWER_NOTIFICATIONS=shoutrrr
            - WATCHTOWER_NOTIFICATION_URL=telegram://<YourBotToken>@telegram/?channels=<YourChatId>
	command: --interval 30
        volumes:
            - '/var/run/docker.sock:/var/run/docker.sock'
        image: containrrr/watchtower

Замените <YourBotToken> и <YourChatId> на соответствующие значения, которые вы получили в предыдущих шагах.

Замініть <YourBotToken> та <YourChatId> на відповідні значення, які ви отримали в попередніх кроках.

За замовчуванням Watchtower перевіряє контейнери з інтервалом у 24 години, щоб зменшити цей інтервал до 30 секунд, достатньо додати команду command: –interval 30

Тепер Watchtower надсилатиме повідомлення про процес оновлення контейнерів у ваш телеграм-канал. Якщо все налаштовано правильно, ви маєте побачити сповіщення в каналі під час оновлення контейнерів.

Приклад повідомлення, що надсилається

Found new portainer/portainer-ce:latest image (f031e549070f)
Found new amir20/dozzle:latest image (9602cf218ba7)
Found new traefik:latest image (d1e26b5f8193)
Stopping /traefik (a262f7327b90) with SIGTERM
Stopping /dozzle (27f1f5fd4110) with SIGTERM
Stopping /portainer (3ddfa13bb8fc) with SIGTERM
Creating /portainer
Creating /dozzle
Creating /traefik

Як підсумок, Watchtower – це простий і зручний інструмент для автоматичного оновлення ваших контейнерів Docker. Він дозволяє уникнути необхідності вручну оновлювати кожен контейнер і зберегти вашу інфраструктуру в актуальному стані. Встановлення та використання Watchtower займає всього кілька хвилин і значно полегшує вашу роботу з Docker.

Позначки: