Перейти к основному содержимому
Diun — уведомления об обновлениях Docker-образов
  1. Статьи/

Diun — уведомления об обновлениях Docker-образов

·936 слов·5 минут· loading · loading · ·
Stilicho2011
Автор
Stilicho2011
Пишу о homelab, self-hosting, автоматизации и open-source решениях

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 Swarm
  • file — список образов в 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 сервисов:

СервисПеременные окружения
TelegramDIUN_NOTIF_TELEGRAM_TOKEN, DIUN_NOTIF_TELEGRAM_CHATIDS
DiscordDIUN_NOTIF_DISCORD_WEBHOOKURL
GotifyDIUN_NOTIF_GOTIFY_ENDPOINT, DIUN_NOTIF_GOTIFY_TOKEN
SlackDIUN_NOTIF_SLACK_WEBHOOKURL
EmailDIUN_NOTIF_MAIL_SMTP_HOST, DIUN_NOTIF_MAIL_FROM, DIUN_NOTIF_MAIL_TO
WebhookDIUN_NOTIF_WEBHOOK_ENDPOINT

Можно использовать несколько сервисов для уведомлений одновременно, как это указано у меня в docker compose файле.

Заключение
#

Diun — это обязательный инструмент для всех, кто использует Docker в self-hosted инфраструктуре.
Он лёгкий, стабильный, не требует сложной настройки и отлично сочетается с другими DevOps-сервисами.

Если вы хотите держать свою инфраструктуру в актуальном состоянии, Diun поможет вовремя узнавать об обновлениях и избегать сюрпризов.