Introduction
Perdre un environnement Docker local peut signifier des heures de reconstruction d'images, de saisie de secrets et de recréation de données de test. Les procédures de sauvegarde et de restauration de Docker Desktop vous aident à récupérer rapidement, surtout si vous utilisez des volumes persistants, des réseaux personnalisés ou des projets Compose. Ce guide couvre des techniques pratiques de sauvegarde et de restauration, des étapes de validation et la récupération en cas d'échec, en se concentrant sur Docker Desktop sous Windows, macOS et Linux.
Nous aborderons les composants essentiels : les données des conteneurs (volumes et montages de type bind), les images, les paramètres de Docker Desktop et les fichiers de configuration. Vous apprendrez à inspecter votre configuration actuelle, à créer des sauvegardes cohérentes, à les restaurer dans un nouvel environnement et à vérifier que vos applications fonctionnent toujours. Chaque section comprend des commandes réelles, les résultats attendus et des conseils de dépannage.
Cet article s'adresse aux développeurs, aux ingénieurs DevOps et à toute personne utilisant Docker Desktop pour le développement local ou la production à petite échelle. À la fin, vous disposerez d'un processus reproductible pour protéger votre travail et réduire les temps d'arrêt en cas de problème.
Ce qu'il faut sauvegarder dans Docker Desktop
Avant d'exécuter toute commande de sauvegarde, identifiez ce qui doit être protégé. Docker Desktop stocke les données à plusieurs endroits, et chacun nécessite une approche différente.
1. Données des conteneurs : volumes et montages de type bind
La plupart des applications avec état stockent leurs données dans des volumes Docker ou des montages de type bind. Comprendre la différence est essentiel pour la sauvegarde.
- Les volumes Docker sont gérés par Docker et stockés dans un emplacement comme
/var/lib/docker/volumes/(Linux) ou à l'intérieur de la machine virtuelle Docker Desktop (macOS/Windows). Vous pouvez les sauvegarder à l'aide d'un conteneur temporaire. - Les montages de type bind mappent un répertoire hôte directement dans un conteneur. Ils sont simples à sauvegarder car les données se trouvent sur le système de fichiers hôte, mais ils peuvent causer des problèmes de permissions et de portabilité.
Pour voir quels volumes ou montages un conteneur en cours d'exécution utilise, inspectez-le :
docker inspect mon-conteneur --format '{{ json .Mounts }}'
Résultat attendu (exemple) :
[{"Type":"volume","Name":"myapp_data","Source":"/var/lib/docker/volumes/myapp_data/_data","Destination":"/var/lib/app","RW":true}]
Si le type de montage est bind, la source est un chemin hôte comme /home/utilisateur/projet/donnees. Sauvegardez ce répertoire directement avec des outils de fichiers standard.
2. Images Docker
Les images peuvent être reconstruites à partir de Dockerfiles ou récupérées depuis des registres, mais les images construites sur mesure sans Dockerfile peuvent être perdues. Exportez les images importantes avec docker save et importez-les plus tard avec docker load. Nous verrons cela plus loin.
3. Paramètres et configuration de Docker Desktop
Docker Desktop stocke des paramètres tels que les limites de ressources, la configuration du proxy et les préférences Kubernetes. Ceux-ci ne sont pas inclus dans les sauvegardes de volumes. Sur macOS et Windows, les paramètres se trouvent dans des fichiers comme ~/Library/Group Containers/group.com.docker/settings.json (macOS) et %APPDATA%\Docker\settings.json (Windows). Sur Linux, la configuration du moteur Docker se trouve dans /etc/docker/daemon.json. Sauvegardez ces fichiers si vous personnalisez votre environnement.
4. Fichiers Compose et variables d'environnement
Vos fichiers docker-compose.yml et .env définissent les services, les réseaux et les variables d'environnement. Ils sont souvent stockés dans le dépôt de votre projet, mais s'ils n'existent que localement, incluez-les dans votre plan de sauvegarde.
Création de sauvegardes : commandes et exemples
Sauvegarder un volume Docker
Utilisez un conteneur temporaire pour créer une archive tar du contenu du volume.
# Démarrer un conteneur temporaire qui monte le volume, pour utilisation avec --volumes-from
docker run -d --name source-sauvegarde -v myapp_data:/data alpine sleep infinity
# Créer une sauvegarde du volume 'myapp_data' en utilisant l'approche documentée --volumes-from
docker run --rm --volumes-from source-sauvegarde -v $(pwd):/backup alpine \
tar czf /backup/myapp_data_backup.tar.gz -C /data .
# Supprimer le conteneur temporaire
docker rm -f source-sauvegarde
Cette commande :
- Démarre un conteneur Alpine temporaire nommé
source-sauvegardequi monte le volumemyapp_datasur/dataet dort. - Exécute un second conteneur Alpine avec
--volumes-from source-sauvegardepour accéder au même volume. - Monte le répertoire courant sur
/backup. - Crée un fichier tar compressé
myapp_data_backup.tar.gzdans le répertoire courant. - Supprime le conteneur temporaire
source-sauvegardeaprès la sauvegarde.
Après exécution, vérifiez que le fichier de sauvegarde existe et n'est pas vide :
ls -lh myapp_data_backup.tar.gz
# Attendu : une taille de fichier supérieure à 0 octet
Sauvegarder un montage de type bind
Pour un montage de type bind, copiez simplement le répertoire hôte :
# Exemple de source de montage bind : /home/utilisateur/projet/donnees
cp -a /home/utilisateur/projet/donnees /emplacement/sauvegarde/donnees_backup
Utilisez rsync pour des sauvegardes incrémentales :
rsync -av --delete /home/utilisateur/projet/donnees/ /emplacement/sauvegarde/donnees_backup/
Sauvegarder plusieurs volumes avec un script
Créez un script pour sauvegarder tous les volumes utilisés par vos conteneurs. Cet exemple itère sur les volumes de docker volume ls :
#!/bin/bash
REP_SAUVEGARDE="$(pwd)/sauvegardes"
mkdir -p "$REP_SAUVEGARDE"
for volume in $(docker volume ls --format '{{.Name}}'); do
echo "Sauvegarde du volume : $volume"
conteneur="source-sauvegarde-${volume}"
docker run -d --name "$conteneur" -v "$volume":/data alpine sleep infinity
docker run --rm --volumes-from "$conteneur" -v "$REP_SAUVEGARDE":/backup alpine \
tar czf "/backup/${volume}_backup.tar.gz" -C /data .
docker rm -f "$conteneur"
done
Exécutez chmod +x backup_volumes.sh puis ./backup_volumes.sh. Vérifiez les archives dans sauvegardes/.
Sauvegarder les images
Pour exporter une ou plusieurs images :
docker save -o myapp_image.tar myapp:latest
Pour plusieurs images, listez-les après -o :
docker save -o toutes_images.tar image1:tag image2:tag
Le fichier tar résultant peut être copié sur une autre machine.
Sauvegarder les fichiers de configuration
Copiez manuellement les fichiers de configuration importants vers votre répertoire de sauvegarde :
# Exemple macOS
cp ~/Library/Group\ Containers/group.com.docker/settings.json ./sauvegardes/docker-settings.json
# Exemple Linux
sudo cp /etc/docker/daemon.json ./sauvegardes/daemon.json
Si vous utilisez des contextes Docker, sauvegardez le répertoire des contextes :
cp -r ~/.docker/contexts ./sauvegardes/docker-contextes
Restauration des sauvegardes
Restaurer un volume Docker
Pour restaurer un volume à partir d'une archive tar :
# Assurez-vous que le volume existe (créez-le si nécessaire)
docker volume create myapp_data
# Restaurer les données
docker run --rm -v myapp_data:/data -v $(pwd):/backup alpine \
tar xzf /backup/myapp_data_backup.tar.gz -C /data
Après la restauration, vérifiez en démarrant le conteneur et en consultant les journaux de l'application.
Restaurer les images
docker load -i myapp_image.tar
Confirmez avec docker images.
Restaurer les fichiers de configuration
Copiez les fichiers sauvegardés vers leurs emplacements d'origine. Pour les paramètres de Docker Desktop, assurez-vous que Docker Desktop est arrêté avant de restaurer pour éviter les écrasements :
# macOS
cp ./sauvegardes/docker-settings.json ~/Library/Group\ Containers/group.com.docker/settings.json
Redémarrez Docker Desktop ensuite.
Restaurer un projet Compose
Si vous avez sauvegardé votre docker-compose.yml, restaurez-le et exécutez :
docker compose up -d
Vérifiez l'état avec docker compose ps.
Vérification et diagnostic
Après la restauration, confirmez que tout fonctionne comme prévu.
Contrôles de santé de base
Exécutez ces commandes pour inspecter l'environnement :
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Attendu : liste des conteneurs en cours d'exécution avec statut Up
docker logs mon-conteneur --tail 50
# Attendu : journaux récents sans erreurs fatales
docker inspect mon-conteneur
# Vérifiez les montages, réseaux et variables d'environnement
Pour les projets Compose :
docker compose ps
# Assurez-vous que tous les services sont actifs
docker compose logs -f app
# Suivre les journaux du service 'app'
Tester la persistance des données
Un simple test de redémarrage permet de détecter les volumes manquants :
docker stop mon-conteneur
docker start mon-conteneur
# Vérifiez ensuite que les données sont toujours accessibles
Si les données disparaissent, le conteneur écrivait probablement dans son système de fichiers éphémère au lieu d'un volume.
Vérifier le contenu du volume
Montez le volume dans un conteneur temporaire et listez les fichiers :
docker run --rm -v myapp_data:/data alpine ls -la /data
Comparez avec les fichiers attendus.
Modes de défaillance et récupération
Même avec des sauvegardes, la restauration peut échouer. Comprenez les problèmes courants et comment les résoudre.
Erreurs de permission après restauration
Symptôme : Les journaux du conteneur affichent Permission denied lors de l'accès aux fichiers.
Cause : Les fichiers restaurés ont un mauvais propriétaire (par exemple, appartenant à root alors que l'application attend un utilisateur non root).
Récupération : Ajustez la propriété à l'intérieur du conteneur ou du volume. Par exemple :
docker run --rm -v myapp_data:/data alpine chown -R 1000:1000 /data
Volume non monté
Symptôme : L'application démarre mais les données sont absentes.
Cause : Mauvais nom de volume ou volume manquant.
Récupération : Vérifiez docker volume ls et la configuration de montage du conteneur avec docker inspect. Recréez le volume si nécessaire.
Restauration à partir d'une archive corrompue
Symptôme : L'extraction tar échoue ou produit des données incomplètes.
Cause : Fichier de sauvegarde corrompu (par exemple, transfert interrompu).
Récupération : Vérifiez toujours les archives de sauvegarde avec tar tzf avant de leur faire confiance. Relancez la sauvegarde si possible.
Paramètres Docker Desktop perdus
Symptôme : Les limites de ressources ou les paramètres de proxy sont revenus à la valeur par défaut.
Cause : Restauration des paramètres non effectuée ou mise à jour de Docker Desktop qui a écrasé les paramètres.
Récupération : Réappliquez à partir de la sauvegarde ou reconfigurez manuellement. Envisagez d'utiliser docker context pour gérer les paramètres.
Pièges courants et comment les éviter
1. Ignorer les montages de type bind dans le plan de sauvegarde
Les montages bind sont souvent oubliés car les données sont sur l'hôte, pas dans les volumes Docker. Solution : Documentez tous les chemins de montage bind à l'aide de docker inspect et incluez-les dans votre script de sauvegarde.
2. Sauvegarder une base de données en direct sans cohérence
Un tar d'un volume de base de données en cours d'exécution peut être incohérent. Solution : Arrêtez le conteneur avant la sauvegarde ou utilisez des outils spécifiques à la base de données comme pg_dump (PostgreSQL) ou mysqldump (MySQL). Vous pouvez aussi utiliser docker exec pour exécuter la commande de dump et sauvegarder le fichier résultant.
Exemple pour PostgreSQL :
docker exec mon-postgres pg_dump -U utilisateur mabase > db_backup.sql
3. Ne pas tester régulièrement les restaurations
Les sauvegardes peuvent être invalides. Solution : Planifiez un test de restauration mensuel dans un environnement temporaire. Automatisez si possible.
4. Compter sur la fonction d'exportation de Docker Desktop
L'exportation/importation via l'interface graphique de Docker Desktop peut être lente et ne pas inclure tous les volumes. Solution : Utilisez des méthodes en ligne de commande pour la précision et l'automatisation.
5. Stocker les sauvegardes sur le même disque
Si le disque tombe en panne, les sauvegardes sont également perdues. Solution : Copiez les sauvegardes vers un stockage externe ou le cloud.
Liste de contrôle opérationnelle
Utilisez cette liste pour garantir un processus de sauvegarde et de restauration de haute qualité.
| Élément | Rôle responsable | Fréquence | Vérification |
|---|---|---|---|
| Identifier tous les volumes et montages bind | Ingénieur DevOps | Mensuel | docker inspect sur tous les conteneurs |
| Mettre à jour le script de sauvegarde pour les nouveaux services | Développeur | À chaque changement de projet | Tester le script en staging |
| Exécuter la sauvegarde complète | Tâche planifiée (ou manuelle) | Quotidien | Vérifier les journaux de sauvegarde et les tailles de fichiers |
| Vérifier les archives de sauvegarde | Ingénieur DevOps | Hebdomadaire | tar tzf ou test de restauration |
| Tester la restauration dans un environnement propre | Ingénieur QA | Mensuel | Tests de fumée de l'application |
| Examiner les paramètres de Docker Desktop | Ingénieur DevOps | Trimestriel | Comparer les paramètres actuels à la sauvegarde |
Attribuez un responsable unique pour chaque ligne, pas un groupe. Par exemple, « Priya Shah, responsable de l'ingénierie » pour la revue de la politique de sauvegarde, à revoir trimestriellement.
Conclusion
La sauvegarde et la restauration de Docker Desktop ne sont pas une tâche ponctuelle mais une pratique continue. En comprenant ce qu'il faut sauvegarder, en utilisant des commandes cohérentes et en testant régulièrement les restaurations, vous pouvez éviter les pertes de données et minimiser les temps d'arrêt. Commencez dès aujourd'hui avec une simple sauvegarde de volume, puis étendez pour inclure les images, les configurations et l'automatisation. Rappelez-vous : une sauvegarde n'est aussi bonne que son dernier test de restauration réussi.
Comme prochaine étape, implémentez le script de sauvegarde de volume pour un conteneur critique, vérifiez l'archive et planifiez un test de restauration dans la semaine à venir.