Simulieren der Volume-Migration auf einen neuen Host
In einem realen Szenario würden Sie die Backup-Datei mit Tools wie scp
, rsync
oder einem File-Sharing-Dienst auf einen neuen Host übertragen. Für dieses Lab simulieren wir eine Migration, indem wir unser ursprüngliches Volume entfernen und ein neues erstellen, um unsere Daten wiederherzustellen.
Simulieren einer neuen Host-Umgebung
Zuerst bereinigen wir unsere alten Container, um den Umzug in eine neue Umgebung zu simulieren:
docker rm -f my-container data-generator
Entfernen wir nun unser ursprüngliches Volume, um einen Neustart auf einem neuen Host zu simulieren:
docker volume rm my-data-volume
Erstellen Sie ein neues Volume, das unser Volume auf dem "neuen Host" darstellt:
docker volume create my-new-host-volume
Wiederherstellen des Volumes aus dem Backup
Nun stellen wir unser Backup auf dem neuen Volume wieder her:
docker run --rm -v my-new-host-volume:/destination -v $(pwd):/backup ubuntu bash -c "cd /destination && tar xvf /backup/my-data-volume-backup.tar"
Dieser Befehl:
- Erstellt einen temporären Container
- Bindet unser neues Volume unter
/destination
ein
- Bindet das aktuelle Verzeichnis (in dem sich unser Backup befindet) unter
/backup
ein
- Extrahiert das Tar-Archiv in das Verzeichnis
/destination
Überprüfen der wiederhergestellten Daten
Überprüfen wir, ob alle unsere Daten ordnungsgemäß auf dem neuen Volume wiederhergestellt wurden:
docker run --rm -v my-new-host-volume:/data ubuntu ls -la /data
Sie sollten die gleiche Dateistruktur wie zuvor sehen:
total 12
drwxr-xr-x 3 root root 4096 Oct 1 12:34 .
drwxr-xr-x 1 root root 4096 Oct 1 12:34 ..
drwxr-xr-x 2 root root 4096 Oct 1 12:34 config
-rw-r--r-- 1 root root 21 Oct 1 12:34 important.txt
-rw-r--r-- 1 root root 24 Oct 1 12:34 test.txt
Überprüfen Sie den Inhalt einer unserer Dateien, um sicherzustellen, dass die Daten intakt sind:
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/important.txt
Ausgabe:
This is important data
Überprüfen Sie auch die Konfigurationsdatei:
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/config/settings.conf
Ausgabe:
database_url=postgres://user:password@db:5432/mydb
Verwenden des wiederhergestellten Volumes mit einem neuen Container
Nachdem wir unser Volume erfolgreich "migriert" haben, verwenden wir es mit einem neuen Container:
docker run --name my-new-container -v my-new-host-volume:/app/data -d nginx
Dies erstellt einen neuen Nginx-Container, der unser wiederhergestelltes Volume unter /app/data
einbindet.
Überprüfen wir, ob der Container auf die Volumendaten zugreifen kann:
docker exec my-new-container ls -la /app/data
Sie sollten die gleichen Dateien wie zuvor sehen, was bestätigt, dass die Migration erfolgreich war.
Aktualisieren von Anwendungen zur Verwendung des neuen Volumes
In einem realen Szenario müssten Sie nach der Migration von Volumes auf einen neuen Host Ihre Docker Compose-Dateien oder Container-Ausführungsbefehle aktualisieren, um die neuen Volumennamen oder -pfade zu verwenden. Wenn Sie beispielsweise Docker Compose verwenden, könnten Sie Ihre docker-compose.yml
-Datei wie folgt aktualisieren:
version: "3"
services:
webapp:
image: nginx
volumes:
- my-new-host-volume:/app/data
volumes:
my-new-host-volume:
external: true
Dies weist Docker an, das extern erstellte Volume mit dem Namen my-new-host-volume
zu verwenden.
Der Migrationsprozess ist nun abgeschlossen! Sie haben erfolgreich:
- Ein Docker-Volume erstellt und Daten hinzugefügt
- Die Volumendaten gesichert
- Ein neues Volume auf einem simulierten "neuen Host" erstellt
- Die Backup-Daten auf dem neuen Volume wiederhergestellt
- Die Datenintegrität überprüft
- Einen neuen Container mit dem migrierten Volume verbunden