Änderungsstand: 2023-09-30
Ich verwende dafür ein kleines Script, welches ein Update für das Betriebssystem und die Docker erledigt. Ich muss bedenken, dass ALLE Docker, von denen sich in Dockervolumes die Scripte befinden, gestoppt, geupdated und gestartet werden, auch wenn diese nicht relevant sind. Soll heißen, dass die Compose-Files von Dockern, die keine Verwendung mehr haben oder momentan nicht benötigt werden, nicht im Verzeichnis /home/dockervolumes sein sollten. Dieses Script ist für alle in diesen Guides erstellten Docker. Als Bonus kann man in einem Logfile schauen, wann das letzte Update mit diesem Script getätigt wurde.
Im Terminal als root anmelden:
sudo su
touch /home/updatelog.txt && echo // Updates mit "updatescript" | tee -a /home/updatelog.txt
cd && mkdir -p scriptfiles
cd && cd scriptfiles && nano updatescript.sh
Folgendes eintragen und ggnf. anpassen:
#!/bin/bash
# Automatisches Update ALLER Docker der Docker-Compose-Scriptfiles: /home/dockervolumes/*
# Dateipfad: ~/scriptfiles/updatescript.sh
# Logfile: /home/updatelog.txt
sudo apt-get update && sudo apt-get upgrade -y
cd /home/dockervolumes
readarray -d '' composeConfigs < <(find . -type f -name docker-compose.y* -print0)
for cfg in "${composeConfigs[@]}"; do
# sudo docker compose -f "$cfg" stop
sudo docker compose -f "$cfg" pull
sudo docker compose -f "$cfg" up -d
done
# Alte Images automatisch löschen
sudo docker image prune -f
#
## Logfile Eintrag (wenn nicht benötigt, dann # davor setzen)
echo d=$(date +%y-%m-%d_%H:%M:%S) | sudo tee -a /home/updatelog.txt
#
Strg-x, y, Enter
sudo chmod 700 updatescript.sh
Zum Aufruf des Scriptes folgenden Befehl eingeben:
sudo ./updatescript.sh
Es werden alle Docker, von denen sich die *.yml im Verzeichnis „/home/dockervolumes/“ vorhanden sind, geupdatet und die alten Images gelöscht.
Ich stoppe in diesem Script, bei meiner eigenen Verwendung, automatisch, vor der Aktualisierung der Docker, vorsichtshalber den Nextcloud-Docker, da sich dort die Datenbank mit drin befindet und diese demzufolge ebenfalls gestoppt wird. Dies dient zur Sicherheit, um einen Crash oder Datenverlust vorzubeugen, falls bei der Aktualisierung im selben Moment darauf geschrieben werden sollte. Nur interessant, wenn eine separate Datenbank betrieben wird. Und das ist hier der Fall. Also Zeile 8 und Zeile 9 und bei Bedarf auch die Zeilen 11 & Zeile 12, indem die ## entfernt werden. Die Docker starten nach Ablauf des Scriptes automatisch.
Unter /home/updatelog.txt kann man den Zeitpunkt der Updates einsehen. Mein erster Eintrag sieht folgendermaßen aus:
// Updates mit updatescript
d=23-08-06_23:48:43
Strg-x zum Beenden.
exit
Cronjob für die automatische Aktualisierung einrichten:
Möchte man das Script täglich durchlaufen lassen, dann hilft folgendes (immer noch als root angemeldet):
sudo crontab -e
Folgendes am Ende der Datei einfügen (das Hashtag am Ende nicht vergessen):
0 2 * * * ~/scriptfiles/updatescript.sh >/dev/null 2>&1
#
STGR-x, y, Enter
Jetzt wird täglich 02:00 Uhr das Update-Script gestartet.
Täglich 02:10 Uhr wäre dann:
10 2 * * * ~/scriptfiles/updatescript.sh >/dev/null 2>&1
#
STGR-x, y, Enter
Möchte man nur einmal pro Woche am Montag updaten, dann:
0 5 * * 1 ~/scriptfiles/updatescript.sh >/dev/null 2>&1
#
STGR-x, y, Enter
Oder nur am 1. des Monats um 05:00 Uhr:
0 5 1 * * ~/scriptfiles/updatescript.sh >/dev/null 2>&1
#
STGR-x, y, Enter
sudo reboot