Watchtower para actualizar automáticamente tus contenedores Docker usando Docker Compose

Tiempo de lectura: 3 minutos

Hola, hoy vamos a ver cómo podemos actualizar automáticamente nuestros contenedores Docker usando Watchtower.

Paso 1: Instalación de Docker y Docker Compose Antes de comenzar, asegúrate de tener Docker y Docker Compose instalados en tu sistema. Puedes seguir las instrucciones oficiales de Docker para instalar estas herramientas en tu sistema operativo.

Paso 2: Crear un archivo de configuración de Docker Compose Crea un archivo llamado docker-compose.yml en el directorio raíz de tu proyecto. Este archivo contendrá la configuración de tus contenedores, incluyendo WatchTower.

Aquí tienes un ejemplo básico de un archivo docker-compose.yml:

version: "3"
services:
  myapp:
    image: myapp:latest
    restart: always

  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    command: --interval 30

En este ejemplo, hay dos servicios definidos: myapp y watchtower. El servicio myapp es el contenedor que deseas actualizar, y el servicio watchtower es responsable de monitorear y actualizar el contenedor myapp.

El volumen /var/run/docker.sock se monta en el contenedor de WatchTower para permitir que se comunique con el demonio de Docker en el host.

Paso 3: Configuración adicional de WatchTower Puedes personalizar la configuración de WatchTower agregando más opciones de línea de comando al servicio en el archivo docker-compose.yml. Aquí tienes algunos ejemplos de configuraciones comunes:

  • Actualizar solo contenedores específicos: Si tienes múltiples contenedores en tu proyecto y solo quieres que WatchTower actualice uno en particular, puedes agregar la etiqueta com.centurylinklabs.watchtower.enable=true al contenedor que deseas actualizar. Por ejemplo:yaml
version: "3"
services:
  myapp:
    image: myapp:latest
    restart: always
    labels:
      - com.centurylinklabs.watchtower.enable=true

  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    command: --interval 30

Programar actualizaciones: Puedes configurar WatchTower para que actualice los contenedores en momentos específicos utilizando la opción --schedule. Por ejemplo, para programar una actualización diaria a las 3 a.m., puedes modificar el comando de WatchTower de la siguiente manera:

watchtower:
  image: containrrr/watchtower
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  restart: always
  command: --interval 30 --schedule "0 3 * * *"

Paso 4: Configuración de notificaciones en WatchTower

Para recibir notificaciones cuando WatchTower actualiza un contenedor, puedes seguir estos pasos:

  1. Agrega la siguiente línea al servicio de WatchTower en tu archivo docker-compose.yml:yaml
watchtower:
  image: containrrr/watchtower
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  restart: always
  command: --interval 30 --notifications <notificación>

Reemplaza <notificación> con el tipo de notificación que deseas configurar. Algunos ejemplos de tipos de notificación son email, slack, gotify, discord, entre otros. La elección depende de tus preferencias y del servicio de notificación que utilices.

Configura los parámetros específicos de notificación según el tipo seleccionado. Por ejemplo, si eliges enviar notificaciones por correo electrónico, agrega el parámetro --notification-email al servicio de WatchTower. Asegúrate de proporcionar la dirección de correo electrónico correcta.

watchtower:
  image: containrrr/watchtower
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  restart: always
  command: --interval 30 --notifications email --notification-email tu_correo@ejemplo.com

Guarda el archivo docker-compose.yml

También podemos generar una notificación usando Discord:

Agrega la siguiente línea al servicio de WatchTower en tu archivo docker-compose.yml:

watchtower:
  image: containrrr/watchtower
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  restart: always
  command: --interval 30 --notifications discord

Configura los parámetros específicos de notificación para Discord. Agrega los siguientes parámetros al servicio de WatchTower:

watchtower:
  image: containrrr/watchtower
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  restart: always
      environment:
      WATCHTOWER_NOTIFICATIONS: slack
      WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL: <discord_webhook>/slack
      WATCHTOWER_NOTIFICATION_TEMPLATE: |
        {{- if .Report -}}
          {{- with .Report -}}
        {{len .Scanned}} Scanned, {{len .Updated}} Updated, {{len .Failed}} Failed
              {{- range .Updated}}
        - {{.Name}} ({{.ImageName}}): {{.CurrentImageID.ShortID}} updated to {{.LatestImageID.ShortID}}
              {{- end -}}
              {{- range .Fresh}}
        - {{.Name}} ({{.ImageName}}): {{.State}}
            {{- end -}}
            {{- range .Skipped}}
        - {{.Name}} ({{.ImageName}}): {{.State}}: {{.Error}}
            {{- end -}}
            {{- range .Failed}}
        - {{.Name}} ({{.ImageName}}): {{.State}}: {{.Error}}
            {{- end -}}
          {{- end -}}
        {{- else -}}
          {{range .Entries -}}{{.Message}}{{"\n"}}{{- end -}}
        {{- end -}}
    command: notify-upgrade

Reemplaza <URL_WEBHOOK_DISCORD> con la URL del webhook de Discord al que deseas enviar las notificaciones. Para obtener la URL del webhook, debes crear un webhook en tu servidor de Discord.

Guarda el archivo docker-compose.yml.

Paso 5: Ejecutar el tutorial

Una vez que hayas configurado el archivo docker-compose.yml con las opciones de WatchTower y las notificaciones deseadas, puedes ejecutar el tutorial siguiendo estos pasos:

  1. Abre una terminal y navega hasta el directorio donde se encuentra el archivo docker-compose.yml.
  2. Ejecuta el siguiente comando para iniciar los contenedores:bash
docker-compose up -d

Esto creará y ejecutará los contenedores definidos en el archivo docker-compose.yml.

WatchTower ahora monitoreará tus contenedores y los actualizará según la configuración establecida. Si hay actualizaciones disponibles, recibirás notificaciones según la configuración de notificación que hayas definido.

Deja un comentario