Alles zusammengefasst!

Änderungsstand: 2020-04-04

Hier werden alle von mir verwendeten Docker, mit nur einem Script installiert und/oder geupdated. Vorausgesetzt, die einzelnen *.yml-Dateien wurden in die dafür von mir vorgesehenen Ordner angelegt. Achtung! Auf x64 ausgelegt! Für ARM sollten einige Sachen angepasst werden, wie z.B. der MyWebSQL-Docker, der in meiner Version nur für x64 verfügbar ist.

Dieses Script, welches auf dem ersten Blick etwas „überladen“ wirkt, hat den entscheidenden Vorteil, dass man selbst entscheiden kann, was geupdated wird, indem man einfach alles nicht-benötigte mit # davor unter Kommentar setzt.

Am Ende gibt es noch ein ziemlich kurzes Script, wo alle erstellten *.yml-Configs im angegebenen, übergeordnetem Hauptverzeichnis ausgelesen, geupdated und die alten Images automatisch gelöscht werden. Dort werden aber auch ALLE vorhandenen Docker gestartet. Also sollte man vielleicht die yaml-Dateien der grad nicht benötigten Docker aus dem Verzeichnis /home/dockervolumes herausnehmen. Ich erstellte für mich dafür ein extra Verzeichnis (/home/dockervolumes-nicht-aktiv).

Wer sehen möchte, ob zum Schluß alles soweit funktioniert, sollte als erstes sicherstellen, dass auch alle Docker (nicht die Images) gestoppt und gelöscht sind.

sudo docker stop $(sudo docker ps -a -q)
sudo docker rm $(sudo docker ps -a -q)

Die einzelnen Docker-Compose Ordner mit den dazugehörigen *.yml-Dateien wurden durch abarbeiten der einzelnen Compose-Guides schon angelegt.

Das wären bei mir im Verzeichnis /home/dockervolumes/:

  • bitwarden
  • duplicati
  • emby
  • calibre-web
  • heimdall
  • mariadb
  • minetest
  • nextcloud
  • phpmyadmin
  • portainer
  • wordpress
  • glances
  • mywebsql
  • pihole

Schnellerstellung der Ordner (wird nicht mehr benötigt, da schon vorhanden):

mkdir -p /home/dockervolumes/{mariadb,phpmyadmin,nextcloud,calibre-web,bitwarden,duplicati,emby,glances,heimdall,portainer,wordpress,mywebsql,minetest,pihole}

Zuerst springe ich ins Verzeichnis /usr/local/bin und lege dort eine neue Datei an, Namens mydockercomposescript, füge die Scriptkommentare ein und starte das Script (im Script sind ALLE meine Docker-Compose-yml-Verzeichnisse inkl. der dazugehörigen Befehle hinterlegt):

cd /usr/local/bin && sudo nano mydockercomposescript
#!/bin/bash
# Ablageverzeichnis: /usr/local/bin/mydockercomposescript
# Variablendefinition
Start="docker-compose up -d"
Ausgabe="Script abgearbeitet!"
#
# Beginn der einzelnen Docker-Updates
##
cd /home/dockervolumes/mariadb
   docker pull linuxserver/mariadb
  $Start
#
cd /home/dockervolumes/phpmyadmin
   docker pull phpmyadmin/phpmyadmin
  $Start
#
cd /home/dockervolumes/nextcloud
   docker pull linuxserver/nextcloud
  $Start
#
cd /home/dockervolumes/wordpress
   docker pull wordpress
  $Start
#
cd /home/dockervolumes/bitwarden
   docker pull bitwardenrs/server
  $Start
#
cd /home/dockervolumes/duplicati
   docker pull duplicati/duplicati
  $Start
#
cd /home/dockervolumes/portainer
   docker pull portainer/portainer
  $Start
#
cd /home/dockervolumes/emby
   docker pull emby/embyserver
  $Start
#
cd /home/dockervolumes/heimdall
   docker pull linuxserver/heimdall
  $Start
#
cd /home/dockervolumes/minetest
   docker pull linuxserver/minetest
  $Start
#
cd /home/dockervolumes/glances
   docker pull vimagick/glances
  $Start
#
cd /home/dockervolumes/calibre-web
   docker pull linuxserver/calibre-web
  $Start
#
cd /home/dockervolumes/mywebsql
   docker pull quantumobject/docker-mywebsql
  $Start
#
cd /home/dockervolumes/pihole
   docker pull pihole/pihole
  $Start
##
#
#
 echo "$Ausgabe"

Strg-x, y, Enter

bash mydockercomposescript

Fertig.

Jetzt kann der Befehl auch in den geplanten Aufgaben in OMV eingetragen werden.

bash mydockercomposescript

Hier noch ein Script, welches alle Docker, die mit Docker-Compose erstellt wurden, updated, wieder startet und die alten Images automatisch löscht. Es muss eigentlich nur das Übergeordnete Hauptverzeichnis der *.yml-Dateien angegeben werden (Zeile 5). Achtung! Der letzte Befehl (Zeile 15) muss das Argument (-f) beinhalten, da ansonsten eine erzwungene Eingabeaufforderung erscheinen würde, die das automatische Löschen der alten Images verhindern würde!

cd /usr/local/bin && sudo nano mydockerupdatecomposescript
#!/bin/bash
# Automatisches Update ALLER Docker in /home/dockervolumes/*
# Ablageverzeichnis: /usr/local/bin/mydockerupdatecomposescript
# Angabe Hauptverzeichnis
cd /home/dockervolumes

readarray -d '' composeConfigs < <(find . -type f -name docker-compose.y* -print0)

for cfg in "${composeConfigs[@]}"; do
  docker-compose -f "$cfg" pull
  docker-compose -f "$cfg" up -d
done

# Alte Images automatisch löschen
docker image prune -f

Strg-x, y, Enter

bash mydockerupdatecomposescript

Fertig.

Jetzt kann der Befehl auch in den geplanten Aufgaben in OMV eingetragen werden.

bash mydockerupdatecomposescript

Quelle: https://thibmaek.com/post/updating-all-docker-compose-container