Mettre à jour automatiquement les conteneurs Docker avec Watchtower sur Ubuntu

mettre à jour conteneurs docker automatiquement watchtower

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 Docker
  • containrrr/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 notification
  • WATCHTOWER_EMAIL_TO – L’adresse à laquelle envoyer les notifications
  • WATCHTOWER_EMAIL_SERVER – Adresse du serveur SMTP
  • WATCHTOWER_EMAIL_SERVER_PORT – Port du serveur SMTP
  • WATCHTOWER_EMAIL_SERVER_USER – Nom d’utilisateur SMTP
  • WATCHTOWER_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 Slack
  • WATCHTOWER_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 !

Laisser un commentaire