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
Autor
REXE Teknoloji Network & Security Team
Redaktion
REXE Teknoloji Technical Editorial
Erstveröffentlichung
Letzte Aktualisierung

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.

Häufig gestellte Fragen

Wie oft sollte ich Docker Volumes sichern?

Die Backup-Häufigkeit wird durch Ihr RPO (Recovery Point Objective) bestimmt. Stündliche oder häufigere Backups für kritische Datenbanken, täglich für Anwendungsdaten, wöchentlich für statische Inhalte. Häufigere Backups erhöhen Festplattenplatz und I/O-Last — behalten Sie diese Balance im Auge.

Muss der Container beim Backup gestoppt werden?

Für Datenbanken wird Backup ohne Stopp empfohlen: mysqldump --single-transaction für MySQL, pg_dump für PostgreSQL. Bei Dateisystem-Backups kann ein kurzer Stopp für Konsistenz erforderlich sein. Für kritische Systeme Backups von einem Read-Replica nehmen.

Wie verifiziere ich ein Kubernetes-Backup mit Velero?

Prüfen Sie den Backup-Status mit velero backup describe BACKUP_NAME. Testen Sie regelmäßig die Wiederherstellung in einer Testumgebung mit velero restore create --from-backup BACKUP_NAME. Velero verifiziert auch automatisch die Backup-Integrität.

Wo sollte ich Backups speichern?

Wenden Sie die 3-2-1-Regel an: 3 Kopien, 2 verschiedene Medien, 1 entfernter Standort. Eine Kombination aus lokalem Speicher + S3-kompatiblem Remote-Speicher (MinIO, AWS S3, Backblaze B2) wird empfohlen. Backups verschlüsseln (Restic verschlüsselt standardmäßig). Backups nicht auf demselben Server speichern.

Wie sichere ich einen Docker Compose Stack?

Sie müssen zwei Dinge sichern: 1) docker-compose.yml und .env-Dateien (sollten in Git gespeichert sein), 2) Volume-Daten (Backup mit tar). Um den gesamten Stack zu sichern, sichern Sie jedes Volume separat. Zur Wiederherstellung starten Sie zuerst den Stack mit docker-compose up, dann stellen Sie die Volume-Daten wieder her.

Verwandte Artikel

NetzwerkverkehrEingehend GbpsAusgehend Gbps