Raspberry Pi – Docker Container aktualisieren – kinderleicht mit Watchtower
Irgendwann wirst du dir die Frage stellen, wie du deine ganzen Docker Container aktualisieren kannst, ohne ständig selbst dran denken und alles manuell machen zu müssen. Aber auch für dieses Problem gibt es eine einfache und geniale Lösung.
DarkWolfCave.de
Denn mit Watchtower wird dieser Prozess automatisiert und du kannst dich sogar benachrichtigen lassen, sobald es Updates gibt oder diese durchgeführt wurden.
Docker Container aktualisieren und per Discord benachrichtigen – Das Video
Kurzes Video wie du Docker Container aktualisieren und dich per Discord benachrichtigen lassen kannst
Sie sehen gerade einen Platzhalterinhalt von YouTube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenDocker Container aktualisieren mit Watchtower – Was brauchen wir?
Bei mir läuft alles wie immer auf einem meiner Raspberry´s. Aktuell sind diese sogar wieder recht günstig und vorrätig zu beziehen (Stand 01.08.2023).
Weiterhin gehe ich davon aus, dass du bereits Docker installiert hast und dort einige Container vorhanden sind.
Praktisch und äußerst hilfreich wäre auch Portainer. Denn hiermit kannst du alle deine Docker-Container einfach und genial in einer GUI verwalten. Kennst du noch nicht? Dann schaue schnell in meinem Artikel dazu nach.
Was uns jetzt noch fehlt, ist Watchtower, dieses werden wir natürlich auch als einen Container bereitstellen.
Du wirst hier einen groben Überblick finden.
Allerdings biete ich dir auch noch etwas mehr Support an:
- Du benötigst persönlichen Support
- Du möchtest von Beginn an Unterstützung bei deinem Projekt
- Du möchtest ein hier vorgestelltes Plugin durch mich installieren und einrichten lassen
- Du würdest gerne ein von mir erstelltes Script etwas mehr an deine Bedürfnisse anpassen
Für diese Punkte und noch einiges mehr habe ich einen limitierten
VIP-Patreon Tarif
eingerichtet. Falls er dir dort zurzeit nicht angeboten wird,
kontaktiere mich bitte über Discord und wir finden eine Lösung!
Watchtower – Einfach und genial
Was macht Watchtower eigentlich? Na ganz einfach ausgedrückt: Es prüft, in von dir festgelegten Abständen, ob es für deine Container neue Versionen gibt. Darüber kannst du dich zum Beispiel über E-Mail oder Discord informieren lassen oder auch direkt automatisch die neue Version aufspielen.
So verpasst du nie neue Sicherheitsupdates und bist immer auf dem neuesten Stand.
Watchtower – die Container Installation über Portainer
Wie anfangs bereits erwähnt, nutze ich Portainer, um meine Container zu verwalten. Daher zeige ich dir jetzt anhand dieses Tools, wie du Watchtower hinzufügen und konfigurieren kannst.
Logge dich auf die Portainer-Web-GUI ein: https://IP-Adresse:9443/ und klicke auf “Containers” danach auf “ADD Container“
Hier kannst du jetzt diverse Einstellungen vornehmen. Da Watchtower sehr simpel ist, benötigen wir nicht wirklich viel und können auch keine Console erreichen. Daher ändern wir dort in diesem Fall nichts weiter. Lediglich bei ENV werden wir ein paar Variablen hinzufügen.
- Name: Watchtower
- Image: containrrr/watchtower
Reiter Volumes
Hier verbinden wir den inneren Pfad im Container: /var/run/docker.sock mit unserem Hostsystem /var/run/docker.sock.
Außerdem hätten wir gerne “unsere” Zeitzone innerhalb des Containers. Dies erreichen wir indem /etc/localtime mit /etc/localtime verbunden wird. Hier reicht dann auch Read-only:
Reiter ENV
Hier aktivieren wir den “Advanced Mode“
In dem nun erscheinenden Textfeld fügen wir einige Parameter / Variablen hinzu:
WATCHTOWER_NOTIFICATIONS_LEVEL=info WATCHTOWER_MONITOR_ONLY=true WATCHTOWER_POLL_INTERVAL=86400 WATCHTOWER_CLEANUP=true WATCHTOWER_INCLUDE_STOPPED=true WATCHTOWER_NO_STARTUP_MESSAGE=true
Kurze Erklärung zu den Optionen. Falls du mehr da drüber wissen möchtest, findest du eine sehr gute Dokumentation hier.
- WATCHTOWER_MONITOR_ONLY – mit true geben wir an, dass wir nur informiert werden möchten sobald es ein Update gibt. Dieses wird aber nicht automatisch ausgeführt.
- WATCHTOWER_POLL_INTERVAL – Dieser Wert steuert, wie oft Watchtower nach neuen Builds / Updates sucht. Angabe in Sekunden, hier: 86400 Sekunden = 24 Stunden.
- WATCHTOWER_CLEANUP – mit true werden alte Images nach der Aktualisierung entfernt.
- WATCHTOWER_INCLUDE_STOPPED – mit true werden auch nur erstellte und angehaltene Container geprüft/aktualisiert
- WATCHTOWER_NO_STARTUP_MESSAGE – mit true verhindern wir die Benachrichtigung beim Start von Watchtower.
Als letztes setzen wir noch bei Restart policy den Wert auf always. So stellen wir sicher, dass auch nach einem Crash des Hosts Watchtower wieder startet und seine Arbeit aufnimmt.
Final deployen wir unseren Container.
Jetzt sollten wir im Log sehen, dass Watchtower beginnt unsere Container auf Updates zu prüfen.
Mit den oben genannten Einstellungen erfolgt die erste Prüfung nach 24 Stunden und es wird lediglich im Log ausgegeben dass es etwas zum Update gibt.
Eine automatische Aktualisierung erfolgt NICHT.
Alternative Parameter zum Docker Container aktualisieren
In dem bisherigen Beispiel passiert nicht wirklich viel. Watchtower arbeitet zwar und schreibt auch in den Logs falls es einen neuen Build gibt, allerdings wäre es sehr mühsam jetzt jeden Tag selbst dort nachzusehen.
Wie du Watchtower jetzt dazu bringen kannst deine Docker Container zu aktualisieren, zeige ich dir anhand anderer Konfigurationen, die du dann beim Erstellen deines Watchtower-Containers anpassen musst.
Automatische Docker Container Aktualisierung
Einfach die ENV Variablen über Portainer wie weiter oben beschrieben ändern.
Hiermit wird für alle Container alle 24 Stunden (beginnend ab Start des Containers) geprüft ob es ein neues Build gibt und dieses direkt aktualisiert:
WATCHTOWER_NOTIFICATIONS_LEVEL=info WATCHTOWER_MONITOR_ONLY=false WATCHTOWER_POLL_INTERVAL=86400 WATCHTOWER_CLEANUP=true WATCHTOWER_INCLUDE_STOPPED=true WATCHTOWER_NO_STARTUP_MESSAGE=false WATCHTOWER_ROLLING_RESTART=true
Docker Container Aktualisierung zur bestimmten Zeit
Möchtest du, dass die Prüfung und die Updates immer zu einer bestimmten Uhrzeit erfolgen soll, tauschen wir einfach den INTERVALL gegen SCHEDULE aus.
Hier können wir nach Crontab-Standard die Zeit genau planen. Allerdings mit einem Unterschied, Crontab nutzt 5 Stellen hier werden 6 benötigt:
Seconds | Minutes | Hours | Day of month | Month | Day of week |
Sekunden | Minuten | Stunde | Tag (bezogen auf Monat) | Monat | Tag (bezogen auf Woche) |
0-59 * / , – | 0-59 * / , – | 0-23 * / , – | 1-31 * / , – ? | 1-12 JAN-DEC * / , – | 0-6 SUN-SAT * / , – ? |
Wenn du mehr über das Format bzw die Parameter erfahren möchtest, empfehle ich dir die Beschreibung auf dieser Seite anzuschauen.
Als Beispiel soll Watchtower jede Nacht um 1 Uhr prüfen und aktualisieren:
WATCHTOWER_NOTIFICATIONS_LEVEL=info WATCHTOWER_MONITOR_ONLY=false WATCHTOWER_CLEANUP=true WATCHTOWER_INCLUDE_STOPPED=true WATCHTOWER_NO_STARTUP_MESSAGE=false WATCHTOWER_ROLLING_RESTART=true WATCHTOWER_SCHEDULE=0 0 1 * * *
Docker Container Aktualisierung nur für bestimmte Container
Es gibt immer mal Situationen und Container wo man nicht möchte dass sich diese automatisch aktualisieren. Und auch hier ist Watchtower so genial, dass wir entscheiden können welche automatisiert erneuert werden sollen und welche wir uns lieber manuell anschauen wollen.
Geregelt wird dies über die sogenannten “Flags”.
Über die ENV Variable WATCHTOWER_LABEL_ENABLE schalten wir mit true ein, dass nur noch gelabelte Container aktualisiert werden.
Dazu müssen wir dann natürlich die entsprechenden Container labeln.
Über Portainer geht dies auch recht schnell, öffne deinen Container und wähle Duplicate/Edit aus damit du über den Reiter LABELS einen neuen hinzufügen kannst. Einfach auf ADD LABEL klicken, dann als namen: com.centurylinklabs.watchtower.enable und als value: true eintragen. Deploy und dein Container ist gelabelt.
Deinem Watchtower Container musst du dann nur noch WATCHTOWER_LABEL_ENABLE=true hinzufügen und es werden dann nur noch Container mit dem entsprechenden Label erneuert.
WATCHTOWER_LABEL_ENABLE=true WATCHTOWER_NOTIFICATIONS_LEVEL=info WATCHTOWER_MONITOR_ONLY=false WATCHTOWER_CLEANUP=true WATCHTOWER_INCLUDE_STOPPED=true WATCHTOWER_NO_STARTUP_MESSAGE=false WATCHTOWER_ROLLING_RESTART=true WATCHTOWER_SCHEDULE=0 0 1 * * *
Discord Benachrichtigung
Wir können uns auch benachrichtigen lassen sobald es ein neues Build/Update für einen Docker Container gibt. Hier gibt es viele verschiedene Möglichkeiten wie zum Beispiel per E-mail, Slack, Teams, Discord usw.
Ich zeige dir heute wie du solche Benachrichtigungen auf deinem Discord in einem eigenen Bereich erhalten kannst. Somit siehst auch nur du diese Mitteilungen und nicht deine ganze Community.
Vorbereitungen für eine Discord Benachrichtigung
Du benötigst einen neuen, privaten Kanal sowie einen Webhook.
Logge dich also in deinem Discord ein, klicke auf deinen ServerNamen (Dropdown) und wähle Kanal erstellen:
Als nächstes vergibst du einen Namen, wählst Text und stellst um auf Privater Kanal:
Den Punkt Mitglieder und Rollen hinzufügen kannst du überspringen.
Öffne die Einstellungen (Zahnrad) bei deinem gerade erstellten Kanal und klicke dann auf Integration.
Hier sieht du den Bereich “WebHook” – klicke auf WebHook erstellen:
Herzlichen Glückwunsch, du hast jetzt deinen eigenen WebHook. Der Name wird zufällig von Discord gewählt, du kannst ihn aber ändern:
Betätige nun den Button WebHook-URL kopieren und speichere ihn in einer Textdatei.
Wir benötigen die ID sowie den Token aus der URL.
Nach …/api/webhooks/ kommt deine ID und nach dem nächsten / der Token:
Diese Werte müssen wir jetzt in eine ENV Variable packen.
Nach dem discord:// kommt erst der Token, dann ein @ und danach deine ID.
Da die Nachrichten über shoutrrr (welches mit Watchtower schon mitkommt) gesendet werden, brauchen wir zwei neue Variablen. Ansonsten ist der Rest wie im ersten Beispiel. Es wird nichts aktualisiert, sondern du wirst nur informiert. Und das alle 24 Stunden nach dem Start des Containers. Damit du aber direkt siehst, dass du eine Benachrichtigung in Discord erhältst, ändern wir den Intervall auf 2 Minuten (120) und lassen uns auch die StartupMessage (false) anzeigen
Im Live-Betrieb solltest du dies entsprechend anpassen:
WATCHTOWER_NOTIFICATIONS=shoutrrr WATCHTOWER_NOTIFICATION_URL=discord://NO-HJ********F82s@376********73 WATCHTOWER_NOTIFICATIONS_LEVEL=info WATCHTOWER_MONITOR_ONLY=true WATCHTOWER_POLL_INTERVAL=120 WATCHTOWER_CLEANUP=true WATCHTOWER_INCLUDE_STOPPED=true WATCHTOWER_NO_STARTUP_MESSAGE=false
Du kannst mit deinem Webhook und den beiden Variablen auch die anderen Beispiele entsprechend ergänzen und somit überall Benachrichtigungen erhalten.
Falls du mehr über Docker wissen möchtest, dann findest du bei mir weitere Berichte, oder durchforste das Internet. Außerdem kann ich folgendes Buch sehr empfehlen: