Automatische Aktualisierung von Docker-Containern einrichten

Automatische Aktualisierung von Docker-Containern einrichten

Docker ist (fast) nicht mehr aus der Entwicklungs- und Hosting-Welt wegzudenken. Eine Docker-Datei ist schnell erstellt und auf Hunderten von Servern ausgerollt. Aber was ist zu tun, wenn ein Update durchgeführt werden muss?

Die traurige Wahrheit:
Container werden vergessen

Häufig wird ein Container gestartet, der dann läuft und und jahrelang nicht mehr angerührt wird. Dieses Verhalten führt dazu, dass Funkions-Updates die eigentlichen Nutzer nicht mehr erreichen. Außerdem kann es zu potenziellen Sicherheitsschwachstellen führen, wenn beispielsweise ein Webserver jahrelang ohne Patches betrieben wird.

Der unschöne Weg, Updates zu installieren

Idealerweise gibt es auch für die Aktualisierung eine Automatisierung. Oft werden jedoch Container unschön händisch auf die neuesten Versionen gehoben.

docker stop …
docker rm …
docker pull …
docker run …

Automatisierung von unnötigen Aufgaben

Um jeglicher Art von Problemen vorzubeugen, sollte in Zyklen die Version der Container mit der neuesten Version des jeweiligen Containers in der Container Registry verglichen werden.

Das Github-Projekt Watchtower kann Docker-Container auf dem lokalen oder einem entfernten Host beobachten und alle Aufgaben der Aktualisierung übernehmen. Watchtower lädt das neue Image herunter, erstellt auf dessen Basis einen neuen Container, übernimmt die Konfigurationsoptionen und Daten des veralteten Containers und stellt den Container in der aktuellsten Version wieder bereit.

Watchtower konfigurieren

Watchtower kann unterschiedlich konfiguriert werden. Zum einen können Container einzeln definiert werden. Anderenfalls werden alle Container insgesamt auf den aktuellen Stand gebracht.

Vorbereitungen

Zunächst musst du dich mit dem Root-Benutzer am Docker-Host anmelden. Sollte Docker unter einem gesonderten Benutzer laufen, so musst du dich mit diesem Benutzer anmelden.

Alle Container aktualisieren

Den Watchtower Docker-Container erstellt du am besten über Docker-Compose. Nachfolgend findest du den Compose-Code:

watchtower:
    image: v2tec/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker/config.json:/config.json
    command: --interval 30
    restart: unless-stopped

Hinweis: Mit dem Befehl „–interval <time>“ legst du den Zyklus fest, in dem Watchtower nach neuen Images sucht. In obigem Beispiel erfolgt die Überprüfung alle 30 Minuten.

Selektiv Container aktualisieren

Wie oben beschrieben kann auch eingestellt werden, dass nur für bestimmte Container die Aktualisierung durchgeführt werden soll. Die dafür notwendigen Änderungen sind überschaubar. Auch hierfür steht nachfolgend ein Compose-Code bereit.

watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker/config.json:/config.json
    command: watchtower pihole plex nextcloud proxy --interval 30
    restart: unless-stopped

Watchtower in Aktion

Direkt nach dem Start beginnt Watchtower mit der Arbeit. Bereits nach wenigen Sekunden werden die ersten Einträge in den Log des Containers geschrieben und die Aktualisierungen durchgeführt. Der eigentliche Update-Prozess dauert nur einen kurzen Moment. Meist liegt die Downtime unter fünf Sekunden.