Simulation de la migration de volume vers un nouvel hôte
Dans un scénario réel, vous transféreriez le fichier de sauvegarde vers un nouvel hôte en utilisant des outils tels que scp, rsync ou un service de partage de fichiers. Pour ce lab, nous simulerons une migration en supprimant notre volume d'origine et en créant un nouveau pour restaurer nos données.
Simulation d'un nouvel environnement hôte
Tout d'abord, nettoyons nos anciens conteneurs pour simuler le passage à un nouvel environnement :
docker rm -f my-container data-generator
Maintenant, supprimons notre volume d'origine pour simuler un nouveau départ sur un nouvel hôte :
docker volume rm my-data-volume
Créez un nouveau volume qui représentera notre volume sur le "nouvel hôte" :
docker volume create my-new-host-volume
Restauration du volume à partir de la sauvegarde
Nous allons maintenant restaurer notre sauvegarde sur le nouveau volume :
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"
Cette commande :
- Crée un conteneur temporaire
- Monte notre nouveau volume à
/destination
- Monte le répertoire courant (où se trouve notre sauvegarde) à
/backup
- Extrait l'archive tar dans le répertoire
/destination
Vérification des données restaurées
Vérifions que toutes nos données ont été correctement restaurées sur le nouveau volume :
docker run --rm -v my-new-host-volume:/data ubuntu ls -la /data
Vous devriez voir la même structure de fichiers qu'avant :
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
Vérifiez le contenu de l'un de nos fichiers pour vous assurer que les données sont intactes :
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/important.txt
Sortie :
This is important data
Vérifiez également le fichier de configuration :
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/config/settings.conf
Sortie :
database_url=postgres://user:password@db:5432/mydb
Utilisation du volume restauré avec un nouveau conteneur
Maintenant que nous avons "migré" avec succès notre volume, utilisons-le avec un nouveau conteneur :
docker run --name my-new-container -v my-new-host-volume:/app/data -d nginx
Cela crée un nouveau conteneur Nginx qui monte notre volume restauré à /app/data.
Vérifions que le conteneur peut accéder aux données du volume :
docker exec my-new-container ls -la /app/data
Vous devriez voir les mêmes fichiers qu'avant, confirmant que la migration a réussi.
Mise à jour des applications pour utiliser le nouveau volume
Dans un scénario réel, après avoir migré les volumes vers un nouvel hôte, vous devrez mettre à jour vos fichiers Docker Compose ou vos commandes d'exécution de conteneur pour utiliser les nouveaux noms ou chemins de volume. Par exemple, si vous utilisiez Docker Compose, vous pourriez mettre à jour votre fichier docker-compose.yml comme suit :
version: "3"
services:
webapp:
image: nginx
volumes:
- my-new-host-volume:/app/data
volumes:
my-new-host-volume:
external: true
Cela indique à Docker d'utiliser le volume créé en externe nommé my-new-host-volume.
Le processus de migration est maintenant terminé ! Vous avez réussi à :
- Créer un volume Docker et y ajouter des données
- Sauvegarder les données du volume
- Créer un nouveau volume sur un "nouvel hôte" simulé
- Restaurer les données de sauvegarde sur le nouveau volume
- Vérifier l'intégrité des données
- Connecter un nouveau conteneur au volume migré