Watchtower: Automated Container Updates

🛰️ Watchtower: Automated Container Updates

::: info Watchtower è un’applicazione che automatizza il processo di aggiornamento delle immagini Docker. Monitora i container in esecuzione e, se rileva che l’immagine di base è cambiata nel repository remoto, scarica la nuova versione e riavvia il container utilizzando esattamente le stesse opzioni di configurazione iniziali. :::

1. Architettura del Servizio

Watchtower non richiede un database esterno o configurazioni complesse. Comunica direttamente con il demone Docker tramite il socket per leggere i metadati dei container attivi.


2. Deploy di Watchtower

Utilizziamo una configurazione Docker Compose ottimizzata. In questo esempio, Watchtower scansionerà gli aggiornamenti ogni 24 ore (86400 secondi) e pulirà automaticamente le vecchie immagini per risparmiare spazio.

Configurazione docker-compose.yaml

services:
  watchtower:
    image: containrrr/watchtower:latest
    container_name: watchtower-service
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      # Intervallo di controllo in secondi (24h)
      - WATCHTOWER_POLL_INTERVAL=86400
      # Rimuove le vecchie immagini dopo l'aggiornamento (fondamentale!)
      - WATCHTOWER_CLEANUP=true
      # Include solo i container che hanno l'etichetta specifica (Opzionale)
      # - WATCHTOWER_LABEL_ENABLE=true
      # Fuso orario per i log
      - TZ=Europe/Rome
    security_opt:
      - no-new-privileges:true

3. Strategie di Aggiornamento (Safe Updates)

In un ambiente di produzione, aggiornare tutto indiscriminatamente può essere rischioso (es. un database che richiede una migrazione manuale). Watchtower permette due approcci:

A. Approccio “Opt-Out” (Default)

Watchtower aggiorna tutti i container. Per escludere un container critico (es. MariaDB), aggiungi questa etichetta al servizio nel suo file Compose:

labels:
  - "com.centurylinklabs.watchtower.enable=false"

B. Approccio “Opt-In” (Consigliato per Ingegneri)

Configura Watchtower con WATCHTOWER_LABEL_ENABLE=true. In questo modo, solo i container che hanno esplicitamente l’etichetta seguente verranno aggiornati:

labels:
  - "com.centurylinklabs.watchtower.enable=true"

🔔 Notifiche e Monitoraggio

Un Software Architect deve sapere cosa succede. Watchtower supporta notifiche via Slack, Discord, Telegram o Email.

Esempio Telegram:

environment:
  - WATCHTOWER_NOTIFICATIONS=telegram
  - WATCHTOWER_NOTIFICATION_TELEGRAM_TOKEN=tuo_token_bot
  - WATCHTOWER_NOTIFICATION_TELEGRAM_CHAT_ID=tuo_id_chat

💡 Note dell’Ingegnere (Critical Thinking)

  • Cleanup: L’impostazione WATCHTOWER_CLEANUP=true è vitale. Senza di essa, ogni aggiornamento lascerebbe sul disco la vecchia immagine orfana (dangling), saturando velocemente lo storage del server Proxmox o del Mac Pro.
  • Stateful Services: Evita di far aggiornare automaticamente i database (PostgreSQL, InfluxDB) tra Major Version (es. da v15 a v16). Queste operazioni richiedono spesso script di migrazione che un riavvio automatico non può gestire.
  • Time Windows: Se preferisci che gli aggiornamenti avvengano solo di notte, usa WATCHTOWER_SCHEDULE con espressione Cron (es. 0 0 3 * * * per le 3 del mattino) invece del POLL_INTERVAL.

Tags: #Docker #Automation #Watchtower #Maintenance #DevOps*

Last updated on Thursday, March 5, 2026
Built with Hugo
Theme Stack designed by Jimmy