himpler.com himpler.com

Docker Container manuell updaten

2 Min.

Dieser Beitrag wurde seit einem Jahr nicht mehr aktualisiert. Im Internet ist das manchmal eine halbe Ewigkeit. Es kann daher sein, dass die Informationen und Links nicht mehr aktuell sind.

Heute geht’s um eine einfache Möglichkeit zur manuellen Aktualisierung von Docker Containern mit Docker Compose. Wer nicht auf automatisierte Lösungen (z.B. Watchtower) zum Updaten von Docker Containern zurückgreift, dem kann vielleicht ein kleines Shell-Script ein wenig Arbeit abnehmen.

Ausgangslage

Ich nutze Docker Compose zur einfachen Verwaltung von diversen Docker-Containern, die auf einem Raspberry Pi laufen. Während viele Container mittels Watchtower automatisch aktuell gehalten werden, möchte ich bei einigen Containern den Zeitpunkt des Updates selbst bestimmen. Gerade bei großen Versionssprüngen kann es zu so genannten Breaking Changes kommen, die eine Anpassung einer bislang funktionierenden Konfiguration notwendig machen.

Während die manuelle Aktualisierung auch über die GUI von Portainer durchgeführt werden kann, greife ich gerne mit SSH auf die Shell zu. Drei Befehle sorgen für die Aktualisierung eines einzelnen Containers im Stack, starten diesen neu und löschen nach Bestätigung einer Sicherheitsabfrage das alte Image.

Zeitersparnis durch Shell Script

Natürlich lassen sich die drei Befehle von Hand im Terminal ausführen, aber man kann das ganze ja auch leicht mit einem Shell-Script zusammenfassen. Dazu erstellt man die Datei update.sh im gleichen Verzeichnis wie die docker-compose.yml und fügt folgende Zeilen ein:

# update.sh
docker-compose pull $1
docker-compose up -d --build $1
docker image prune

Das kurze Script lädt zunächst das neue Image, erstellt dann den Container neu und räumt, sofern ihr die Sicherheitsabfrage am Ende mit Y bestätigt, zum Schluss auf.

Damit das Script ausgeführt werden kann, müssen noch einmalig die Rechte angepasst werden.

sudo chmod +x ./update.sh

Jetzt kann das manuelle Update eines Docker-Containers mit ./update.sh <containername> ausgeführt werden.

Das könnte dir auch gefallen