# 3.2 DIUN. Notificador de nuevas imágenes

[![diun-logo.png](https://libros.catedu.es/uploads/images/gallery/2023-02/scaled-1680-/diun-logo.png)](https://libros.catedu.es/uploads/images/gallery/2023-02/diun-logo.png)

*Imagen obtenida de https://crazymax.dev/diun/*

## Esta herramienta sirve para...

enterarnos cuando una nueva imagen (para docker) está disponible. DIUN son las siglas de Docker Image Update Notifier.

## Web de proyecto y otros enlaces de interés

Web del proyecto: [https://crazymax.dev/diun/](https://crazymax.dev/diun/)

Repositorio de código: [https://github.com/crazy-max/diun](https://github.com/crazy-max/diun)

## Puesta en marcha

Si bien hay varios modos de desplegar el servicio DIUN nosotros, en este curso, vamos a optar por hacerlo a través de docker-compose pues creo es el modo mas sencillo en el que podemos hacer convivir varios servicios sin que unos acepten a otros. Para ello accedemos al terminal y escribimos lo siguiente:

```
cd $HOME
mkdir diun
cd diun
nano docker-compose.yml
```

Dentro del fichero escribimos el siguiente contenido

```yaml
version: "3.5"

services:
  diun:
    image: crazymax/diun:latest
    container_name: diun
    command: serve
    volumes:
      - "./data:/data"
      - "./diun.yml:/diun.yml:ro"
      - "/var/run/docker.sock:/var/run/docker.sock"
    environment:
      - "TZ=Europe/Madrid"
      - "LOG_LEVEL=info"
      - "LOG_JSON=false"
    restart: always
```

Para salir del fichero pulsaremos `control + x` y guardaremos los cambios. Posteriormente ponemos en marcha los contenedores con `docker compose up -d` Aparecerá en pantalla algo similar a

[![diun-deploy.png](https://libros.catedu.es/uploads/images/gallery/2023-07/scaled-1680-/diun-deploy.png)](https://libros.catedu.es/uploads/images/gallery/2023-07/diun-deploy.png)

*Elaboración propia*

Y, si queremos, podemos ejecutar `docker ps | grep diun` para comprobar si entre todos los contenedores docker en ejecución hay alguno con el nombre diun. Veremos algo similar a

[![diun-grep.png](https://libros.catedu.es/uploads/images/gallery/2023-02/scaled-1680-/diun-grep.png)](https://libros.catedu.es/uploads/images/gallery/2023-02/diun-grep.png)

*Elaboración propia*

De acuerdo a la documentación sobre comandos que aparece en [https://crazymax.dev/diun/usage/command-line/](https://crazymax.dev/diun/usage/command-line/) podemos ejecutar cualquiera de los comandos que ahí aparecen ejecutando `docker exec diun comando` por ejemplo `docker exec diun diun image list` que nos mostrará algo similar a

[![diun-exec.png](https://libros.catedu.es/uploads/images/gallery/2023-02/scaled-1680-/diun-exec.png)](https://libros.catedu.es/uploads/images/gallery/2023-02/diun-exec.png)

*Elaboración propia*

De todos modos, **lo interesante de esta herramienta es que sea ella misma quién nos notifique cuando hay una nueva imagen sin necesidad de que nosotros/as ejecutemos nada**. Para ello hay que configurar las notificaciones de acuerdo a la documentación que aparece aquí [https://crazymax.dev/diun/config/notif/](https://crazymax.dev/diun/config/notif/) ¡Vamos allá! En la terminal escribiremos:

```bash
cd $HOME/diun
nano diun.yml
```

Dentro del fichero, que será en el cual establezcamos los métodos de notificación, escribimos el siguiente contenido:

```yaml
watch:
  workers: 20
  schedule: "0 */6 * * *"
  firstCheckNotif: false

providers:
  docker:
    watchByDefault: true

notif:
  mail:
    host: localhost
    port: 25
    ssl: false
    insecureSkipVerify: false
    from: tu_email@tu_email.com
    to:
      - tu_email@tu_email.com
    templateTitle: "{{ .Entry.Image }} released"
    templateBody: |
      Docker tag {{ .Entry.Image }} which you subscribed to through {{ .Entry.Provider }} provider has been released.
  telegram:
    token: tu_token_en_telegram
    chatIDs:
      - el_id_de_tu_chat
    templateBody: |
      Docker tag {{ .Entry.Image }} which you subscribed to through {{ .Entry.Provider }} provider has been released.
```

A continuación reiniciamos el contenedor con los comandos

```bash
cd $HOME/diun
docker-compose down
docker-compose up -d
```

Para salir del fichero pulsaremos `control + x` , guardaremos los cambios y *¡et voilà!* ya están configuradas las notificaciones para Telegram y email. Deberás cambiar los valores a tus valores y establecer solo aquellos servicios a través de los que quieres que se te notifique.

## Cómo actualizar la imágenes

En mi caso lo tengo configurado para que me notifique a través de un bot de Telegram por ello recibo notificaciones con este aspecto:

[![diun-notificacion.jpg](https://libros.catedu.es/uploads/images/gallery/2023-02/scaled-1680-/diun-notificacion.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-02/diun-notificacion.jpg)

*Elaboración propia*

Si has instalado Portainer (lo hicimos en el capítulo anterior) es muy sencillo. Accedemos a través del navegador la Raspberry Pi y al servicio Portainer del siguiente modo `http://<IP>:puerto` en mi caso tengo configurada la raspberry Pi con la IP `192.168.0.201` y portainer con el puerto `9000` por lo que escribo `http://192.168.0.201:9000` y así accedo a la interface web de portainer.

[![portainer-index.png](https://libros.catedu.es/uploads/images/gallery/2023-02/scaled-1680-/portainer-index.png)](https://libros.catedu.es/uploads/images/gallery/2023-02/portainer-index.png)

*Elaboración propia*

Pincho en el entorno local y accedo a una pantalla como la siguiente:

[![portainer-dashboard.png](https://libros.catedu.es/uploads/images/gallery/2023-02/scaled-1680-/portainer-dashboard.png)](https://libros.catedu.es/uploads/images/gallery/2023-02/portainer-dashboard.png)

*Elaboración propia*

Selecciono imágenes, busco la que me interesa (en este ejemplo, la que corresponde a jackett) y pincho en ella. De modo que veré algo como

[![portainer-image-details.png](https://libros.catedu.es/uploads/images/gallery/2023-02/scaled-1680-/portainer-image-details.png)](https://libros.catedu.es/uploads/images/gallery/2023-02/portainer-image-details.png)

*Elaboración propia*

Y ahora elijo la opción que dice "Pull from regirtry" (la 2ª opción).

*[![portainer-image-details-detail.png](https://libros.catedu.es/uploads/images/gallery/2023-02/scaled-1680-/portainer-image-details-detail.png)](https://libros.catedu.es/uploads/images/gallery/2023-02/portainer-image-details-detail.png)*

*Elaboración propia*

Nos preguntará por el registro a usar pudiendo dejar la opción por defecto sin mayor problema y comenzará la descarga de la imagen. De este modo habremos descargado la última imagen disponible de, en este ejemplo, jackett.

Todo lo anterior podíamos haberlo hecho ejecutando desde el terminal `docker image pull linuxserver/jackett:latest`

<p class="callout warning">Con lo hecho hasta ahora habremos actualizado una determinada imagen PERO si algún contenedor está usando dicha imagen no pasará a utilizarla hasta que tiremos y levantemos el contenedor de nuevo</p>