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 файла, который использовался в ролике
services: diun: # Определяем сервис Diun в составе Docker Compose image: crazymax/diun:latest # Официальный образ Diun с Docker Hub container_name: diun # Имя контейнера (для удобства в `docker ps`) command: serve # Основная команда — запустить веб/cron-сервис Diun volumes: - "/path/to/user/directory/data:/data" # Локальный каталог для хранения базы данных и конфигурации Diun - "/var/run/docker.sock:/var/run/docker.sock" # Доступ к Docker API для отслеживания образов и контейнеров environment: - "TZ=Europe/Moscow" # Устанавливаем часовой пояс (важно для cron и временных меток) - "LOG_LEVEL=info" # Уровень логирования: trace | debug | info | warn | error | fatal | panic - "DIUN_WATCH_WORKERS=50" # Количество параллельных потоков при проверке образов (ускоряет работу при множестве контейнеров) - "DIUN_WATCH_SCHEDULE=0 */6 * * *" # Cron-расписание: проверять обновления каждые 6 часов - "DIUN_WATCH_JITTER=30s" # Добавляет случайную задержку (до 30 секунд), чтобы избежать одновременного старта нескольких задач - "DIUN_WATCH_RUNONSTARTUP=true" # Запуск проверки сразу при старте контейнера, не дожидаясь расписания - "DIUN_PROVIDERS_DOCKER=true" # Активирует провайдер Docker: Diun будет отслеживать образы запущенных контейнеров - "DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true" # Включает мониторинг всех контейнеров по умолчанию, без необходимости вручную задавать label `diun.enable=true`
# --- Настройки уведомлений через Telegram --- - "DIUN_NOTIF_TELEGRAM_TOKEN=token" # Токен Telegram-бота, созданного через @BotFather - "DIUN_NOTIF_TELEGRAM_chatIDs=chatid" # ID чата или пользователя, куда будут отправляться уведомления (можно указать несколько через запятую)
# --- Настройки уведомлений через Gotify --- - "DIUN_NOTIF_GOTIFY_ENDPOINT=https://gotify.domain.ru" # URL вашего сервера Gotify - "DIUN_NOTIF_GOTIFY_TOKEN=token" # Токен приложения Gotify (создаётся в веб-интерфейсе Gotify) - "DIUN_NOTIF_GOTIFY_PRIORITY=1" # Приоритет уведомления (0 — низкий, 5 — высокий) - "DIUN_NOTIF_GOTIFY_TIMEOUT=10s" # Таймаут ожидания ответа от Gotify при отправке уведомления
labels: - "diun.enable=true" # Метка, разрешающая Diun отслеживать этот контейнер (опционально, если `WATCHBYDEFAULT=false`) restart: always # Перезапуск контейнера при сбое или перезагрузке Docker-хостаПосле первого запуска Diun создаст базу data/diun.db и начнёт мониторить все контейнеры Docker. Более подробно можно будет посмотреть в логах приложения
Diun гибко настраивается. Ниже — краткий обзор самых полезных возможностей.
Режимы работы
- Watch (наблюдение) — Diun периодически сканирует все контейнеры, чтобы проверить обновления.
- Events (события) — реагирует на запуск контейнера и проверяет, есть ли более свежий образ.
- Database mode — хранит состояние всех проверенных образов, чтобы не слать повторные уведомления.
Метки контейнеров
Можно указать, какие контейнеры отслеживать. Добавьте в docker-compose.yml:
labels: - "diun.enable=true"или наоборот — исключите ненужные контейнеры.
Провайдеры
Diun поддерживает разные источники:
docker— работа с локальным Docker-демономswarm— отслеживание образов в Docker Swarmfile— список образов в YAML-файлеkubernetes— (экспериментально) проверка образов в подахwatchtower— импорт конфигурации из Watchtower
Пример YAML-провайдера:
db: path: diun.db
watch: workers: 20 schedule: "0 */6 * * *"
regopts: - name: "myregistry" username: fii password: bor timeout: 5s - name: "docker.io/crazymax" selector: image username: fii password: bor - name: "docker.io" selector: image username: foo password: bar
providers: file: filename: /path/to/config.yml### /path/to/config.yml
# Watch latest tag of crazymax/nextcloud image on docker.io (DockerHub)# with registry options named 'docker.io/crazymax' (image selector).- name: docker.io/crazymax/nextcloud:latest
# Watch 4.0.0 tag of jfrog/artifactory-oss image on frog-docker-reg2.bintray.io (Bintray)# with registry options named 'myregistry' (name selector).- name: jfrog-docker-reg2.bintray.io/jfrog/artifactory-oss:4.0.0 regopt: myregistry
# Watch coreos/hyperkube image on quay.io (Quay) and assume latest tag.# Add foo=bar metadata to be used in notification template.- name: quay.io/coreos/hyperkube metadata: foo: bar
# Watch crazymax/swarm-cronjob image and assume docker.io registry and latest tag# with registry options named 'docker.io/crazymax' (image selector).# Only include tags matching regexp ^1\.2\..* and only be notified on new tag.- name: crazymax/swarm-cronjob watch_repo: true notify_on: - new include_tags: - ^1\.2\..*
# Watch portainer/portainer image on docker.io (DockerHub) and assume latest tag# with registry options named 'docker.io' (image selector).# Only watch latest 10 tags and include tags matching regexp ^\d+\.\d+\..*- name: docker.io/portainer/portainer watch_repo: true max_tags: 10 include_tags: - ^\d+\.\d+\..*
# Watch alpine image (library) and assume docker.io registry and latest tag# with registry options named 'docker.io' (image selector).# Force linux/arm64/v8 platform for this image- name: alpine watch_repo: true platform: os: linux arch: arm64 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 поможет вовремя узнавать об обновлениях и избегать сюрпризов.
Некоторая информация может быть устаревшей