Оновлення контейнерів з What’s Up Docker
Оновлення образів часто закривають вразливості, покращують продуктивність і додають нові можливості. Але робити все вручну — марна витрата часу.
What’s Up Docker (WUD) — це інструмент, який нарешті дає повний контроль над тим, що, коли і як оновлюється:
- гнучке фільтрування тегів (patch, minor, major)
- можливість сповіщати замість оновлювати
- підтримка кількох реєстрів і приватних репозиторіїв
Далі покажемо, як швидко інтегрувати його у свій стек.
Встановлення WUD за допомогою Docker Compose
Створи окрему теку для налаштувань WUD і зайди в неї:
mkdir wud
cd wud
Тепер відкрий редактор і створи файл docker-compose.yml. Встав у нього ось цей шаблон:
services:
whatsupdocker:
image: getwud/wud
container_name: wud
environment:
- WUD_WATCHER_LOCAL_CRON=0 6 * * *
- WUD_AUTH_BASIC_MY_USER=<YOUR_USERNAME>
- WUD_AUTH_BASIC_MY_HASH=<YOUR_PASSWORD>
ports:
- 3000:3000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Головне — блок environment.
Тут ми задаємо, як саме WUD буде працювати. Наприклад, WUD_WATCHER_LOCAL_CRON=0 6 * * * означає, що WUD перевірятиме контейнери щодня о 6:00 ранку, але ти можеш змінити під свій графік.
Що таке «спостерігачі»?
Кожен механізм, який перевіряє оновлення, — це «спостерігач» (watcher). Їх можна назвати як завгодно, головне — дотримуйся шаблону змінної:WUD_WATCHER_{імʼя}_CRON.
У прикладі вище використано LOCAL, але ти можеш вказати інше імʼя. WUD підтримує кілька типів спостерігачів:
- Local
Моніторить образи, що використовуються у локальних контейнерах на хості, де запущено WUD. - DockerHub
Напряму підключається до DockerHub API та моніторить нові версії образів. - GitHub
Слідкує за новими версіями образів, які публікуються в GitHub Releases або GitHub Container Registry (GHCR). - Quay
Підтримує моніторинг образів з реєстру Quay.io. - GitLab
Відстежує образи з GitLab Container Registry. - Harbor
Підтримує enterprise-рішення Harbor для приватного контейнерного реєстру. - AWS ECR
Інтегрується з Amazon Elastic Container Registry.
Налаштування доступу
Змінні WUD_AUTH_BASIC_MY_USER і WUD_AUTH_BASIC_MY_HASH — це логін і хеш пароля для доступу до вебінтерфейсу WUD. З ними просто і безпечно.
Ім’я користувача — будь-яке. А от пароль потрібно захешувати у форматі Apache MD5 (APR1). Не встановлювати ж для цього весь Apache, правда? Ось короткий варіант:
openssl passwd -apr1
Команда попросить ввести пароль і видасть щось на кшталт:
$apr1$zv6vdUFS$g0mH9DjK7ON4FGtps1Xpt0
Щоб WUD сприйняв цей хеш, треба додати подвійну $ перед кожним $. Тобто:
$$apr1$$zv6vdUFS$$g0mH9DjK7ON4FGtps1Xpt0
Встав у docker-compose.yml замість шаблонних значень:
- WUD_AUTH_BASIC_MY_USER=bobby
- WUD_AUTH_BASIC_MY_HASH=$$apr1$$zv6vdUFS$$g0mH9DjK7ON4FGtps1Xpt0
Запуск
Тепер збережи файл і запусти контейнер у фоновому режимі:
docker compose up -d
Якщо щось не працює — перевір логи:
docker logs wud -f
Як відкрити вебінтерфейс WUD?
Щоб зайти у WUD, відкрий браузер і перейди на http://localhost:3000 (або http://<ip-адреса-сервера>:3000, якщо працюєш віддалено). Введи свої логін і пароль — готово.
Важливо: у продакшн-середовищі завжди став WUD за зворотний проксі (Nginx, Caddy, Traefik тощо) і використовуй HTTPS.
Налаштування WUD
WUD вже запущений, але поки що він просто працює у фоновому режимі. Щоб він почав надсилати сповіщення або автоматично оновлювати контейнери, потрібно додати потрібні змінні в docker-compose.yml або прописати мітки у контейнерах.
Вебінтерфейс — це лише панель перегляду, всі налаштування виконуються через змінні та мітки.
Як налаштувати сповіщення WUD?
Щоб отримувати сповіщення про нові версії контейнерів, у WUD потрібно налаштувати тригери. Список підтримуваних сервісів великий: Apprise, Discord, Slack, SMTP, Telegram та інші.
У цьому прикладі — налаштування сповіщень через Gmail SMTP. Якщо хочеш використати Gmail, спершу створи пароль застосунку.
Далі в docker-compose.yml додай змінні у розділ environment:
- WUD_TRIGGER_SMTP_GMAIL_HOST=smtp.gmail.com
- WUD_TRIGGER_SMTP_GMAIL_PORT=465
- WUD_TRIGGER_SMTP_GMAIL_USER=<YOUR-GMAIL-ACCOUNT>
- WUD_TRIGGER_SMTP_GMAIL_PASS=<THE-APP-PASSWORD>
- WUD_TRIGGER_SMTP_GMAIL_FROM=<YOUR-GMAIL-ACCOUNT>
- WUD_TRIGGER_SMTP_GMAIL_TO=<YOUR-GMAIL-ACCOUNT>
- WUD_TRIGGER_SMTP_GMAIL_TLS_ENABLED=true
Потім заміни шаблонні значення на свої. Щоб застосувати зміни, виконай:
docker compose down
docker compose up -d
У вебінтерфейсі WUD зайди в Configuration → Triggers, обери smtp/gmail, натисни TEST, підтвердь і перевір, чи отримав тестовий лист.
Автоматичне оновлення контейнерів
Якщо хочеш, щоб WUD автоматично оновлював контейнери, додай у docker-compose.yml:
- WUD_TRIGGER_DOCKER_LOCAL_PRUNE=true
Якщо цей рядок не додавати, WUD просто сповіщатиме й оновлення доведеться робити вручну.
Оновлення файлів Docker Compose
Якщо у файлі docker-compose.yml ти вказуєш конкретні версії образів (не latest), після автоматичного оновлення контейнера WUD, наступний ручний перезапуск знову підтягне стару версію з файлу.
Щоб цього не сталося — налаштуй WUD на автоматичне оновлення файлів Compose. Приклад:
- WUD_TRIGGER_DOCKERCOMPOSE_NGINX_FILE=/wud/nginx/docker-compose.yml
- WUD_TRIGGER_DOCKERCOMPOSE_NGINX_PRUNE=true
І обов’язково змонтуй правильний файл:
- /compose/file/location/docker-compose.yml:/wud/nginx/docker-compose.yml
Маєш кілька Compose-файлів? Створюй окремий тригер для кожного. Але якщо ти використовуєш latest, цей крок можна пропустити.
Як обмежити роботу тригерів?
Стандартно всі тригери застосовуються до всіх контейнерів. Щоб це змінити, використовуй мітку wud.trigger.include — вона дозволяє вказати, які тригери запускати для конкретного контейнера.
Приклад для Nginx:
labels:
wud.trigger.include: smtp.gmail,dockercompose.nginx
Інші контейнери можуть мати, наприклад, тільки:
labels:
wud.trigger.include: smtp.gmail
Перезапусти контейнери — WUD підхоплює зміни автоматично.
Як запускати тригери вручну?
Якщо хочеш сам обирати момент, коли запускати оновлення, додай змінну:
- WUD_TRIGGER_DOCKERCOMPOSE_NGINX_AUTO=false
У цьому випадку WUD лише сповіщатиме про оновлення, а оновити контейнер можна буде вручну через кнопку RUN у вебінтерфейсі.
Вимкнення контейнерів з моніторингу
Щоб WUD повністю ігнорував певний контейнер, додай мітку:
labels:
wud.watch: false
Або навпаки — якщо хочеш, щоб WUD стежив тільки за вибраними контейнерами, додай у файл WUD:
- WUD_WATCHER_LOCAL_WATCHBYDEFAULT=false
І в кожному потрібному контейнері пропиши:
labels:
wud.watch: true
Післяслово
Ура, ти перетнув фінішну пряму. WUD налаштовано і контейнери оновлюються без твоєї участі — саме той рівень DevOps-спокою, до якого варто прагнути.
Якщо виникнуть труднощі з Docker, рекомендуємо пройти структурований курс «Docker. Практикум з адміністрування» — після нього станеш справжнім профі.
А якщо хочеш підтягнути інші моменти для роботи в DevOps — переглянь весь наш каталог курсів. Ми зібрали все найнеобхідніше для впевненого стека DevOps-інженера.