Watchtower Docker auto-update

Статья XDA о привязке образов Docker к latest — это урок, который каждый оператор хомлаба учит на собственном опыте: latest обновляется без предупреждения, и одна неудачная загрузка может сломать стек, откатить который невозможно. Приведённые ниже инструменты предлагают компромиссное решение: уведомления о новых образах, привязка к реальным тегам и обновления по расписанию, которое вы контролируете. Семь вариантов для Docker, Podman, Compose, Swarm и Kubernetes.

На что обратить внимание при выборе автоматизатора обновления контейнеров

Правильный выбор зависит от масштаба, а не от предпочтений. Учитывайте:

Быстрое сравнение

App Лучше всего подходит для Runtime Бесплатно Уведомления Автоприменение
Watchtower Одиночные хосты хомлаба Docker Да Да Да
Diun Только уведомления, без автоприменения Docker, Podman, Kubernetes Да Да Нет
Ouroboros Альтернатива устаревшего Watchtower Docker Да Да Да
Podman auto-update Родной systemd Podman Podman Да Нет Да
Shepherd Сервисы Docker Swarm Docker Swarm Да Нет Да
Renovate Управляемые GitOps Compose или Kubernetes Любой (через git) Да (открытый исходный код) Да Через PR
Portainer Ручные обновления с графическим интерфейсом Docker, Swarm, Kubernetes Бесплатный CE Да Да

1. Watchtower, лучший выбор для одного хоста Docker

Watchtower — это контейнер Docker, который следит за вашими другими контейнерами Docker. Когда новый тег образа отправляется в реестр, Watchtower загружает его, пересоздаёт контейнер с той же конфигурацией и очищает старый образ. Добавьте метку к контейнеру, чтобы включить или отключить его.

Это стандартный стартер для хомлаба Docker, потому что требует всего два строки блока Docker Compose и делает ровно одно — хорошо.

Где это отстаёт: Watchtower предполагает latest или мутирующий тег. Если вы привяжетесь к 1.2.3, он не перейдёт на 1.2.4 самостоятельно. Нет отката. Проект потерял активность; форки (на основе WOL, с патчами безопасности) — обычное дело.

Цена: Бесплатно и открытый исходный код (Apache 2.0).

Платформы: Любой хост, на котором работает Docker (Windows, macOS, Linux, ARM).

Загрузка: containrrr.dev/watchtower · GitHub

Суть: Правильный первый выбор для личного хоста Docker с оговоркой, что вы не должны направлять его на production-сервисы, потерю которых не сможете позволить.

2. Diun, лучший выбор только для уведомлений

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

Причина выбрать его — контроль. Автоприменение Watchtower работает быстрее, чем хочет большинство людей; Diun держит людей в курсе.

Где это отстаёт: Вам по-прежнему нужно запускать docker compose pull && docker compose up -d вручную.

Цена: Бесплатно и открытый исходный код (MIT).

Платформы: Любой хост с Docker, Podman или кластером Kubernetes.

Загрузка: crazymax.dev/diun · GitHub

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

3. Ouroboros, лучшая альтернатива устаревшему Watchtower

Ouroboros — это альтернатива Watchtower на основе Python, которая предшествует Watchtower и делает ту же основную работу: загружает, пересоздаёт, очищает. Некоторые операторы хомлабов остаются на Ouroboros, потому что его конфигурация ближе к тому, что они писали годы назад.

Разработка медленная, но стабильная. Новым пользователям лучше начать с Watchtower или Diun.

Где это отстаёт: Медленнее выпускает релизы, чем альтернативы. Набор функций практически заморожен.

Цена: Бесплатно и открытый исходный код (MIT).

Платформы: Любой хост, на котором работает Docker.

Загрузка: GitHub

Суть: Хороший выбор, если вы уже его используете. Иначе Watchtower или Diun.

4. Podman auto-update, лучший встроенный вариант для Podman

Podman поставляется с podman auto-update, подкомандой, которая читает метку на каждом контейнере и загружает свежие образы по таймеру systemd. Никаких дополнительных контейнеров, никаких сторонних инструментов. Интегрируется с Quadlet (генератором Podman для systemd) для декларативных определений сервисов.

Причина выбрать его в том, что если вы используете Podman без полномочий root на RHEL, Fedora или современном Debian, путь автообновления уже существует в ОС.

