Meine Güte ist die Containertechnologie verbreitet und besonders Docker, doch was ist mit dem Thema Backup? Bei den Heimanwendern glaube ich Applikation Nr. 1 geworden. Doch was ist mit unseren Daten welche die Container produzieren. Wir wissen ja bereits das Container flüchtig sind und Ihre Daten zunächst nur Lokal in Docker Volumes oder in Mount Pfaden ablegen.

Selbst dann sind die Daten erstmal nur auf dem Host System, aber gesichert sind diese noch lange nicht. Also was sollte man tun? Bestenfalls sollten diese Daten auf ein weiteres System kopiert werden, welches fern ab von diesem Host ist.

Das Script was ich euch nun zeige könnt Ihr selber mit euren Variablen einstellen und konfigurieren. Es erstellt auf dem Docker Host System von dem Ordner /var/lib/docker/volumes ein gepacketes tar.gz file. Kopiert anschließend mittels SCP das frisch erstelle Backup auf ein zweites Zielsystem. Zur Sicherheit werden direkt über das Script alle Docker Container gestoppt und anschließend wieder gestartet.

Die Docker Container werden kurzzeitig gestoppt um eine saubere Datenkonsistenz zu schaffen. Zum Beispiel Datenbanken werden so sauberer gespeichert.

Docker Volume Backup Script – #BASH

SSH-Key Kopieren auf Zielsystem

Damit das Script auch ohne Benutzereingaben läuft, muss der Public Key vom Hauptsystem auf das Zielsystem kopiert werden. Damit ist dann auch eine Passwortlose-Anmeldung möglich. Also zunächst ein Keypärchen erstellen und dann den Public Key kopieren.

## Auf dem Hauptsystem ausführen, nicht dem Backup Ziel ##
ssh-keygen -t rsa
ssh-copy-id root@<IP-ZIELSYSTEM>

Wenn du den Passwortlosen-Login testen möchtest gebe folgendes in die CLI ein

ssh root@<IP-ZIELSYSTEM>

Das Docker Volume Backup Script

Passe die oben stehenden Variablen an deine Umgebung an und teste das Script mit nachstehenden Befehlen.

#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # #
#                Konfiguration                #
# # # # # # # # # # # # # # # # # # # # # # # #

# Verzeichnis, das gesichert werden soll
source_dir="/var/lib/docker/volumes"
# Verzeichnis, in dem die Backups gespeichert werden sollen
backup_dir="/opt/docker_backups"
# Anzahl der zu behaltenden Backups
keep_backups=10
# Aktuelles Datum und Uhrzeit
current_datetime=$(date +"%Y-%m-%d_%H-%M-%S")
# Name für das Backup-Archiv
backup_filename="${current_datetime}-backup.tar"
# Zielserver-Informationen
remote_user="root"
remote_server="192.168.40.50"
remote_dir="/opt/docker_backups"
# # # # # # # # # # # # # # # # # # # # # # # #
#           Ende der Konfiguration            #
# # # # # # # # # # # # # # # # # # # # # # # #

remote_target="${remote_user}@${remote_server}"
backup_fullpath="${backup_dir}/${backup_filename}"
 
# Docker-Container herunterfahren
docker stop $(docker ps -q)
# Erstelle das Backup-Archiv
tar -cpf "${backup_fullpath}" "${source_dir}"
# Docker-Container wieder starten
docker start $(docker ps -a -q)
# Komprimiere das Backup-Archiv
gzip "${backup_fullpath}"
backup_fullpath="${backup_fullpath}.gz"
# Kopiere das Backup auf den Zielserver mit SCP ohne Passwort
scp "${backup_fullpath}" "${remote_target}:$remote_dir/"
# Lösche ältere lokale Backups mit `find`
find "$backup_dir" -type f -name "*-backup.tar.gz" -mtime +$keep_backups -exec rm {} \;
# Lösche ältere remote Backups mit `find`
ssh "${remote_target}" "find ${remote_dir} -type f -name '*-backup.tar.gz' -mtime +$keep_backups -exec rm {} \;"
 
echo "Backup wurde erstellt: ${backup_fullpath} und auf ${remote_target} kopiert."
mkdir /opt/docker_backups
chmod +x backup_script_name.sh

./backup_script_name.sh
Docker Volumes Backup Script

Wohin mit den Daten? Was als Backup Ziel?

Ich empfehle da ganz klar ein NAS-System. Das NAS ist Universal einsetzbar und bietet gleichzeitig Schutz vor dem Ausfall einer Festplatte. Ich empfehle euch hier mal was..

Wenn noch Fragen offen sein sollte, gerne hier in die Kommentare oder in das Community Forum. Community Forum ist HIER.