Dieses Tutorial ist VALID.

Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Unseren Docker-Stack per Skript updaten

So, unser System läuft und alles schnurrt vor sich hin. Gut :)
Allerdings wird ständig etwas verbessert und erweitert, dann gibt es Updates. Diese müssen wir natürlich – wenn möglich auch zeitnah – in unsere Images und Container einbauen.

Das ist ziemlich zäh, wenn wir das jedes Mal „per Hand“ machen sollen…
Aber dafür hab ich zum Glück auch zwei schöne Skripte am Start, die uns bei dieser Aufgabe unterstützen.

Mögliche Update-Szenarien

Was kann uns denn als Update ins Haus schneien? Da hätten wir grob drei Varianten, die wir unterscheiden müssen:

  • A) Update in einem Container, den wir nur geladen haben, wie php, traefik, phpMyAdmin und MariaDB.
  • B) Update in einer Anwendung, für die wir selber ein Image gebaut haben (WordPress, Matomo und Nextcloud).
  • C) Upgrades z.B. von php7.3 auf php7.4. Diese Thematik ist im „Docker Image Upgrade“ Artikel beschrieben…

Der Fall A) ist einfach: Hier lassen wir die Skripte laufen und brauchen nichts anpassen. Die neuen Container werden vom ersten Skript geladen und mit diesen dann die Images neu gebaut. Das zweite Skript startet / erneuert dann die laufenden Container.

Im Fall von B) müssen wir vor dem Ausführen der Skripte aber zwei Änderungen durchführen:

  • Im „Dockerfile“ der jeweiligen Anwendung muss die neue Versionsnummer eingetragen werden (und bei WordPress noch der Hash).
  • Im Skript muss ebenfalls die Versionsnummer angepasst werden.

Jetzt können wir das Skript laufen lassen.

Das Update Skript

nano ~/update-docker.sh

#!/bin/bash
### PHP Umgebung
docker pull php:7.4-apache

### phpMyAdmin
docker-compose -f /var/www/phpmyadmin/docker-compose.yml pull

### MariaDB
docker-compose -f ~/docker/maria104master/docker-compose.yml pull

### traefik
docker-compose -f ~/docker/traefik-v2/docker-compose.yml pull

### Build WORDPRESS
#docker pull wordpress:cli-php7.4
docker build -t wordpress-php74-apache:5.3.2 ~/docker/wordpress-php74-apache
docker tag wordpress-php74-apache:5.3.2 wordpress-php74-apache:latest

### Build MATOMO
docker build -t matomo-php74-apache:3.13.2 ~/docker/matomo-php74-apache
docker tag matomo-php74-apache:3.13.2 matomo-php74-apache:latest

### Build NEXTCLOUD
docker build -t nextcloud-php74-apache:18.0.0 ~/docker/nextcloud-php74-apache
docker tag nextcloud-php74-apache:18.0.0 nextcloud-php74-apache:latest

### Docker me up :)
echo
echo "Docker-Update durchgelaufen. Falls keine Fehler aufgetreten sind, jetzt mit './upup-docker.sh' die Container erneuern!"
echo
echo "Wenn die Container laufen (docker ps -a), die Reste der alten mit "docker system prune" säubern..."
echo
##EOF

Das Skript sollte uns bekannt vorkommen. In der Tat gibt es hier nichts neues zu sehen, sondern wir fassen nur kompakt alle Anweisungen zusammen, die wir für jede einzelne Anwendung seinerzeit separat ausgeführt haben.

Zeile 4-14: Wir ziehen die Container für die php-Umgebung, phpMyAdmin, traefik und mariaDB.
Zeile 16-27: Wir bauen die Images von WordPress, Matomo und Nextcloud. Die werden dann zum Beispiel mit der neuen php-Version gebaut, sollte sich die geändert haben. Zum Beispiel nach v7.4.1 auf v7.4.2.

Im Anschluss folgt der Hinweis, dass wir jetzt das zweite Skript starten können, falls beim Erstellen der Images keine Fehler aufgetreten sind.

„Container erneuern“ Skript

nano ~/upup-docker.sh

#!/bin/bash
### MariaDB 10.4 Master durchstarten
/usr/bin/docker-compose -f /root/docker/maria104master/docker-compose.yml up -d

### Traefik durchstarten
/usr/bin/docker-compose -f /root/docker/traefik-v2/docker-compose.yml up -d

### MATOMO Container durchstarten
/usr/bin/docker-compose -f /var/www/matomo/docker-compose.yml up -d

### Nextcloud Container durchstarten
/usr/bin/docker-compose -f /var/www/nextcloud/docker-compose.yml up -d

### Alle WORDPRESS Container durchstarten
/usr/bin/docker-compose -f /var/www/wordpress/docker-compose.yml up -d
#/usr/bin/docker-compose -f /var/www//docker-compose.yml up -d
#/usr/bin/docker-compose -f /var/www//docker-compose.yml up -d

##EOF

Das zweite Skript lädt alle Container neu. Wenn Docker Änderungen zu den bereits laufenden Containern feststellt, wird er den betreffenden Container neu aufbauen. Ansonsten bleibt er unverändert gestartet. MariaDB ist so ein Fall. Ohne Änderung läuft der einfach weiter. Ansonsten wird er neu aufgezogen.

Beim WordPress Teil hab ich schon ein paar mehr „Leerzeilen“ eingezogen, für kommende Container…

Skripte ausführen

Vor dem ersten Start müssen wir die Skripte – wie bei den Backup-Skripten – einmalig ausführbar machen. Das erledigt das „chmod“ Kommando.

Danach lassen wir beide Skripte laufen und schauen uns die Ausgabe an.

