Es kann sehr nervig seine eigene kleine Docker-Infrastruktur stets aktuell zu halten. Man muss händisch alle aktiven Images pullen, die laufenden Container stoppen, löschen und wieder starten. Eine sehr monotone - und dadurch sicherlich auch fehleranfällige - Arbeit. Eine einfache Möglichkeit diese Arbeit zu automatisieren ist die Verwendung von Watchtower.
Watchtower kommt selbstverständlich ebenfalls als Docker-Image daher und braucht lediglich Zugriff auf den Docker-Socket des Hosts:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
Watchtower prüft dann periodisch für jeden laufenden Container die Docker-Registry auf neue Versionen des jeweiligen Images. Ist eine neue Version vorhanden, wird das Image aktualisiert und der Container mit diesem neugestartet.
Container selektieren
Per Default überwacht Watchtower alle laufende Container. Möchte man jedoch kontrollieren, ob ein Container automatisch aktualisiert wird, kann mit der --label-enable
-Flag die automatische Aktualisierung aller Container deaktiviert werden.
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --label-enable
Es werden nun nur noch Container mit com.centurylinklabs.watchtower.enable=true
-Label überwacht:
docker run -d \
--label=com.centurylinklabs.watchtower.enable=true \
hello-world
Weitere Features
Zusätzlich zu den "Core"-Features lassen sich bspw. Notifications einrichten, die getriggert werden, wenn für ein Image eine neue Version vorliegt. Dies kann sinnvoll sein, wenn man nicht möchte, dass Watchtower die Images und Container automatisch aktualisiert. So konfiguriert man Watchtower im "Monitor Only"-Mode, lässt sich bei einem möglichen Update informieren und legt dann wieder selbst Hand an.
Auch die Nutzung von privaten Registries sind kein Problem und werden out-of-the-box unterstützt.
Weitere Features und Konfigurationsmöglichkeiten können der Dokumentation entnommen werden.
Fazit
Sicherlich ist Watchtower nicht die eleganteste und enterprise-igste Lösung für das gegebene Problem, aber es ist eine sehr einfache und das ist manchmal halt auch vollkommen ausreichend.
(Titelbild von Alejandro Pinto)