🛰️ 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_SCHEDULEcon espressione Cron (es.0 0 3 * * *per le 3 del mattino) invece delPOLL_INTERVAL.
Tags: #Docker #Automation #Watchtower #Maintenance #DevOps*