chmod 700 update-docker.sh && chmod 700 upup-docker.sh

### Na denn...
./update-docker.sh
./upup-docker.sh

Nachbehandlung

Sind beide Skripte gelaufen, sollten unsere Anwendungen auf dem neusten Stand sein.
Zeit, das Zimmer aufzuräumen…

Wichtig! Wir prüfen mit

docker ps -a

ob alle Container wirklich wieder laufen. Beendete Container werden sonst vom „docker system prune“ gekillt…

Bei „Status“ muss „Up“ stehen, nicht „exited“…

Schaut alles gut aus, wischen wir die Reste der Installation mit folgendem Befehl sauber:

docker system prune

Achtung: Das ist ein gefährlicher Befehl. Darum bitte, bitte wirklich nur ausführen, wenn unsere Container sauber laufen…

Dann schauen wir, was noch an obsoleten Images da ist:

docker images

REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
nextcloud-php74-apache   18.0.0              11abf36d636b        2 days ago          794MB
nextcloud-php74-apache   latest              11abf36d636b        2 days ago          794MB
matomo-php74-apache      3.13.2              22e9a8d70794        2 days ago          540MB
matomo-php74-apache      latest              22e9a8d70794        2 days ago          540MB
wordpress-php74-apache   5.3.2               59fc20479b2f        2 days ago          609MB
wordpress-php74-apache   latest              59fc20479b2f        2 days ago          609MB
php                      7.4-apache          96ffa6df365f        6 days ago          414MB
traefik                  v2.1                35ea6684fbc5        6 days ago          70.3MB
mariadb                  10.4                bc20d5f8d0fe        2 weeks ago         355MB
phpmyadmin/phpmyadmin    latest              c24a75debb40        2 weeks ago         469MB
php                      <none>              2378df7823c1        6 weeks ago         414MB

Gut, wir haben unseren vollen Stack am Laufen. Aber halt, da ist noch eine alte php-Version übrig, die wir wohl nicht mehr brauchen! Weg damit, die belegt nur unnötig Platz ;)

Der Befehl dazu lautet

### Syntax: docker rmi <id1> <id2>

docker rmi 2378df7823c1

Im Anschluss folgt eine kurze Liste mit gelöschten Teilabbildern und was uns das insgesamt an Plattenplatz eingespart hat.

Fazit

Updates sind mit Docker eigentlich schnell und einfach eingespielt. Wir sollten das möglichst zeitnah machen, wenn wir feststellen, dass es zu einer oder mehrerer unserer Anwendungen und „Unterlagen“ frische Updates gibt…

Anzeige *

6 Kommentare zu „Unseren Docker-Stack per Skript updaten“

  1. Also ich muss hier nochmal die Lanze brechen!
    Solange man deine Anleitungen nicht nur einfach rauskopiert sondern sich damit beschäftigt und sich gedanken darüber macht läuft das alles einwandfrei!

    Eben das update auf PHP 7.4.5 für die WordPress Images und des Nextcloud Image eingespielt. Und nach ein wenig nachdenken funktioniert das super. Danke dafür :-)

    Generell für diesen ganzen Blog ein riesen Danke. Kann man dir irgendwo einen Kaffee spenden? :-)

  2. …Wordpress wurde auf diese Weise nicht aktualisiert auf 5.4 – musste mich erst einloggen und es in WordPress anstoßen – dass hat geklappt.

    Nextcloud wurde auch nicht aktualisiert – ist aktuell lt Terminal! In Nextcloud selbst steht aber als Update 18.0.3 !

    Was mache ich falsch?

    Gruß Hardy

    1. Peter Fiedler

      Servus Hardy,
      zum Script – schick mir das bitte (am Besten beide) an fiedler@cpf.de, sonst kann ich nur raten, was da den Fehler wirft.

      Nextcloud ist da eine Besonderheit, da läuft das Update tatsächlich über den Container.
      WordPress und Matomo müssen wir trotzdem in der App updaten, also einloggen und „Update“ machen.

      In dem Tutorial geht es primär darum, die Container neu zu machen, falls sich an der darunterliegenden Apache/PHP Umgebung etwas ändert.
      Zum Beispiel gerade das neue php v7.4.5: Da lief der WordPress Container vorher mit 7.4.4 und nach dem Update dann mit der 7.4.5. Die Version von WordPress bleibt aber auf v5.4. Hier ging es nur um den Unterbau.

      Auch Traefik oder die MariaDB werden hin und wieder mit Updates versorgt. So bleibt unser Stack aktuell…

      Schönes Wochenende wünsche ich Dir!
      Peter.

  3. Hallo,
    also das 1 Script ist nach meinen individuellen Anpassungen durchgelaufen.
    Wenn ich das 2. Scipt starte kommt:

    ./upup-docker.sh: line 3: /usr/bin/docker-compose: No such file or directory
    ./upup-docker.sh: line 5: /usr/bin/docker-compose: No such file or directory
    ./upup-docker.sh: line 7: /usr/bin/docker-compose: No such file or directory
    ./upup-docker.sh: line 9: /usr/bin/docker-compose: No such file or directory
    ./upup-docker.sh: line 11: /usr/bin/docker-compose: No such file or directory

    Ich weiß nicht warum.
    Jemand n Tipp?
    VG Hardy

    1. hab nun die Befehle händisch eingegeben.

      Es kommt die Meldung dass, Nextcloud und WordPress aktuell sind. obwohl ich bei WordPress 5.4 und bei Nextcloud 18.0.3 eingetragen habe…

      Was stimmt da nicht?

      VG Hardy

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Verwendung
von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.

Scroll to Top