Présentation

La mise à jour des conteneurs Docker est une partie fondamentale de tout déploiement de production, mais elle devient souvent une tâche fastidieuse. Le suivi manuel des mises à jour, la mise à jour des fichiers, l'arrêt des fichiers et leur redémarrage ne sont pas seulement longs, mais aussi sujets à des erreurs, surtout lorsqu'il s'agit de gérer des dizaines ou des centaines de conteneurs sur plusieurs hôtes. Un patch de sécurité oublié ou une mise à jour oubliée peut laisser votre infrastructure exposée à des vulnérabilités connues. Heureusement, il existe une solution robuste qui automatise tout ce flux de travail : La Tour de Garde.

Qu'est - ce que La Tour de Garde?

La Tour de Garde est un utilitaire léger et open source qui met automatiquement à jour les conteneurs Docker chaque fois que leurs images de base sont rafraîchies dans un registre. Développé et entretenu par la communauté (GitHub reserve), il fonctionne comme un conteneur Docker lui-même et surveille vos autres conteneurs en cours d'exécution (ou ceux sélectionnés) pour des changements.

Comment fonctionne La Tour de Garde

Par défaut, la Tour de Garde communique avec le démon Docker par l'intermédiaire de la prise Docker (). Par défaut, elle scanne tous les conteneurs en cours d'exécution sur l'hôte, mais vous pouvez le limiter à des conteneurs spécifiques en utilisant des étiquettes ou des noms de conteneurs. Elle vérifie les mises à jour à un intervalle configurable (la valeur par défaut est toutes les 24 heures). Lorsqu'un nouveau digest d'image diffère de celui en cours d'exécution, La Tour de Garde tire l'image et effectue un redémarrage contrôlé.

Principaux avantages des mises à jour automatiques avec La Tour de Garde

Sécurité renforcée

La sécurité est le principal pilote pour les mises à jour de conteneur. Les images Docker sont reconstruites régulièrement pour corriger les vulnérabilités dans les paquets OS de base (par exemple, Alpine, Ubuntu) ou les dépendances de l'application. Un conteneur utilisant une image périmée peut contenir des vulnérabilités et des expositions courantes connues (CVE). La Tour de Garde veille à ce que dès qu'une image patchée est publiée, votre conteneur soit mis à jour en conséquence.

Efficacité opérationnelle

Dans les environnements où des dizaines ou des centaines de conteneurs sont utilisés, ces frais généraux ne sont plus viables. La Tour de Garde élimine le besoin d'intervention manuelle, libérant votre équipe de se concentrer sur le développement de fonctionnalités, le suivi et d'autres tâches de grande valeur. Elle réduit également le risque d'erreur humaine, comme oublier de redémarrer un conteneur après avoir tiré une image, ce qui peut entraîner une dérive de configuration ou des lacunes de sécurité.

Cohérence dans les milieux

La Tour de Garde peut être déployée dans des environnements de développement, de mise en scène et de production avec une configuration identique. Cela garantit que tous les environnements fonctionnent les mêmes versions d'image, réduisant ainsi les problèmes de ma machine. Lors de la mise en scène, vous pouvez mettre à jour les conteneurs dès que de nouvelles images sont poussées, puis valider la fonctionnalité avant que les mêmes images atteignent la production.

Réduction des frais généraux administratifs

Une fois que Watchtower est configuré, il fonctionne sans surveillance. Vous n'avez plus besoin de planifier des fenêtres d'entretien régulières pour mettre à jour les conteneurs, ni de scripter des routines de mise à jour complexes. Les journaux et les notifications fournissent une piste d'audit claire sur le moment où les mises à jour se sont produites et si elles ont réussi.

Mise en place de la Tour de Garde

Déployer La Tour de Garde est simple. L'approche recommandée est de l'exécuter comme un conteneur Docker avec un support de liaison à la prise Docker. Ci-dessous est un guide étape par étape.

Préalables

  • Docker installé sur la machine hôte (Docker Engine 19.03 ou ultérieure recommandée).
  • Accès réseau aux registres d'images Docker où vos images de conteneurs sont stockées (Docker Hub, registres privés, etc.).
  • Connaissance de base de Docker CLI ou Docker Compose.

