Mise à jour automatique des conteneurs Docker en cours d'exécution avec Watchtower
Maintenir les conteneurs Docker à jour est l'un des travaux importants d'un ingénieur DevOps. Mettre à jour manuellement les conteneurs Docker est une tâche assez chronophage. Ce guide explique ce qu'est Watchtower, comment installer Watchtower et comment mettre automatiquement à jour les conteneurs Docker en cours d'exécution en utilisant Watchtower sous Linux.
Qu'est-ce que la Tour de Garde ?
Watchtower est une application gratuite et open source qui vous permet de surveiller les conteneurs Docker en cours d'exécution et de les mettre à jour automatiquement lorsqu'elle détecte des modifications dans leurs images de base.
Lorsque watchtower découvre qu'un conteneur en cours d'exécution doit être mis à jour, il arrêtera gracieusement le conteneur en cours d'exécution en lui envoyant un signal SIGTERM.
Il téléchargera ensuite la nouvelle image, puis redémarrera enfin le conteneur avec les mêmes options qui ont été utilisées lors de son déploiement initial. Tout sera fait automatiquement en arrière-plan, donc aucune intervention de l'utilisateur n'est nécessaire.
Dans ce guide, nous verrons comment mettre à jour automatiquement les conteneurs Docker en cours d'exécution à l'aide de Watchtower sur des systèmes d'exploitation de type Unix.
J'ai testé ce guide sur les systèmes CentOS et Ubuntu, cependant la procédure est la même pour toutes les distributions Linux.
Installer Watchtower sur Linux
Watchtower lui-même est disponible en tant qu'image Docker. Donc, le déployer n'est pas un gros problème. Installez Docker sur votre machine Linux et commencez à exécuter Watchtower pour surveiller les conteneurs Docker en un rien de temps.
Référez-vous aux guides suivants pour installer Docker sur des systèmes basés sur RPM et DEB.
- Comment installer Docker sur CentOS
- Comment installer Docker sur Ubuntu
- Manuel pour débutants sur Docker Desktop pour Linux
Une fois Docker installé, vous pouvez déployer le conteneur Watchtower en utilisant la commande suivante en tant qu'utilisateur root :
# docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtowerSi vous avez installé Docker Desktop, exécutez le conteneur Watchtower en tant qu'utilisateur normal.
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtowerCette commande va récupérer la dernière image de watchtower et démarrer le conteneur watchtower.
Exemple de sortie :
Unable to find image 'containrrr/watchtower:latest' locally
latest: Pulling from containrrr/watchtower
1045b2f97fda: Pull complete
35a104a262d3: Pull complete
1a0671483169: Pull complete
Digest: sha256:bbf9794a691b59ed2ed3089fec53844f14ada249ee5e372ff0e595b73f4e9ab3
Status: Downloaded newer image for containrrr/watchtower:latest
91c104ef0e9896e8cd5ff30d9f13e728dbfad66443830ec2ac85dde6d7d37564Mettre à jour automatiquement les conteneurs Docker en cours d'exécution avec Watchtower
Watchtower a maintenant commencé avec d'autres conteneurs en cours d'exécution sur votre système. Vous pouvez afficher la liste des conteneurs Docker en cours d'exécution en utilisant la commande :
$ docker psExemple de sortie :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91c104ef0e98 containrrr/watchtower "/watchtower" 14 minutes ago Up 14 minutes 8080/tcp watchtower
f90b462b0712 bitnami/wordpress-nginx:6 "/opt/bitnami/script…" 19 minutes ago Up 19 minutes 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp ostechnix-wordpress-1Comme vous le voyez dans la sortie ci-dessus, le conteneur Watchtower fonctionne avec un autre conteneur nommé "ostechnix-wordpress-1". Dorénavant, Watchtower commencera à surveiller ce conteneur toutes les quelques minutes.
S'il détecte des modifications dans l'image de base de ce conteneur, il arrêtera en douceur le conteneur « ostechnix-wordpress-1 » et le redémarrera avec la nouvelle image en utilisant les mêmes options qui avaient été utilisées lors de son démarrage initial.
De même, il vérifiera automatiquement les mises à jour de tous les conteneurs en cours d'exécution toutes les quelques minutes, et les mettra à jour automatiquement.
Comment Watchtower met-il à jour plusieurs conteneurs liés ?
Watchtower est assez intelligent en ce qui concerne la surveillance de plusieurs conteneurs liés.
Disons que nous exécutons maintenant deux conteneurs.
$ docker psExemple de sortie :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91c104ef0e98 containrrr/watchtower "/watchtower" 14 minutes ago Up 14 minutes 8080/tcp watchtower
f90b462b0712 bitnami/wordpress-nginx:6 "/opt/bitnami/script…" 19 minutes ago Up 19 minutes 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp ostechnix-wordpress-1
a895f082438a bitnami/mariadb:10.6 "/opt/bitnami/script…" 20 minutes ago Up 19 minutes 3306/tcp ostechnix-mariadb-1Comme vous le voyez dans la sortie ci-dessus, nous exécutons deux conteneurs, c'est-à-dire "ostechnix-wordpress-1" et "ostechnix-mariadb-1". Le conteneur mariadb est lié au conteneur wordpress.
Si Watchtower trouve une mise à jour pour le conteneur « wordpress », il arrêtera d'abord le conteneur lié c'est-à-dire « mariadb », puis arrêtera le conteneur wordpress.
Après la mise à jour du conteneur WordPress, Watchtower redémarrera les deux conteneurs dans le bon ordre avec les mêmes options qui ont été utilisées lors de leur déploiement initial, afin que l'application redémarre correctement. Dans notre cas, le conteneur MariaDB sera démarré en premier, suivi du conteneur WordPress pour garantir que le lien continue de fonctionner.
Surveiller un conteneur spécifique
Par défaut, Watchtower surveillera tous les conteneurs Docker en cours d'exécution dans le démon Docker auquel il est dirigé.
Cependant, vous pouvez limiter watchtower pour surveiller un conteneur Docker particulier en spécifiant le nom du conteneur comme indiqué ci-dessous.
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower ostechnix-wordpress-1Dans l'exemple ci-dessus, watchtower ne surveillera que le conteneur nommé « ostechnix-wordpress-1 » pour les mises à jour, et les autres conteneurs en cours d'exécution seront ignorés.
Si vous ne spécifiez aucun argument, watchtower surveillera alors tous les conteneurs Docker en cours d'exécution comme d'habitude.
Envoi de notifications
Vous pourriez vouloir recevoir une notification chaque fois que les conteneurs sont mis à jour. Vous pouvez envoyer des notifications par Email, Slack, MSTeams et Gotify, etc.
L'exemple suivant montre comment envoyer une notification par e-mail. Je suppose que vous avez déjà configuré un serveur SMTP.
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS=email \
-e WATCHTOWER_NOTIFICATION_EMAIL_FROM=fromaddress@gmail.com \
-e WATCHTOWER_NOTIFICATION_EMAIL_TO=toaddress@gmail.com \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=fromaddress@gmail.com \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=app_password \
-e WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2 \
containrrr/watchtowerPour plus de détails, consultez le dépôt GitHub de Watchtower et les liens du site officiel de Watchtower fournis ci-dessous.
Ressources :
- Watchtower GitHub
- Site Web de la Tour de Garde
Téléchargement recommandé - eBook gratuit : "Docker Containerization Cookbook"
Lecture recommandée :
- Commencer avec Docker
- ctop – Un outil de surveillance en ligne de commande pour les conteneurs Linux
- Dockly - Gérer les conteneurs Docker depuis le terminal
- Portainer – La façon la plus simple de gérer Docker
- PiCluster - Une application simple de gestion de Docker basée sur le web

