Diun — уведомления об обновлениях Docker-образов
Что такое Diun
Diun (Docker Image Update Notifier) — это инструмент с открытым исходным кодом, разработанный CrazyMax, который следит за обновлениями Docker-образов и уведомляет, когда выходит новая версия.
Diun не обновляет контейнеры автоматически — он лишь сообщает, что появилась новая версия образа, оставляя решение за вами. Это особенно важно, если вы хотите контролировать процесс обновления и избегать непредвиденных изменений в продакшене.
Это существенное отличие от такого приложения как Watchtower, которое не только проверяет наличие новой версии, но и сразу устанавливает ее.
DIUN - рекомендуемое приложение для мониторинга контейнеров от linuxserver.io
Зачем нужен Diun
Если у вас есть домашний сервер, кластер Proxmox или просто несколько контейнеров на VPS, со временем образы устаревают. Проверять обновления вручную — неудобно.
Diun решает эту задачу автоматически:
- Проверяет Docker Hub, GHCR, Quay.io, GitLab и приватные реестры
- Работает по cron-расписанию или при старте
- Отправляет уведомления через десятки сервисов
- Поддерживает фильтры и теги
- Может отслеживать контейнеры, compose-файлы, stack-и или registry-списки
Установка Diun через Docker Compose
Создайте каталог и файл `docker-compose.yml`
Ниже привожу свой вариант docker compose файла, который использовался в ролике
1services:2 diun: # Определяем сервис Diun в составе Docker Compose3 image: crazymax/diun:latest # Официальный образ Diun с Docker Hub4 container_name: diun # Имя контейнера (для удобства в `docker ps`)5 command: serve # Основная команда — запустить веб/cron-сервис Diun6 volumes:7 - "/path/to/user/directory/data:/data" # Локальный каталог для хранения базы данных и конфигурации Diun8 - "/var/run/docker.sock:/var/run/docker.sock" # Доступ к Docker API для отслеживания образов и контейнеров9 environment:10 - "TZ=Europe/Moscow" # Устанавливаем часовой пояс (важно для cron и временных меток)11 - "LOG_LEVEL=info" # Уровень логирования: trace | debug | info | warn | error | fatal | panic12 - "DIUN_WATCH_WORKERS=50" # Количество параллельных потоков при проверке образов (ускоряет работу при множестве контейнеров)13 - "DIUN_WATCH_SCHEDULE=0 */6 * * *" # Cron-расписание: проверять обновления каждые 6 часов14 - "DIUN_WATCH_JITTER=30s" # Добавляет случайную задержку (до 30 секунд), чтобы избежать одновременного старта нескольких задач15 - "DIUN_WATCH_RUNONSTARTUP=true" # Запуск проверки сразу при старте контейнера, не дожидаясь расписания16 - "DIUN_PROVIDERS_DOCKER=true" # Активирует провайдер Docker: Diun будет отслеживать образы запущенных контейнеров17 - "DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true" # Включает мониторинг всех контейнеров по умолчанию, без необходимости вручную задавать label `diun.enable=true`18
19 # --- Настройки уведомлений через Telegram ---20 - "DIUN_NOTIF_TELEGRAM_TOKEN=token" # Токен Telegram-бота, созданного через @BotFather21 - "DIUN_NOTIF_TELEGRAM_chatIDs=chatid" # ID чата или пользователя, куда будут отправляться уведомления (можно указать несколько через запятую)22
23 # --- Настройки уведомлений через Gotify ---24 - "DIUN_NOTIF_GOTIFY_ENDPOINT=https://gotify.domain.ru" # URL вашего сервера Gotify25 - "DIUN_NOTIF_GOTIFY_TOKEN=token" # Токен приложения Gotify (создаётся в веб-интерфейсе Gotify)26 - "DIUN_NOTIF_GOTIFY_PRIORITY=1" # Приоритет уведомления (0 — низкий, 5 — высокий)27 - "DIUN_NOTIF_GOTIFY_TIMEOUT=10s" # Таймаут ожидания ответа от Gotify при отправке уведомления28
29 labels:30 - "diun.enable=true" # Метка, разрешающая Diun отслеживать этот контейнер (опционально, если `WATCHBYDEFAULT=false`)31 restart: always # Перезапуск контейнера при сбое или перезагрузке Docker-хостаПосле первого запуска Diun создаст базу data/diun.db и начнёт мониторить все контейнеры Docker. Более подробно можно будет посмотреть в логах приложения
Diun гибко настраивается. Ниже — краткий обзор самых полезных возможностей.
Режимы работы
- Watch (наблюдение) — Diun периодически сканирует все контейнеры, чтобы проверить обновления.
- Events (события) — реагирует на запуск контейнера и проверяет, есть ли более свежий образ.
- Database mode — хранит состояние всех проверенных образов, чтобы не слать повторные уведомления.
Метки контейнеров
Можно указать, какие контейнеры отслеживать. Добавьте в docker-compose.yml:
1labels:2 - "diun.enable=true"или наоборот — исключите ненужные контейнеры.
Провайдеры
Diun поддерживает разные источники:
docker— работа с локальным Docker-демономswarm— отслеживание образов в Docker Swarmfile— список образов в YAML-файлеkubernetes— (экспериментально) проверка образов в подахwatchtower— импорт конфигурации из Watchtower
Пример YAML-провайдера:
1db:2 path: diun.db3
4watch:5 workers: 206 schedule: "0 */6 * * *"7
8regopts:9 - name: "myregistry"10 username: fii11 password: bor12 timeout: 5s13 - name: "docker.io/crazymax"14 selector: image15 username: fii16 password: bor17 - name: "docker.io"18 selector: image19 username: foo20 password: bar21
22providers:23 file:24 filename: /path/to/config.yml1### /path/to/config.yml2
3# Watch latest tag of crazymax/nextcloud image on docker.io (DockerHub)4# with registry options named 'docker.io/crazymax' (image selector).5- name: docker.io/crazymax/nextcloud:latest6
7# Watch 4.0.0 tag of jfrog/artifactory-oss image on frog-docker-reg2.bintray.io (Bintray)8# with registry options named 'myregistry' (name selector).9- name: jfrog-docker-reg2.bintray.io/jfrog/artifactory-oss:4.0.010 regopt: myregistry11
12# Watch coreos/hyperkube image on quay.io (Quay) and assume latest tag.13# Add foo=bar metadata to be used in notification template.14- name: quay.io/coreos/hyperkube15 metadata:16 foo: bar17
18# Watch crazymax/swarm-cronjob image and assume docker.io registry and latest tag19# with registry options named 'docker.io/crazymax' (image selector).20# Only include tags matching regexp ^1\.2\..* and only be notified on new tag.21- name: crazymax/swarm-cronjob22 watch_repo: true23 notify_on:24 - new25 include_tags:26 - ^1\.2\..*27
28# Watch portainer/portainer image on docker.io (DockerHub) and assume latest tag29# with registry options named 'docker.io' (image selector).30# Only watch latest 10 tags and include tags matching regexp ^\d+\.\d+\..*31- name: docker.io/portainer/portainer32 watch_repo: true33 max_tags: 1034 include_tags:35 - ^\d+\.\d+\..*36
37# Watch alpine image (library) and assume docker.io registry and latest tag38# with registry options named 'docker.io' (image selector).39# Force linux/arm64/v8 platform for this image40- name: alpine41 watch_repo: true42 platform:43 os: linux44 arch: arm6445 variant: v8Более подробно можно почитать в официальной документации
Уведомления (notifications)
Diun умеет отправлять уведомления более чем в 15 сервисов:
| Сервис | Переменные окружения |
|---|---|
| Telegram | DIUN_NOTIF_TELEGRAM_TOKEN, DIUN_NOTIF_TELEGRAM_CHATIDS |
| Discord | DIUN_NOTIF_DISCORD_WEBHOOKURL |
| Gotify | DIUN_NOTIF_GOTIFY_ENDPOINT, DIUN_NOTIF_GOTIFY_TOKEN |
| Slack | DIUN_NOTIF_SLACK_WEBHOOKURL |
DIUN_NOTIF_MAIL_SMTP_HOST, DIUN_NOTIF_MAIL_FROM, DIUN_NOTIF_MAIL_TO | |
| Webhook | DIUN_NOTIF_WEBHOOK_ENDPOINT |
Можно использовать несколько сервисов для уведомлений одновременно, как это указано у меня в docker compose файле.
Заключение
Diun — это обязательный инструмент для всех, кто использует Docker в self-hosted инфраструктуре.
Он лёгкий, стабильный, не требует сложной настройки и отлично сочетается с другими DevOps-сервисами.
Если вы хотите держать свою инфраструктуру в актуальном состоянии, Diun поможет вовремя узнавать об обновлениях и избегать сюрпризов.
Some information may be outdated