Die eigenen Docker Container händisch zu aktualisieren ist eine nervige Aufgabe. Vorallem aber um Sicherheitsupates zu erhalten, sollte immer stets das aktuellste Docker Image verwendet werden. Um diesen Prozess zu automatisieren, gibt es ein Docker Image, welches laufende Container immer auf dem neusten Stand hält. Das Image, um das es geht, nennt sich Watchtower.
Inhaltsverzeichnis
Was ist Watchtower?
Watchtower ist ein Docker Image, welches in einem vorgegebenen Intervall oder zu bestimmten Zeiten laufende Docker Container automatisch aktualisieren kann. Der Docker Watchtower wacht über die anderen Container, aktualisiert diese und startet sie ordnungsgemäß neu. Dabei werden die Container stets wieder mit ihren ursprünglichen Optionen gestartet.
Watchtower installieren
Watchtower wird wie jeder andere Docker Container auch, über lediglich einen Kommandozeilenbefehl gestartet. Je nach Wunsch, kann dieser die anstehenden Updates zu bestimmten Zeiten durchführen.
Alle Container zu festem Zeitpunkt aktualisieren
Sollen die laufenden Container sich nur zu einer bestimmten Uhrzeit updaten (da ein Container-Update immer einen kurzen Ausfall verursacht), muss die Zeit mit einem Cron Ausdruck angegeben werden. Wer sich nicht mit Cron auskennt, findet auf crontab.guru eine Hilfe zum generieren.
-v /etc/localtime:/etc/localtime:ro lässt Watchtower die Zeitzone des Host-Systems nutzen.
–cleanup löscht das alte Image nach einem erfolgreichen Update.
–rolling-restart sorgt für einen schnelleren Neustart der Container.
-s gibt die Zeit als Cron an.
docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/localtime:/etc/localtime:ro \
containrrr/watchtower \
--cleanup \
--rolling-restart \
-s "0 4 * * *"
In diesem Beispiel würde Watchtower alle Container, für die Updates bereitstehen, jede Nacht um 04:00 aktualisieren.
Alle Container in einem Intervall aktualisieren
–cleanup löscht das alte Image nach einem erfolgreichen Update.
–rolling-restart sorgt für einen schnelleren Neustart der Container.
-i gibt den Intervall in Sekunden an.
docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--rolling-restart \
-i 14400
Dieses Beispiel würde die zu aktualisierenden Container alle 4 Stunden (14400 Sekunden) neustarten.
Benachrichtigungen bei aktualisierten Containern
Um sich nach einem erfolgten Update per E-Mail benachrichtigen zu lassen, kann man beim Start des Containers folgende Parameter zusätzlich mitgeben:
-e WATCHTOWER_NOTIFICATIONS=email \
-e WATCHTOWER_NOTIFICATION_EMAIL_FROM=absender@meinserver.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_TO=empfaenger@meinserver.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.meinserver.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=465 \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=absender@meinserver.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=meinGeheimesPasswort123 \
Diese Parameter packen wir in einem der vorherigen Beispiele hinter die Zeile -v /var/run/docker.sock:/var/run/docker.sock \. Der Watchtower meldet sich so per SMTP bei unserem E-Mail-Hoster an und versendet eine E-Mail mit der Update-Benachrichtigung.
Du kannst hier natürlich auch deinen eigenen Mailserver eintragen. Wie man sich einen einfachen, aber gut ausgestatteten Mailserver installiert, habe ich übrigens in meinem Beitrag Eigenen Mailserver mit Docker installieren erklärt.
Quellen