Watchtower est un outil simple et très pratique qui permet de mettre à jour automatiquement les images Docker de vos conteneurs. Idéal si vous souhaitez garder vos services à jour de manière automatisée. Il est aussi possible d'être simplement notifié lorsqu'une mise à jour est disponible.
Installation de Watchtower
Par défaut il vérifie si des mises à jour sont disponibles toutes les 24 heures. Mais vous pouvez configurer un horaire précis avec cron. Par exemple pour vérifier les mises à jour tous les jours à 3h du matin :
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Europe/Paris
- WATCHTOWER_SCHEDULE=0 0 3 * * *
- WATCHTOWER_CLEANUP=true
WATCHTOWER_CLEANUP
: Supprime les anciennes images Docker pour libérer de l’espace disque. (true/false)
Exclure un conteneur des mises à jour
Pour empêcher Watchtower de surveiller un conteneur particulier, vous pouvez ajouter un label com.centurylinklabs.watchtower.enable
avec la valeur false
à ce conteneur :
services:
nginx:
image: nginx:latest
labels:
"com.centurylinklabs.watchtower.enable": "false"
Recevoir des notifications de mise à jour
Il est possible d'être notifié chaque fois qu’un conteneur est mis à jour. Les notifications peuvent être envoyées par divers canaux comme Discord, Gotify, Slack ou encore par mail.
Configuration des notifications
Pour configurer les notifications, vous devez définir certaines variables d'environnement dans le fichier docker-compose.yml
. Voici les principales options :
- WATCHTOWER_NOTIFICATIONS : Quels services de notification utiliser.
- WATCHTOWER_NOTIFICATION_URL : L'URL du service de notification.
- WATCHTOWER_NOTIFICATION_LEVEL : Définir le niveau de log pour les notifications.
Exemple de configuration pour Discord
Pour envoyer des notifications dans un salon Discord, vous devez créer un webhook Discord et l'ajouter à votre configuration :
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Europe/Paris
- WATCHTOWER_NOTIFICATIONS=shoutrrr
- WATCHTOWER_NOTIFICATION_DISCORD_WEBHOOK_URL="discord://token@id"
Exemple de webhook Discord complet :
https://discord.com/api/webhooks/1366048473958584370/iizMbmRC0tbh_2Pnw09qTx6ZPcrRiPhOQT2icvL4xwrnwLNTEq6Sr8vwbwn1Pwmq-r9i
- id =
1366048473958584370
- token =
iizMbmRC0tbh_2Pnw09qTx6ZPcrRiPhOQT2icvL4xwrnwLNTEq6Sr8vwbwn1Pwmq-r9i
Donc la valeur pour WATCHTOWER_NOTIFICATION_DISCORD_WEBHOOK_URL
donnera : discord://token@id
- WATCHTOWER_NOTIFICATION_DISCORD_WEBHOOK_URL="discord://iizMbmRC0tbh_2Pnw09qTx6ZPcrRiPhOQT2icvL4xwrnwLNTEq6Sr8vwbwn1Pwmq-r9i@1366048473958584370"
Avertissement et mode "monitor-only"
Bien que Watchtower soit pratique, il y a des risques à automatiser les mises à jour, ça peut introduire des bugs ou des changements inattendus.
Pour surveiller les mises à jour sans appliquer les changements, vous pouvez activer le mode monitor-only. Ce mode permet à Watchtower de vérifier les nouvelles images mais sans mettre à jour les conteneurs.
L'image est tout de même récupérée en raison des limitations de l'API Docker.
Ce mode peut être activé via la variable d'environnement WATCHTOWER_MONITOR_ONLY=true
.
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Europe/Paris
- WATCHTOWER_MONITOR_ONLY=true
Une autre façon d’activer ce mode pour un conteneur spécifique est d’ajouter le label com.centurylinklabs.watchtower.monitor-only
avec la valeur true
dans la configuration du conteneur :
services:
mon_service:
image: mon_image:latest
labels:
"com.centurylinklabs.watchtower.monitor-only": "true"
Lancer Watchtower manuellement pour mettre à jour un conteneur
Il est également possible de lancer Watchtower manuellement pour mettre à jour un conteneur spécifique à la demande, sans attendre la planification automatique. Cela peut être utile si vous souhaitez forcer une mise à jour immédiate sans modifier la configuration ou attendre l'heure prévue.
Tous les conteneurs Docker :
Pour ça vous pouvez utiliser l'option --run-once
qui indique à Watchtower de ne procéder qu'à un seul cycle de vérification. Si vous ajoutez l'option --rm
, le conteneur Watchtower sera automatiquement supprimé après l'exécution de la mise à jour, vous évitant ainsi de laisser le conteneur à l'arrêt inutilement une fois qu'il a terminé.
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once
Un contenneur spécifique
Si vous souhaitez cibler un conteneur spécifique, vous pouvez ajouter son nom à la fin de la commande :
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once nom_du_conteneur
Automatiser ou être alerté, que choisirez-vous ?
Watchtower est un outil excellent pour automatiser la gestion de vos mises à jour Docker, mais il peut être important de garder un certain contrôle sur les mises à jour automatiques en fonction de l'environnement et son besoin en disponibilité.
Si vous préférez être informé sans risquer de casse, utilisez le mode "monitor-only" pour recevoir des alertes sans intervention automatique.