Container-Backup: Datenschutzstrategien für Docker und Kubernetes
Docker Volume-Backup, Container-State-Backup, Kubernetes Persistent Volume-Backup, Kubernetes-Backup mit Velero, automatisierte Backup-Skripte und Disaster-Recovery-Planung.
Inhaltsverzeichnis
Container-Backup: Datenschutzstrategien
Das Sichern von Container-Umgebungen erfordert einen anderen Ansatz als traditionelle Server-Backups. Da Container flüchtig sind, müssen nicht die Container selbst, sondern die darin enthaltenen Daten gesichert werden. Dieser Leitfaden behandelt umfassende Backup-Strategien für Docker- und Kubernetes-Umgebungen.
Backup-Strategie wählen
| Strategie | Geeignet für | Tool |
|---|---|---|
| Volume-Backup | Datenbank, Dateispeicher | tar, rsync |
| Image-Backup | Anwendungszustand | docker save |
| Snapshot | Schnelle Wiederherstellung | LVM, ZFS |
| K8s-Backup | Gesamter Cluster | Velero |
| Remote-Backup | Disaster Recovery | Restic, Rclone |
1. Docker Volume-Backup
Manuelles Volume-Backup
# Volume in tar-Archiv sichern
docker run --rm \
-v VOLUME_NAME:/data \
-v $(pwd):/backup \
alpine tar czf /backup/volume-backup-$(date +%Y%m%d).tar.gz -C /data .
# Beispiel: MySQL Volume-Backup
docker run --rm \
-v mysql-data:/data \
-v /backups:/backup \
alpine tar czf /backup/mysql-$(date +%Y%m%d-%H%M%S).tar.gz -C /data .
# Volume wiederherstellen
docker run --rm \
-v mysql-data:/data \
-v /backups:/backup \
alpine tar xzf /backup/mysql-20240101-120000.tar.gz -C /data
Backup mit laufendem Container
# MySQL-Dump (während Container läuft)
docker exec mysql-db mysqldump \
-u root -pStarkesPasswort123! \
--all-databases \
--single-transaction \
> /backups/mysql-dump-$(date +%Y%m%d).sql
# PostgreSQL-Dump
docker exec postgres-db pg_dumpall \
-U postgres \
> /backups/postgres-dump-$(date +%Y%m%d).sql
2. Automatisiertes Backup-Skript
#!/bin/bash
# /usr/local/bin/docker-backup.sh
BACKUP_DIR="/backups/docker"
DATE=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=7
mkdir -p "$BACKUP_DIR"
# Alle Volumes sichern
for volume in $(docker volume ls -q); do
echo "Sichere: $volume"
docker run --rm \
-v "$volume":/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf "/backup/${volume}-${DATE}.tar.gz" -C /data . 2>/dev/null
done
# MySQL-Datenbanken sichern
if docker ps --format '{{.Names}}' | grep -q mysql; then
docker exec mysql-db mysqldump \
-u root -pStarkesPasswort123! \
--all-databases \
--single-transaction \
> "$BACKUP_DIR/mysql-${DATE}.sql"
fi
# Alte Backups bereinigen
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "*.sql" -mtime +$RETENTION_DAYS -delete
echo "Backup abgeschlossen: $DATE"
chmod +x /usr/local/bin/docker-backup.sh
# Tägliches Backup via Cron
# 0 2 * * * /usr/local/bin/docker-backup.sh >> /var/log/docker-backup.log 2>&1
3. Remote-Backup mit Restic
# Restic installieren
apt install -y restic
# Repository initialisieren
restic init --repo /backups/restic-repo
# Volume sichern
restic backup /tmp/mysql-backup \
--repo /backups/restic-repo \
--password-file /etc/restic/password \
--tag mysql,docker
# Backups auflisten
restic snapshots --repo /backups/restic-repo
# Wiederherstellen
restic restore SNAPSHOT_ID \
--repo /backups/restic-repo \
--target /tmp/restore
# Alte Backups bereinigen
restic forget \
--repo /backups/restic-repo \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 3 \
--prune
4. Kubernetes-Backup: Velero
# Velero CLI installieren
wget https://github.com/vmware-tanzu/velero/releases/download/v1.12.0/velero-v1.12.0-linux-amd64.tar.gz
tar xzf velero-v1.12.0-linux-amd64.tar.gz
mv velero-v1.12.0-linux-amd64/velero /usr/local/bin/
# Gesamten Cluster sichern
velero backup create full-backup --wait
# Bestimmten Namespace sichern
velero backup create production-backup \
--include-namespaces production \
--wait
# Backups auflisten
velero backup get
# Aus Backup wiederherstellen
velero restore create --from-backup full-backup
Geplantes Backup
# Tägliches Backup (um 2 Uhr)
velero schedule create daily-backup \
--schedule="0 2 * * *" \
--ttl 168h
# Wöchentliches Vollbackup
velero schedule create weekly-backup \
--schedule="0 1 * * 0" \
--ttl 720h
5. Backup-Verifizierungsskript
#!/bin/bash
BACKUP_FILE="$1"
if tar tzf "$BACKUP_FILE" > /dev/null 2>&1; then
echo "Backup-Datei ist gültig: $BACKUP_FILE"
else
echo "FEHLER: Backup-Datei ist beschädigt: $BACKUP_FILE"
exit 1
fi
docker volume create test-restore
docker run --rm \
-v test-restore:/data \
-v $(dirname $BACKUP_FILE):/backup \
alpine tar xzf "/backup/$(basename $BACKUP_FILE)" -C /data
echo "Wiederherstellungstest erfolgreich"
docker volume rm test-restore
Fazit
Die Container-Backup-Strategie sollte entsprechend Ihren Geschäftsanforderungen gestaltet werden. Volume-Backup + Cron kann für kleine Umgebungen ausreichen, während für Produktions-Kubernetes-Cluster dedizierte Tools wie Velero erforderlich sind. Mit regelmäßigen Backup- und Wiederherstellungstests auf REXE-Servern können Sie Ihre Daten sicher halten.
Verwandte Artikel
K3s Kubernetes-Installation: Leichte Container-Orchestrierung
Einzel- und Multi-Node Kubernetes-Cluster-Setup mit K3s, kubectl-Nutzung, Deployments und Services erstellen, Anwendungsverwaltung mit Helm. Kubernetes-Leitfaden für VPS-Umgebungen.
Docker Volume und Netzwerkverwaltung: Persistenter Speicher und Netzwerkkonfiguration
Docker Volume-Typen (Named, Bind Mount, tmpfs), Volume-Verwaltung, Docker-Netzwerkmodi (Bridge, Host, Overlay), benutzerdefinierte Netzwerke und Container-Kommunikation. Umfassender Leitfaden.
Container-Logging: Docker und Kubernetes Log-Verwaltung
Docker-Log-Treiber, docker logs-Befehl, Kubernetes Pod-Logs, zentralisierte Log-Sammlung (Loki, ELK Stack), Log-Rotation und Best Practices für Log-Verwaltung in Produktionsumgebungen.