Добавить в корзинуПозвонить
Найти в Дзене

Watchtower – управляем обновлением контейнеров в Docker

Инфраструктура на основе Docker – это удобно, особенно если вы используете подход «инфраструктура как код». Но вместе с плюсами появляются и минусы – все это хозяйство требуется поддерживать в актуальном состоянии и регулярно обновлять. Можно, конечно, делать это руками, но зачем, когда можно автоматизировать этот процесс. Для этого мы будем использовать Watchtower – простой и удобный инструмент, который будет отслеживать состояние ваших контейнеров и обновлять их по мере выхода новых версий. Для его использования вам потребуется еще один небольшой контейнер, который можно развернуть при помощи следующего docker-compose.yml: services: watchtower: image: containrrr/watchtower container_name: watchtower restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - WATCHTOWER_CLEANUP=true - WATCHTOWER_REMOVE_VOLUMES=true - WATCHTOWER_POLL_INTERVAL=86400 - DOCKER_API_VERSION=1.40 - WATCHTOWER_LABEL_ENABLE=true logging: driver: "json-file" options: max-size:

Watchtower – управляем обновлением контейнеров в Docker

Инфраструктура на основе Docker – это удобно, особенно если вы используете подход «инфраструктура как код». Но вместе с плюсами появляются и минусы – все это хозяйство требуется поддерживать в актуальном состоянии и регулярно обновлять.

Можно, конечно, делать это руками, но зачем, когда можно автоматизировать этот процесс. Для этого мы будем использовать Watchtower – простой и удобный инструмент, который будет отслеживать состояние ваших контейнеров и обновлять их по мере выхода новых версий.

Для его использования вам потребуется еще один небольшой контейнер, который можно развернуть при помощи следующего docker-compose.yml:

services:

watchtower:

image: containrrr/watchtower

container_name: watchtower

restart: unless-stopped

volumes:

- /var/run/docker.sock:/var/run/docker.sock

environment:

- WATCHTOWER_CLEANUP=true

- WATCHTOWER_REMOVE_VOLUMES=true

- WATCHTOWER_POLL_INTERVAL=86400

- DOCKER_API_VERSION=1.40

- WATCHTOWER_LABEL_ENABLE=true

logging:

driver: "json-file"

options:

max-size: "10m"

max-file: "3"

Коротко пробежимся по некоторым опциям:

🔹 WATCHTOWER_CLEANUP - удаляет старые образы после обновления

🔹 WATCHTOWER_REMOVE_VOLUMES - удаляет старые анонимные тома

🔹 WATCHTOWER_POLL_INTERVAL - интервал проверки обновлений, в нашем случае - сутки

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

Но обновлять все подряд без разбора – плохая идея. Поэтому мы рекомендуем в продуктивных средах использовать включенным параметр:

🔹 WATCHTOWER_LABEL_ENABLE – включает режим обновления по меткам

Теперь для того, чтобы Watchtower отслеживал и обновлял контейнер к нему следует добавить метку:

labels:

- "com.centurylinklabs.watchtower.enable=true"

Таким образом мы можем четко контролировать что именно мы обновляем, особенно если у нас есть какие-либо критичные сервисы, которые лучше протестировать перед обновлением.

Кстати, для них есть другая полезная метка:

labels:

- "com.centurylinklabs.watchtower.enable=false"

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

WATCHTOWER_LABEL_ENABLE=false

В этом случае автоматически обновляются все контейнеры, кроме имеющих метку enable=false, что служит надежным предохранителем от нештатной ситуации.