Déploiement de base avec Docker CLI

  1. Remplir l'image de La Tour de Garde:
  2. Run La Tour de Garde comme un service de fond:[


    Cela commence par la Tour de Garde avec des paramètres par défaut.
  3. Vérifier que le système fonctionne:

Déploiement avec Docker Compose

Pour une meilleure gestion, surtout en production, utilisez Docker Compose. Créez un fichier :

version: '3.8'
services:
 watchtower:
 image: containrrr/watchtower
 container_name: watchtower
 restart: unless-stopped
 volumes:
 - /var/run/docker.sock:/var/run/docker.sock
 environment:
 - WATCHTOWER_POLL_INTERVAL=3600 # check every hour
 - WATCHTOWER_CLEANUP=true # remove old images after update
 logging:
 driver: json-file
 options:
 max-size: 10m
 max-file: 3

Exécutez pour démarrer La Tour de Garde. La variable d'environnement définit la fréquence de vérification en secondes. La mise en place de signifie La Tour de Garde vérifie les mises à jour toutes les heures, assurant des mises à jour rapides sans charge excessive sur le registre ou le démon Docker.

Options de configuration

La Tour de Garde est hautement configurable via les variables d'environnement et les drapeaux en ligne de commande.

Intervalle de scrutin

Utilisez le drapeau (ou variable d'environnement) pour définir la fréquence des vérifications de mises à jour de La Tour de Garde. La valeur par défaut est 86400 secondes (24 heures). Pour le développement ou les déploiements rapides, vous pouvez définir un intervalle plus court comme 300 (5 minutes).

Nettoyage des vieilles images

Le drapeau (ou ) supprime l'image précédente après une mise à jour réussie. Cela libère l'espace disque, particulièrement lorsque les images sont mises à jour fréquemment. Sans nettoyage, les couches d'image inutilisées s'accumulent et consomment le stockage.

Notifications

Les canaux de notification pris en charge comprennent les courriels (SMTP), Slack, Microsoft Teams, Telegram, etc. Configurez-les par des variables d'environnement telles que ou . Par exemple, pour envoyer des notifications Slack :

docker run -d \
 --name watchtower \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -e WATCHTOWER_NOTIFICATIONS=slack \
 -e WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://hooks.slack.com/services/Txxx/Bxxx/xxx \
 containrrr/watchtower

Les notifications vous aident à suivre l'activité de mise à jour sans examiner manuellement les journaux.

Filtrage des conteneurs

Pour limiter les mises à jour de chaque contenant, utilisez le drapeau combiné avec une étiquette Docker. Ajoutez une étiquette aux contenants que vous voulez mettre à jour. Ou, passez les noms de contenants comme arguments à la commande exécuter. Par exemple, pour mettre à jour uniquement les contenants nommés et :

docker run -d \
 --name watchtower \
 -v /var/run/docker.sock:/var/run/docker.sock \
 containrrr/watchtower nginx postgres

Surveillance des registres de verbes

Activer la logage de débogage avec ou pour voir des informations détaillées sur les actions de La Tour de Garde. Ceci est utile lors de la configuration initiale pour vérifier que les mises à jour sont détectées et appliquées correctement.

Cas d'utilisation avancée

Mise à jour des conteneurs des registres privés

Si vos images résident dans un registre privé (par exemple, AWS ECR, Azure Container Registry, ou un port auto-installé), La Tour de Garde a besoin d'authentification. Vous pouvez monter le fichier de configuration Docker ou utiliser des variables d'environnement. La méthode la plus simple est de vous connecter au registre sur l'hôte en utilisant , qui stocke les identifiants dans .

docker run -d \
 --name watchtower \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v /root/.docker/config.json:/config.json \
 containrrr/watchtower

Alternativement, utilisez des secrets Docker ou des variables d'environnement pour une gestion plus sûre des titres de compétence (voir la documentation officielle de la Tour de Garde .

Mises à jour sur les services publics

Pour les conteneurs de qualité (bases de données, caches), les mises à jour automatiques peuvent être risquées car les mises à jour d'images peuvent introduire des changements de schéma de rupture. La Tour de Garde ne gère pas la migration des données. Une meilleure pratique est de not activer les mises à jour automatiques pour les conteneurs de qualité.

Combiner avec les pipelines CI/CD

La Tour de Garde s'intègre bien dans un flux de travail GitOps ou CI/CD. Par exemple, après une construction réussie, votre pipeline peut pousser une nouvelle image vers un registre. La Tour de Garde, avec un court intervalle de sondage (par exemple, 60 secondes), détectera le changement et mettra à jour le conteneur en quelques minutes. Cela crée une boucle de déploiement continue sans couture sans scripts personnalisés.

Meilleures pratiques

  • Utilisez d'abord les environnements de mise en scène: Déployez La Tour de Garde dans un environnement de non-production et surveillez les mises à jour pendant quelques jours pour ne pas assurer un comportement inattendu.
  • Activer les notifications:[ Configurez Slack, e-mail ou autres alertes afin que votre équipe soit immédiatement au courant des mises à jour et des éventuelles défaillances.
  • Combinez avec les contrôles de santé: Assurez-vous que vos conteneurs définissent les contrôles de santé. La Tour de Garde attend qu'ils passent après le redémarrage, ce qui empêche le trafic vers les conteneurs qui n'ont pas complètement commencé.
  • Utilisez le drapeau avec beaucoup de prudence: Nettoyer les anciennes images permet d'économiser de l'espace disque, mais dans certains environnements, garder l'image précédente permet un retour rapide. Vous pouvez coupler le nettoyage avec une stratégie de sauvegarde séparée pour les couches d'image.
  • Espace disque de moniteur:[ Même avec le nettoyage, les mises à jour de grande image peuvent temporairement consommer de l'espace supplémentaire pendant la traction.
  • Regularly review logs: Vérifiez périodiquement les logs de La Tour de Garde () pour confirmer que les mises à jour se produisent comme prévu.
  • Mise à jour de La Tour de Garde elle-même: La Tour de Garde peut se mettre à jour si vous incluez son conteneur dans le jeu surveillé (par défaut, elle le fait elle-même).
  • Pour une sécurité accrue, configurez Docker Content Trust pour ne lancer que des images signées. La Tour de Garde respecte ceci en tirant seulement des images de confiance.

Pièges potentiels et comment les éviter

Briser les changements dans les images en amont

Le plus grand risque est une image mise à jour introduisant un changement incompatible – comme une nouvelle configuration par défaut ou un paramètre API déprécié – qui fait échouer votre application. Atténuation : utilisez le filtrage d'étiquette pour exclure les conteneurs qui sont étroitement couplés à des versions d'image spécifiques, ou pins les versions d'image de base dans vos fichiers Docker (par exemple, ] au lieu de ) et mettez-les à jour consciemment.

Contraintes zéro-downtime

La Tour de Garde redémarre un conteneur en l'arrêtant puis en commençant la nouvelle version. Cela provoque une brève période d'indisponibilité à moins que vous n'exécutiez plusieurs répliques derrière un équilibreur de charge. Pour les services de haute disponibilité, envisager d'utiliser Docker Swarm ou Kubernetes avec des stratégies de mise à jour en continu, et configurer La Tour de Garde pour mettre à jour seulement les répliques une à la fois (bien que La Tour de Garde ne gère pas cela nativement; vous pouvez utiliser des outils d'orchestration à la place).

Questions relatives à la permission

La Tour de Garde exige l'accès à la prise Docker, qui confère un contrôle efficace au niveau de la racine sur Docker. C'est une préoccupation de sécurité. Exécutez La Tour de Garde uniquement sur les hôtes de confiance et envisagez d'utiliser un utilisateur dédié avec des capacités limitées.

Limites des taux d'inscription

Les sondages fréquents (par exemple, toutes les quelques minutes) peuvent atteindre des limites de taux sur Docker Hub ou d'autres registres, en particulier pour les utilisateurs anonymes. Authentifier pour éviter des limites plus strictes, et fixer un intervalle de scrutin raisonnable (par exemple, 3600 secondes) pour rester dans les quotas. Docker Hub , niveau libre permet 100 tirages par six heures pour les utilisateurs authentifiés, ce qui est généralement suffisant pour un nombre modéré de conteneurs.

Conclusion

En automatisant les mises à jour avec La Tour de Garde, vous gagnez en sécurité, en cohérence et en efficacité, tout en réduisant le fardeau opérationnel. L'outil est mature, bien documenté ( site officiel), et largement adopté dans la communauté Docker. Que vous exécutiez une poignée de conteneurs sur un seul hôte ou une grande flotte sur plusieurs serveurs, La Tour de Garde est un ajout puissant à votre chaîne d'outils d'infrastructure. Commencez par un déploiement attentif, intégrer les notifications et toujours valider dans la mise en scène avant l'adoption complète de la production. Avec ces précautions, vous pouvez laisser La Tour de Garde garder vos conteneurs à jour – et concentrer votre énergie sur la construction de grandes applications.

Pour plus de renseignements sur les meilleures pratiques en matière de sécurité de Docker, consultez Docker est une documentation officielle en matière de sécurité et OWASP=S Docker Security Cheat Sheet