Где это отстаёт: Только Podman. Нет встроенных уведомлений.

Цена: Бесплатно и открытый исходный код (Apache 2.0).

Платформы: Linux (Podman).

Загрузка: Документация на docs.podman.io

Суть: Встроенный выбор на хостах Podman. Никаких новых инструментов не требуется.

5. Shepherd, лучше всего для Docker Swarm

Shepherd следит за сервисами Docker Swarm (не отдельными контейнерами) и обновляет сервисы, когда их тег образа имеет новый дайджест. Он соблюдает стратегию roll-обновления Swarm, что означает, что он хорошо работает с проверками здоровья и параллелизмом обновления.

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

Где это отстаёт: Только Swarm. Не применяется вне кластера Swarm.

Цена: Бесплатно и открытый исходный код (MIT).

Платформы: Docker Swarm (хосты Linux).

Загрузка: GitHub

Суть: Правильный выбор внутри Docker Swarm.

6. Renovate, лучший подход GitOps

Renovate — это бот, который открывает pull-запросы в вашем git-репозитории, когда тег образа имеет обновление. Работает на файлах Compose, манифестах Kubernetes, диаграммах Helm, Dockerfiles, GitHub Actions и десятках других целей. PR включает примечания релиза, ссылки на журнал изменений и проверку того, что новый тег действительно существует.

Причина выбрать его в том, что обновления становятся изменениями кода. Вы их проверяете, объединяете и CI применяет обновление. Откат — это git revert. Это паттерн, на котором осаждают большинство production-команд.

Где это отстаёт: Требует pipeline развёртывания на основе git. Не подходит для хомлаба, который не использует CI.

Цена: Бесплатно для самостоятельного размещения (Apache 2.0). Управляемый сервис (Mend) также бесплатен для открытого исходного кода и небольших команд.

Платформы: GitHub, GitLab, Bitbucket, самостоятельный git.

Загрузка: renovatebot.com · GitHub

Суть: Правильный выбор, когда ваша инфраструктура определена в git.

7. Portainer, лучше всего для ручного обновления на основе GUI

Portainer — это панель управления Docker/Swarm/Kubernetes. Он показывает каждый контейнер и каждый образ, отмечает, когда доступен новый образ, и позволяет пересоздать контейнер со свежей загрузкой двумя щелчками. Community Edition бесплатна; Business Edition добавляет RBAC, сканирование образов и многое другое.

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

Где это отстаёт: Не полностью автоматизировано. Вы — автоматизатор обновления; Portainer просто даёт вам кнопку.

Цена: Бесплатная Community Edition. Платная Business Edition.

Платформы: Docker, Swarm, Kubernetes (самостоятельный).

Загрузка: portainer.io · GitHub

Суть: Выбор для рабочих процессов нажатия кнопки и смешанных флотов.

Как выбрать

FAQ

Безопасно ли запускать Watchtower в production?
Не без тщательной политики тегирования. Направьте его на :latest и он может сломать ваш стек при любой ошибке вышестоящего. Направьте его на теги с привязкой семантического версионирования и добавьте откат на основе проверки здоровья. Лучше: используйте Renovate для чего-либо, потерю чего вы не можете себе позволить.

Как мне привязаться к реальной версии вместо latest?
Замените image: nginx на image: nginx:1.27.2 в вашем файле Compose. Renovate открывает PR, когда поставляется 1.27.3. Watchtower и Diun оба замечают новые дайджесты даже для привязанных тегов, если сам тег обновляется вышестоящим.

Работают ли эти инструменты с частными реестрами?
Да. Watchtower, Diun и Renovate все поддерживают учётные данные docker для частных реестров (ECR, GCR, Harbor, самостоятельный).

Могу ли я откатить плохое обновление?
Watchtower и Ouroboros не сохраняют предыдущий образ с тегом; вам нужен предыдущий ID образа или ваша собственная схема тегирования. Пользовательский интерфейс Portainer упрощает откат. Откат Renovate — это git revert.

Как часто должны автообновляться контейнеры?
Для хомлаба один раз в день в спокойный час подойдёт. Для production предпочитайте только уведомления или на основе PR (Renovate), чтобы обновления поставлялись через проверку и CI, а не фоновый демон.