Reviewed-on: #32
DockerUpdate (docker-update)
docker-update ist ein schlankes CLI-Werkzeug für Linux-Server, das Docker-Compose-basierte Applikationen automatisch
auf neuere Versionen prüft, aktualisiert und neu startet.
Funktionsweise
- Durchsuchen von Applikationsverzeichnissen:
Standardmäßig scannt
docker-updatealle Unterverzeichnisse in/var/apps/(konfigurierbar) nach gültigen Compose-Dateien (docker-compose.yaml,docker-compose.yml,compose.yaml,compose.yml). - Erkennung von
:latest-Images: Services in den Compose-Dateien werden analysiert. Es werden gezielt Services berücksichtigt, deren Image das:latest-Tag nutzt oder implizit auflatestverweist (kein Tag angegeben). - Prüfung auf neuere Images & Download:
Das Programm führt für jedes betroffene Image einen
docker pulldurch und vergleicht die Image-IDs vor und nach dem Pull. - Automatischer Neustart:
Wurde ein neues Image heruntergeladen, wird die Applikation im jeweiligen Verzeichnis über
docker compose up -d(mit Fallback aufdocker-compose up -d) aktualisiert und neu gestartet. - Bereinigung:
Nach erfolgreichen Aktualisierungen werden ungenutzte Zwischen-Images automatisch mittels
docker image prune -fbereinigt. - Berechtigungen & Logging:
Wird das Programm ohne Root-Rechte gestartet, startet es sich automatisch über
sudomit erhöhten Rechten neu. Ausgaben werden auf der Konsole formatiert und zusätzlich tagesbasiert im System-Temp-Verzeichnis protokolliert (z. B./tmp/docker-update-.../log-YYYY-MM-DD.log).
Voraussetzungen
- Betriebssystem: Linux (amd64 / x86_64, arm64 / aarch64, i386 / i686)
- Laufzeit-Abhängigkeiten:
docker(inkl. Docker Compose Plugindocker composeoder Standalonedocker-compose)sudo
- Build-Abhängigkeiten (nur zum Kompilieren/Paketieren):
- Rust & Cargo (Rust 2024 Edition / 1.85+)
Installation aus der Gitea-Paket-Registry
Über die CI/CD-Pipelines werden bei jedem Push auf den main-Branch (Release / Stable) und testing-Branch (Preview /
Testing) automatisch Pakete für Debian/Ubuntu, Fedora/RHEL und Arch Linux in der Gitea-Paket-Registry
bereitgestellt.
1. Debian / Ubuntu (apt)
Stable (Produktiv)
Füge das Repository zu deinen APT-Quellen hinzu:
# Keyring installieren
sudo curl https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/debian/repository.key -o /etc/apt/keyrings/gitea-Linuxapps.asc
# Repository-Eintrag anlegen
echo "deb [signed-by=/etc/apt/keyrings/gitea-Linuxapps.asc] https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/debian stable main" | sudo tee -a /etc/apt/sources.list.d/gitea.list
# Paketliste aktualisieren und installieren
sudo apt update
sudo apt install docker-update
Testing (Vorschau / Testing)
# Keyring installieren
sudo curl https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/debian/repository.key -o /etc/apt/keyrings/gitea-Linuxapps.asc
# Testing-Repository-Eintrag anlegen
echo "deb [signed-by=/etc/apt/keyrings/gitea-Linuxapps.asc] https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/debian testing main" | sudo tee -a /etc/apt/sources.list.d/gitea.list
# Paketliste aktualisieren und installieren
sudo apt update
sudo apt install docker-update
2. RedHat / Fedora / SUSE
Stable (Produktiv)
Repository einrichten:
# auf RedHat-basierten Distributionen
dnf config-manager --add-repo https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/stable.repo
# Fedora 41+ (DNF5)
dnf config-manager addrepo --from-repofile=https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/stable.repo
# auf SUSE-basierten Distributionen
zypper addrepo https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/stable.repo
Paket installieren:
# auf RedHat-basierten Distributionen
dnf install docker-update
# auf SUSE-basierten Distributionen
zypper install docker-update
Testing (Vorschau / Testing)
Repository einrichten:
# auf RedHat-basierten Distributionen
dnf config-manager --add-repo https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/testing.repo
# Fedora 41+ (DNF5)
dnf config-manager addrepo --from-repofile=https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/testing.repo
# auf SUSE-basierten Distributionen
zypper addrepo https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/testing.repo
Paket installieren:
# auf RedHat-basierten Distributionen
dnf install docker-update
# auf SUSE-basierten Distributionen
zypper install docker-update
3. Arch Linux (pacman)
Installiere den GPG-Key für das Repository
Key herunterladen:
wget https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/arch/repository.key
ID des Keys anzeigen lassen:
gpg --show-keys repository.key
Key zu pacman hinzufügen und signieren:
pacman-key --add repository.key
pacman-key --lsign-key {key id}
{key id} = ID aus dem vorherigen Schritt
Stable (Produktiv)
Füge das Repository in /etc/pacman.conf ein:
[stable]
SigLevel = Optional TrustAll
Server = https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/arch/stable/$arch
Installiere das Paket anschließend:
sudo pacman -Sy docker-update
Testing (Vorschau / Testing)
Füge das Testing-Repository in /etc/pacman.conf ein:
[testing]
SigLevel = Optional TrustAll
Server = https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/arch/testing/$arch
Installiere das Paket:
sudo pacman -Sy docker-update
Download vorgefertigter Pakete (Releases)
Alternativ können vorkompilierte Pakete (.deb, .rpm, .pkg.tar.zst) auch direkt aus den Releases heruntergeladen
und manuell installiert werden:
- Stable-Releases: Gitea Releases
- Preview-Releases (Testing): Markiert als Vorabveröffentlichung (Pre-release) mit dem Tag
v<VERSION>-preview.
Manuelle Installation (Build from Source)
# Repository klonen
git clone https://gitea.creative-dragonslayer.de/Linuxapps/DockerUpdate.git
cd DockerUpdate
# Release-Binary kompilieren
cargo build --release
# Binary ins Systemverzeichnis installieren
sudo install -m 755 target/release/docker-update /usr/bin/docker-update
Anschließend kann das Programm direkt über docker-update ausgeführt werden:
docker-update
Konfiguration
Die Konfigurationsdatei wird standardmäßig unter folgendem Pfad abgelegt:
- Root-Ausführung:
/etc/docker-update/config.toml - Benutzer-Ausführung:
~/.config/docker-update/config.toml
Wird keine Datei gefunden, verwendet docker-update die Standardwerte.
Beispiel-Konfiguration (config.toml)
[general]
# Verzeichnis, in dem sich die Applikationsordner mit Compose-Dateien befinden
apps_dir = "/var/apps"
# Log-Level: "error", "warn", "info", "debug"
log_level = "info"
Paketerstellung
Für gängige Linux-Distributionen stehen vorbereitete Paketierungsdefinitionen zur Verfügung.
1. Debian / Ubuntu (.deb)
Das Debian-Paket kann mithilfe von cargo-deb erstellt werden:
# cargo-deb installieren (falls noch nicht vorhanden)
cargo install cargo-deb
# Release-Build und Debian-Paket erstellen
cargo deb
# Installation des erstellten Pakets
sudo dpkg -i target/debian/docker-update_*.deb
Die Paketkonfiguration und Abhängigkeiten (sudo, docker.io | docker-ce) sind in Cargo.toml unter
[package.metadata.deb] definiert.
2. Arch Linux (.pkg.tar.zst)
Die Paketmetadaten und Abhängigkeiten für Arch Linux sind direkt in Cargo.toml unter [package.metadata.arch]
hinterlegt. Das Paket kann nach dem Kompilieren des Release-Builds über das Skript scripts/package-arch.py (analog zu
CI/CD) erzeugt werden (optional mit --target <TRIPLE> für Cross-Builds):
# Release kompilieren
cargo build --release
# Arch Linux-Paket (.pkg.tar.zst) erstellen (Standard: Host/x86_64)
python3 scripts/package-arch.py
# Optional für spezifische Zielarchitektur:
# python3 scripts/package-arch.py --target aarch64-unknown-linux-gnu
# python3 scripts/package-arch.py --target i686-unknown-linux-gnu
# Installation des erstellten Pakets
sudo pacman -U target/arch/docker-update-*.pkg.tar.zst
3. Fedora / RHEL / CentOS (.rpm)
Das RPM-Paket wird mithilfe von cargo-generate-rpm direkt aus den
Metadaten in Cargo.toml ([package.metadata.generate-rpm]) erstellt:
# cargo-generate-rpm installieren (falls noch nicht vorhanden)
cargo install cargo-generate-rpm
# Release bauen und RPM erzeugen
cargo build --release
cargo generate-rpm
# Optional für spezifische Zielarchitektur (z.B. Cross-Builds):
# mkdir -p target/generate-rpm
# cargo generate-rpm --target aarch64-unknown-linux-gnu -o target/generate-rpm
# cargo generate-rpm --target i686-unknown-linux-gnu -o target/generate-rpm
# Installation des erstellten RPM-Pakets
sudo dnf install target/generate-rpm/docker-update-*.rpm
Automatisierung (Cron)
Um docker-update regelmäßig (z. B. täglich nachts um 03:30 Uhr) automatisch auszuführen, kann ein Cronjob eingerichtet
werden. Da docker-update Root-Rechte benötigt, sollte der Cronjob mit Root-Rechten ausgeführt werden.
Option A: Über /etc/cron.d/docker-update (Empfohlen für Server)
Erstelle eine Datei /etc/cron.d/docker-update:
sudo tee /etc/cron.d/docker-update << 'EOF'
# Täglich um 03:30 Uhr docker-update als root ausführen
30 3 * * * root /usr/bin/docker-update >/dev/null 2>&1
EOF
sudo chmod 644 /etc/cron.d/docker-update
Option B: Über die Root-Crontab (crontab -e)
Öffne die Crontab des Root-Benutzers:
sudo crontab -e
Füge folgende Zeile ein:
30 3 * * * /usr/bin/docker-update >/dev/null 2>&1
Lizenz
Dieses Projekt ist unter der GNU General Public License v3.0 or later (GPL-3.0-or-later) lizenziert. Weitere Informationen finden sich in der Datei LICENSE.