Zum Hauptinhalt springen
Zurück zur Kategorie

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.

Lesezeit: 16 dk Container & Orchestrierung
dockerkubernetesbackupvelerovolumedisaster recoverydatenschutz

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

StrategieGeeignet fürTool
Volume-BackupDatenbank, Dateispeichertar, rsync
Image-BackupAnwendungszustanddocker save
SnapshotSchnelle WiederherstellungLVM, ZFS
K8s-BackupGesamter ClusterVelero
Remote-BackupDisaster RecoveryRestic, Rclone

1. Docker Volume-Backup

Manuelles Volume-Backup

hljs bash
# 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

hljs bash
# 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

hljs bash
#!/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"
hljs bash
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

hljs bash
# 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

hljs bash
# 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

hljs bash
# 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

hljs bash
#!/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.