Watchtower: Automatización de actualizaciones de contenedores Docker

Publicado por


watchtower
Proyecto archivado

Watchtower: Automatización de actualizaciones de contenedores Docker

Herramienta para actualizar automáticamente imágenes base de contenedores Docker en entornos locales y de desarrollo

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar Watchtower: Automatización de actualizaciones de contenedores Docker en el canal GENBYTE:

¿Qué es Watchtower: Automatización de actualizaciones de contenedores Docker?

Watchtower es una utilidad escrita en Go que monitoriza los contenedores Docker en ejecución y los actualiza automáticamente cuando se detecta una nueva versión de su imagen en el registro. El proyecto está diseñado para entornos domésticos, laboratorios caseros, centros multimedia y entornos de desarrollo local. Los mantenedores advierten explícitamente que no se recomienda su uso en entornos comerciales o de producción, sugiriendo alternativas como Kubernetes, MicroK8s o k3s para esos casos. El proyecto ha sido archivado y ya no recibe mantenimiento activo, según el aviso oficial en su repositorio.

Watchtower simplifica el ciclo de vida de contenedores al extraer la nueva imagen, detener el contenedor existente de forma ordenada y reiniciarlo con las mismas opciones de despliegue original.

Características principales

Actualización automática de imágenes

Detecta nuevas versiones de imágenes en Docker Hub o registros privados y actualiza los contenedores en ejecución.

Preservación de configuración

Reinicia los contenedores con las mismas opciones, volúmenes, redes y variables de entorno utilizadas en el despliegue inicial.

Soporte para registros privados

Permite autenticarse en registros privados mediante credenciales de Docker para actualizar imágenes no públicas.

Programación flexible

Ofrece intervalos de comprobación configurables y soporte para programaciones cron personalizadas.

Notificaciones integradas

Incluye soporte para notificaciones por correo electrónico, Slack, Discord, Gotify, Microsoft Teams, Pushover, Telegram y otros servicios.

API HTTP y métricas

Expone una API HTTP opcional con métricas Prometheus y endpoints de salud para monitorización.

Etiquetas de control

Permite incluir o excluir contenedores mediante etiquetas Docker (labels) para granularidad en la actualización.

Requisitos del sistema

  • Docker Engine instalado y en ejecución
  • Acceso al socket de Docker (/var/run/docker.sock) para gestionar contenedores
  • Conectividad de red hacia los registros de imágenes (Docker Hub o privados)
  • Permisos para montar el socket de Docker en el contenedor de Watchtower

Instalación con Docker Compose

Despliegue rápido con Docker CLI

Ejecuta Watchtower como contenedor montando el socket de Docker. Este método es el documentado en el inicio rápido oficial.

docker run –detach \
–name watchtower \
–volume /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower

Despliegue con Docker Compose (desarrollo)

El repositorio incluye un archivo docker-compose.yml de ejemplo para desarrollo con métricas, Prometheus, Grafana y contenedores de prueba. No está destinado a producción.

version: '3.7'

services:
watchtower:
container_name: watchtower
build:
context: ./
dockerfile: dockerfiles/Dockerfile.dev-self-contained
volumes:
– /var/run/docker.sock:/var/run/docker.sock:ro
ports:
– 8080:8080
command: –interval 10 –http-api-metrics –http-api-token demotoken –debug prometheus grafana parent child
prometheus:
container_name: prometheus
image: prom/prometheus
volumes:
– ./prometheus/:/etc/prometheus/
– prometheus:/prometheus/
ports:
– 9090:9090
grafana:
container_name: grafana
image: grafana/grafana
ports:
– 3000:3000
environment:
GF_INSTALL_PLUGINS: grafana-clock-panel,grafana-simple-json-datasource
volumes:
– grafana:/var/lib/grafana
– ./grafana:/etc/grafana/provisioning
parent:
image: nginx
container_name: parent
child:
image: nginx:alpine
labels:
com.centurylinklabs.watchtower.depends-on: parent
container_name: child

volumes:
prometheus: {}
grafana: {}

Acceder al proyecto

API HTTP y métricas (opcional)

Si se habilita con –http-api-metrics y –http-api-token, la API queda accesible en el puerto 8080 del contenedor. Requiere token de autenticación.

Prometheus (en compose de desarrollo)

Interfaz de Prometheus disponible en http://localhost:9090 cuando se usa el docker-compose.yml de desarrollo incluido.

Grafana (en compose de desarrollo)

Interfaz de Grafana disponible en http://localhost:3000 con el docker-compose.yml de desarrollo.

Casos de uso

  • Laboratorios caseros (homelabs) con múltiples servicios contenedorizados
  • Centros multimedia basados en Docker (Plex, Jellyfin, *arr stack)
  • Entornos de desarrollo local donde se requieren imágenes base actualizadas
  • Servidores personales con contenedores de utilidades y servicios autohospedados
  • Entornos de prueba donde la actualización automática de imágenes base ahorra mantenimiento manual

Configuración avanzada

Configuración de intervalo y programación

Define la frecuencia de comprobación en segundos con –interval o usa –schedule con expresión cron para horarios específicos.

watchtower –interval 3600
# o
watchtower –schedule "0 0 4 * * *"

Limpieza de imágenes antiguas

Habilita la eliminación de imágenes antiguas tras la actualización para liberar espacio en disco.

watchtower –cleanup

Inclusión y exclusión por etiquetas

Controla qué contenedores monitoriza usando etiquetas Docker. Por defecto, Watchtower monitoriza todos los contenedores.

# Solo contenedores con label com.centurylinklabs.watchtower.enable=true
watchtower –label-enable
# Excluir contenedores con label com.centurylinklabs.watchtower.enable=false
watchtower –label-enable=false

Notificaciones

Configura notificaciones mediante variables de entorno o flags para recibir avisos de actualizaciones. Consulta la documentación oficial para cada proveedor.

# Ejemplo genérico para notificaciones por correo
watchtower –notification-email-from … –notification-email-to … –notification-email-server …

Registros privados

Proporciona credenciales de registro mediante archivo de configuración de Docker (config.json) montado en el contenedor.

docker run -v /root/.docker/config.json:/config.json containrrr/watchtower

Gestión y mantenimiento

Actualización de Watchtower

Al ser un contenedor, actualízalo extrayendo la imagen más reciente y recreando el contenedor.

docker pull containrrr/watchtower
# Recrear contenedor con misma configuración

Visualización de logs

Revisa los logs del contenedor para auditar actualizaciones y detectar errores.

docker logs watchtower

Ejecución única (one-shot)

Ejecuta Watchtower una sola vez sin demonio para actualizaciones puntuales o en pipelines CI/CD.

docker run –rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower –run-once

Stack técnico

  • Go (Golang)
  • Docker API
  • Docker Compose (para desarrollo)
  • Prometheus (métricas opcionales)
  • Grafana (visualización opcional)

Referencias oficiales

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *