Configurando Diun para saber cuándo actualizar tus imágenes de Docker

Diun se trata de una herramienta clave si utilizas Docker. Con ella, podrás recibir una notificación cuando exista una actualización de las imágenes de tus contenedores. En este artículo explicaré como ponerlo en marcha.
Tabla de contenidos
Introducción
Hoy en día es esencial saber cuándo existe una actualización de software disponible, en especial en nuestros servidores expuestos a Internet. Las vulnerabilidades pueden aparecer cuando menos lo esperamos y nos pueden meter en un gran aprieto si no se actúa rápidamente actualizando a la última version.
Comentando un caso reciente, el framework Next.js sufrió de una vulnerabilidad tan fácil de explotar como grave que causó estragos a numerosos servidores, los cuales terminaron afectados por malware por no actualizar a la versión que corregía los agujeros de seguridad.
Investigando qué opciones tenía para ayudarme con el mantenimiento de los contenedores de Docker, descubrí una herramienta llamada Diun, la cual nos avisa con una notificación cuando se encuentra disponible una actualización.
Configurando Diun
Oportunamente, Diun puede funcionar también como contenedor de Docker. Utilizaremos ntfy como servicio para recibir las notificaciones, el cual se explica cómo configurarlo en este artículo.
Creamos una carpeta para Diun en nuestro servidor y en ella creamos un archivo compose.yaml con el siguiente contenido.
name: diun
services:
diun:
image: crazymax/diun:latest
command: serve
volumes:
- "./data:/data"
- "/var/run/docker.sock:/var/run/docker.sock"
environment:
- "TZ=Europe/Madrid"
- "DIUN_WATCH_WORKERS=20"
- "DIUN_WATCH_SCHEDULE=0 */6 * * *"
- "DIUN_WATCH_JITTER=30s"
- "DIUN_PROVIDERS_DOCKER=true"
- "DIUN_NOTIF_NTFY_ENDPOINT=https://ntfy.ejemplo.com"
- "DIUN_NOTIF_NTFY_TOKEN=token_ejemplo"
- "DIUN_NOTIF_NTFY_TOPIC=tema_ejemplo"
labels:
- "diun.enable=true"
restart: alwaysEn la sección de volumes mapearemos la carpeta de data en el mismo directorio para persistir los archivos de la aplicación. Es esencial también mapear el /var/run/docker.sock de nuestro host para que el contenedor pueda tener acceso a la información de los contenedores de Docker.
A continuación detallo los parámetros a configurar:
Zona horaria
Con la variable TZ indicamos la zona horaria de la aplicación, para que opere con consistencia a donde vivimos.
TZ=Europe/MadridSeguimiento de Docker
Diun permite hacer un seguimiento desde distintos proveedores, incluyendo Kurbenetes, un archivo Dockerfile o un directorio que contenga archivos con extensión yaml.
Como queremos utilizarlo simplemente para las imágenes que están siendo utilizadas por nuestros contenedores de Docker, se incluye lo siguiente:
DIUN_PROVIDERS_DOCKER=truePodemos indicar un número máximo de agentes que realicen la comprobación con el siguiente parámetro. En mi caso, lo pongo a 20.
DIUN_WATCH_WORKERS=20La frecuencia de las comprobaciones se indica en sintaxis de cron. Para ejecutarlo cada 6 horas, lo indicaríamos así.
DIUN_WATCH_SCHEDULE=0 */6 * * *El siguiente valor es importante para "disimular" que estamos ejecutando un proceso automatizado a ojos del repositorio de Docker, para evitar posibles bloqueos por demasiados accesos concurrentes. Por cada ejecución de un agente, esperará un valor aleatorio de 0 a la duración indicada.
DIUN_WATCH_JITTER=30sIntegración con ntfy
Indicamos el host donde se encuentra alojado nuestro servicio de ntfy.
DIUN_NOTIF_NTFY_ENDPOINT=https://ntfy.ejemplo.comA continuación, incluimos el token de aplicación de ntfy, el cual deberíamos haberlo incluido en el compose.yaml de dicho servicio.
DIUN_NOTIF_NTFY_TOKEN=token_ejemploPor último, definimos el nombre del tema que usará Diun para enviar las notificaciones mediante ntfy.
DIUN_NOTIF_NTFY_TOPIC=tema_ejemploPor último, levantamos el contenedor con docker compose.
sudo docker compose up -dHabilitando el seguimiento de los contenedores
Como es posible que no nos interese hacer un seguimiento de todos los contenedores, debemos indicar en los compose.yaml de los que nos interese seguir la siguiente etiqueta para habilitarlo.
labels:
- "diun.enable=true"Si por el contrario preferimos que automáticamente haga un seguimiento de todos los contenedores en ejecución, podemos indicar el siguiente parámetro al compose.yaml de Diun.
DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true
Aquí veríamos un ejemplo de notificación recibida.

Como siempre, recomiendo echar un vistazo a la documentación oficial para poder ajustar la configuración a las necesidades de cada uno.
Con estos pasos tendríamos lo necesario para recibir correctamente las notificaciones de las actualizaciones disponibles de nuestros contendedores. Personalmente, el tener esta información fácilmente accesible me da mucha tranquilidad a la hora de administrar mis servidores con Docker.
