L’utilisation de Docker apporte de nombreux avantages comme la possibilité d’empaqueter des applications dans des unités standardisées pour le développement logiciel. Cela simplifie le déploiement et la mise à l’échelle de vos applications.
Cependant, la gestion des mises à jour des images Docker sur un serveur peut devenir fastidieuse. Vous devez manuellement récupérer les nouvelles versions d’une image et redémarrer chaque conteneur à chaque fois qu’une mise à jour est publiée.
C’est là que Watchtower est très pratique! Watchtower est une solution basée sur un conteneur qui surveillera vos conteneurs Docker en cours d’exécution et guettera les modifications apportées aux images à partir desquelles ces conteneurs ont été démarrés à l’origine.
Lorsque Watchtower détecte qu’une image a changé, il redémarrera automatiquement les conteneurs associés pour récupérer la nouvelle image et l’exécuter avec la dernière version.
Dans ce guide complet, nous couvrirons comment installer Watchtower et le configurer pour mettre à jour automatiquement les conteneurs sur Ubuntu 20.04/22.04.
Conditions préalables
Avant de commencer à configurer Watchtower, il y a quelques conditions préalables dont vous avez besoin:
- Un serveur Ubuntu 20.04/22.04 avec Docker installé
- Vous pouvez suivre le guide d’installation de Docker pour Ubuntu 20.04/22.04
- Docker configuré pour démarrer automatiquement au démarrage (doit être par défaut)
- Quelques conteneurs Docker déjà en cours d’exécution sur le serveur que vous souhaitez garder à jour
Une fois votre serveur Ubuntu prêt avec Docker actif et quelques conteneurs en cours d’exécution, nous pouvons passer à l’installation de Watchtower.
Étape 1 – Installer Watchtower
Watchtower est distribué sous forme d’image Docker, donc l’installation est aussi simple que d’exécuter un conteneur à partir de cette image. L’image Watchtower est hébergée sur Docker Hub.
Téléchargez la dernière image Watchtower :
$ docker pull containrrr/watchtower
Une fois le téléchargement de l’image terminé, vous pouvez exécuter un conteneur Watchtower :
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Passons en revue les options que nous transmettons à la commande docker run
:
-d
– Exécute le conteneur Watchtower en mode détaché--name watchtower
– Nomme le conteneur “watchtower” pour une identification plus facile-v /var/run/docker.sock:/var/run/docker.sock
– Monte le socket Docker dans le conteneur Watchtower pour qu’il puisse communiquer avec le daemon Dockercontainrrr/watchtower
– L’image Docker Watchtower à utiliser
Cela créera et démarrera un conteneur Watchtower en arrière-plan qui est prêt à commencer à surveiller vos autres conteneurs.
Étape 2 – Configurer les options de notification Watchtower
Par défaut, Watchtower vérifiera silencieusement les mises à jour des images de conteneur en arrière-plan sans vous en informer. Vous pouvez modifier ce comportement en définissant quelques variables d’environnement lors du lancement de Watchtower :
Notifications sur les conteneurs mis à jour
Pour être notifié lorsque Watchtower met à jour les conteneurs, passez la variable d’environnement -e WATCHTOWER_NOTIFICATIONS=email
.
Il existe quelques options pour les notifications :
- email – Enverra des notifications par e-mail. Nécessite une configuration supplémentaire.
- slack – Peut publier des notifications sur Slack. Nécessite l’URL du webhook et le canal.
- msteams – Envoyer des notifications à MS Teams. Nécessite une URL de webhook.
- gotify – Envoyez des notifications via Gotify. Nécessite un jeton d’application et une URL de serveur.
Par exemple :
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock -e WATCHTOWER_NOTIFICATIONS=email containrrr/watchtower
Cela activera les notifications par e-mail lorsque les conteneurs sont mis à jour.
Notifications au démarrage/à l’arrêt de Watchtower
Vous pouvez également être notifié lorsque le conteneur Watchtower démarre ou s’arrête en passant -e WATCHTOWER_NOTIFICATIONS_LEVEL=start-exit
:
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock -e WATCHTOWER_NOTIFICATIONS=email -e WATCHTOWER_NOTIFICATIONS_LEVEL=start-exit containrrr/watchtower
Cela enverra des notifications à la fois sur les mises à jour des conteneurs et lorsque Watchtower démarre/s’arrête.
Configuration des services de notification
Si vous activez les notifications, vous devrez fournir la configuration des services de notification.
Cela se fait en passant des variables d’environnement supplémentaires ou en montant des fichiers de configuration YAML dans le conteneur.
Configuration de l’e-mail
Pour recevoir des notifications par e-mail, vous devez fournir :
WATCHTOWER_EMAIL_FROM
– L’adresse à partir de laquelle envoyer les e-mails de notificationWATCHTOWER_EMAIL_TO
– L’adresse à laquelle envoyer les notificationsWATCHTOWER_EMAIL_SERVER
– Adresse du serveur SMTPWATCHTOWER_EMAIL_SERVER_PORT
– Port du serveur SMTPWATCHTOWER_EMAIL_SERVER_USER
– Nom d’utilisateur SMTPWATCHTOWER_EMAIL_SERVER_PASSWORD
– Mot de passe SMTP
Pour Gmail, cela ressemblerait à quelque chose comme :
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS=email \
-e [email protected] \
-e [email protected] \
-e WATCHTOWER_EMAIL_SERVER=smtp.gmail.com \
-e WATCHTOWER_EMAIL_SERVER_PORT=587 \
-e [email protected] \
-e WATCHTOWER_EMAIL_SERVER_PASSWORD=gmail_password \
containrrr/watchtower
Configuration Slack
Pour publier sur Slack, vous avez besoin de :
WATCHTOWER_NOTIFICATIONS_SLACK_WEBHOOK_URL
– Votre URL de webhook SlackWATCHTOWER_NOTIFICATIONS_SLACK_CHANNEL
– Le canal Slack sur lequel publier
Par exemple :
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS=slack \
-e WATCHTOWER_NOTIFICATIONS_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx \
-e WATCHTOWER_NOTIFICATIONS_SLACK_CHANNEL="#channel-name" \
containrrr/watchtower
Configuration de MS Teams
Pour les notifications MS Teams, vous n’avez besoin que de fournir :
WATCHTOWER_NOTIFICATIONS_MSTEAMS_WEBHOOK_URL
– Votre URL de webhook MS Teams
Par exemple :
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS=msteams \
-e WATCHTOWER_NOTIFICATIONS_MSTEAMS_WEBHOOK_URL=https://webhook.teams.microsoft.com/xxx \
containrrr/watchtower
Utilisation de fichiers de configuration
Au lieu de passer des variables d’environnement, vous pouvez définir vos configurations de notification dans des fichiers YAML et les monter dans le conteneur Watchtower.
Cela vous permet de conserver vos configurations de manière externe et de ne pas avoir à passer de longues chaînes de commande.
Les chemins de fichiers de configuration :
/config/email.yaml
– Configuration email/config/slack.yaml
– Configuration Slack/config/msteams.yaml
– Configuration MS Teams
Montez simplement vos fichiers YAML personnalisés par-dessus les fichiers vides par défaut.
Par exemple pour les notifications par e-mail :
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /path/to/email.yaml:/config/email.yaml \
containrrr/watchtower
Où votre email.yaml
contiendrait :
email:
from: [email protected]
to: [email protected]
server: smtp.gmail.com
port: 587
user: [email protected]
password: gmail_password
Cela garde vos configurations de notification externes et détachables du conteneur Watchtower lui-même.
Étape 3 – Contrôler quels conteneurs sont mis à jour
Par défaut, Watchtower surveillera tous les conteneurs s’exécutant sur le daemon Docker et mettra à jour tous les conteneurs où l’image est actualisée.
Vous pouvez exclure des conteneurs par nom ou étiquette pour empêcher Watchtower de les mettre à jour automatiquement :
Exclure par nom de conteneur
Passez l’option --exclude
avec un filtre regex pour les noms :
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --exclude "my-container-name|another-container"
Exclure par étiquette de conteneur
Étiquetez les conteneurs avec com.centurylinklabs.watchtower.enable=false
pour exclure :
$ docker run -d --label com.centurylinklabs.watchtower.enable=false nginx
Les conteneurs avec cette étiquette seront ignorés par Watchtower.
Inclure uniquement les conteneurs correspondants
Vous pouvez également créer une whitelist de conteneurs à mettre à jour uniquement les conteneurs correspondant à un modèle en utilisant --include
:
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --include "container-a|container-b"
Maintenant, Watchtower mettra uniquement à jour automatiquement les conteneurs nommés container-a
ou container-b
, en ignorant tous les autres.
Étape 4 – Modifier les intervalles de sondage Watchtower
Watchtower vérifiera les nouvelles images toutes les quelques minutes par défaut. Vous pouvez modifier la fréquence à laquelle Watchtower recherche de nouvelles images.
Vérifier les nouvelles images
Pour modifier la fréquence à laquelle Watchtower vérifie les nouvelles images, passer l’option --interval
avec une chaîne de durée :
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --interval 5m
Cela fera vérifier de nouvelles images à Watchtower toutes les 5 minutes.
Redémarrer les conteneurs
Par défaut, Watchtower attendra 10 minutes après une mise à jour d’image avant de redémarrer les conteneurs. Vous pouvez modifier la durée pendant laquelle Watchtower attend avant de redémarrer avec --restart-delay
:
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --restart-delay 2m
Cela définira le délai de redémarrage à 2 minutes.
Étape 5 – Automatiser le démarrage de Watchtower
La dernière étape consiste à vous assurer que Watchtower est automatiquement démarré lorsque le daemon Docker démarre. Cela exécutera Watchtower chaque fois que vous redémarrerez le serveur.
Vous pouvez créer un simple fichier d’unité systemd pour démarrer Watchtower au démarrage.
Créez un fichier d’unité à /etc/systemd/system/watchtower.service
avec cette définition :
[Unit]
Description=Watchtower - Mise à jour automatique des conteneurs Docker
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a watchtower
ExecStop=/usr/bin/docker stop -t 2 watchtower
[Install]
WantedBy=multi-user.target
Cela démarrera le conteneur Watchtower que nous avons créé lorsque le daemon Docker démarre.
Rechargez systemd et activez le service Watchtower pour démarrer au démarrage :
$ sudo systemctl daemon-reload
$ sudo systemctl enable watchtower
Watchtower démarrera maintenant automatiquement à chaque redémarrage du serveur.
Étape 6 – Configurer Watchtower dans Docker Compose
Vous pouvez également exécuter Watchtower dans le cadre d’un stack Docker Compose.
Ajoutez un service watchtower à votre fichier docker-compose.yml comme ceci :
version: "3"
services:
app:
image: myapp
ports:
- "8080:80"
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 30
Cela démarrera Watchtower avec les conteneurs d’application/service définis dans votre fichier compose.
Watchtower surveillera les autres services et mettra automatiquement à jour toutes les images lorsque de nouvelles versions sont publiées.
Le montage volumes
monte le socket Docker pour que Watchtower puisse communiquer avec le daemon Docker.
La command
définit l’intervalle de vérification à 30 secondes. Vous pouvez personnaliser cet intervalle si nécessaire.
Maintenant, lorsque vous exécutez docker-compose up
, Watchtower mettra à jour vos images automatiquement !
L’utilisation de Docker Compose vous permet d’ajouter facilement la surveillance Watchtower aux piles nouvelles et existantes. Il suffit d’ajouter le service watchtower et le montage de volume pour commencer à mettre à jour automatiquement toutes les nouvelles images existantes.
Conclusion
Dans ce guide, nous avons couvert comment installer et configurer Watchtower pour mettre à jour automatiquement vos conteneurs Docker.
Les points clés à retenir incluent :
- Watchtower s’exécute en tant que conteneur Docker pour surveiller d’autres conteneurs
- Les notifications peuvent vous alerter lorsque Watchtower met à jour les conteneurs
- Exclure des conteneurs des mises à jour automatiques par nom ou étiquette
- Modifiez la fréquence à laquelle Watchtower recherche de nouvelles images
- Créez un fichier d’unité systemd pour lancer Watchtower au démarrage
Avec Watchtower en cours d’exécution, vous n’avez plus besoin de vérifier manuellement les mises à jour d’images Docker ou de redémarrer les conteneurs. Watchtower gardera vos conteneurs à jour automatiquement en arrière-plan.
Cela simplifie grandement la gestion des mises à jour des conteneurs à mesure que votre pile s’agrandit. Essayez Watchtower pour simplifier la mise à jour de vos conteneurs !