Оновлення контейнерів з 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-інженера.

Залишити відповідь

Дякуємо, що поділились