Table des matières
- Introduction
- Pourquoi sauvegarder un volume Docker ?
- Créer notre volume Docker
- Ajouter des données dans le volume
- Supprimer le conteneur sans supprimer le volume
- Vérifier que les données sont toujours présentes
- Créer un dossier pour les sauvegardes
- Sauvegarder le volume Docker
- Comprendre la commande de sauvegarde
- Vérifier la sauvegarde
- Vérifier le contenu de l’archive
- Simuler la perte du volume
- Recréer le même volume
- Vérifier que le volume est vide
- Restaurer la sauvegarde dans volume_backup
- Comprendre la commande de restauration
- Vérifier la restauration
- Vérifier le contenu des fichiers
- Ajouter la date aux sauvegardes
- Ajouter également l’heure
- Sauvegarder un volume utilisé par une application
- Cas particulier des bases de données
- Où conserver les sauvegardes ?
- Conclusion
Introduction
Dans le tutoriel précédent, nous avons découvert les volumes Docker et leur rôle dans la persistance des données.
Un volume Docker permet de conserver les données d’un conteneur même lorsque celui-ci est supprimé. Cependant, cela ne signifie pas que les données sont protégées contre une erreur humaine, une panne du serveur ou une suppression accidentelle du volume.
Il est donc important de savoir sauvegarder les données présentes dans un volume afin de pouvoir les restaurer en cas de problème.
Dans ce tutoriel, nous allons travailler avec un seul volume nommé volume_backup.
Nous allons :
- créer le volume ;
- ajouter des données à l’intérieur ;
- sauvegarder le volume dans une archive ;
- supprimer le volume pour simuler une perte de données ;
- recréer le même volume ;
- restaurer les données dans ce volume ;
- vérifier que nos fichiers ont bien été récupérés.
Le principe sera donc le suivant :
Pourquoi sauvegarder un volume Docker ?
Prenons une application utilisant un volume Docker pour conserver ses données.
Le fonctionnement peut être représenté ainsi :
Lorsqu’un conteneur est supprimé, le volume peut continuer d’exister.
Les données sont donc toujours disponibles.
En revanche, si le volume est lui-même supprimé, les données qu’il contient sont perdues.
Une sauvegarde permet de conserver une copie indépendante de ces données.
Le fonctionnement devient alors :
volume_backup ? volume_backup.tar.gz
En cas de perte du volume, nous pouvons le recréer puis remettre les données à l’intérieur :
volume_backup.tar.gz ? volume_backup
C’est précisément ce que nous allons réaliser dans ce tutoriel.
Créer notre volume Docker
Commençons par créer le volume que nous utiliserons pendant tout le tutoriel :
docker volume create volume_backup
Docker devrait retourner :
Vérifiez maintenant la liste des volumes :
docker volume ls
Vous devriez retrouver :
Notre volume volume_backup est maintenant disponible.
Ajouter des données dans le volume
Pour pouvoir tester notre sauvegarde, nous allons ajouter quelques fichiers dans le volume.
Lancez un conteneur Ubuntu en montant volume_backup dans /data :
docker run -it --name ubuntu-backup -v volume_backup:/data ubuntu:24.04 bash
Une fois dans le conteneur, créez un premier fichier :
echo "Sauvegarde Docker SysNetTuto" > /data/fichier.txt
Créez ensuite un répertoire :
mkdir /data/documents
Puis ajoutez un second fichier :
echo "Document important" > /data/documents/document.txt
Vérifiez le contenu du volume :
ls -R /data
Vous devriez obtenir :
Vérifiez également le contenu du premier fichier :
cat /data/fichier.txt
Résultat :
Puis le second :
cat /data/documents/document.txt
Résultat :
Nous avons maintenant des données à sauvegarder.
Supprimer le conteneur sans supprimer le volume
Quittez le conteneur :
exit
Puis supprimez-le :
docker rm ubuntu-backup
Le conteneur ubuntu-backup est supprimé.
En revanche, notre volume existe toujours.
Vérifiez :
docker volume ls
Vous devriez toujours retrouver :
Cela montre bien que le cycle de vie d’un volume est indépendant de celui du conteneur.
Vérifier que les données sont toujours présentes
Nous pouvons utiliser un nouveau conteneur temporaire pour afficher le contenu du volume :
docker run --rm -v volume_backup:/data ubuntu:24.04 ls -R /data
Vous devriez retrouver :
Nos données sont donc toujours présentes.
Nous pouvons maintenant les sauvegarder.
Créer un dossier pour les sauvegardes
Sur votre machine Docker, créez un dossier destiné à recevoir les archives :
mkdir -p ~/docker-backups
Placez-vous dans ce dossier :
cd ~/docker-backups
Vérifiez votre emplacement :
pwd
Vous devriez obtenir quelque chose ressemblant à :
C’est dans ce dossier que nous allons créer notre fichier de sauvegarde.
Sauvegarder le volume Docker
Nous allons maintenant sauvegarder le contenu de volume_backup.
Exécutez :
docker run --rm \
-v volume_backup:/source:ro \
-v "$(pwd)":/backup \
ubuntu:24.04 \
tar -czf /backup/volume_backup.tar.gz -C /source .
Une fois la commande terminée, le conteneur temporaire utilisé pour effectuer la sauvegarde est automatiquement supprimé.
Notre volume volume_backup, lui, n’est pas modifié.
Comprendre la commande de sauvegarde
Regardons maintenant le fonctionnement de cette commande.
La première partie :
docker run --rm
demande à Docker de lancer un conteneur temporaire.
L’option --rm permet de supprimer automatiquement ce conteneur lorsque la commande est terminée.
Nous montons ensuite notre volume :
-v volume_backup:/source:ro
Le volume volume_backup devient accessible dans le conteneur à l’emplacement /source.
Le suffixe :ro signifie read-only, c’est-à-dire lecture seule.
Le conteneur peut donc lire les données du volume, mais il ne peut pas les modifier.
Nous montons ensuite notre dossier de sauvegarde :
-v "$(pwd)":/backup
$(pwd) représente le dossier courant de notre machine.
Comme nous sommes dans ~/docker-backups, ce dossier devient accessible dans le conteneur sous /backup.
Enfin, nous utilisons la commande :
tar -czf /backup/volume_backup.tar.gz -C /source .
Elle crée une archive compressée contenant tout le contenu de /source, c’est-à-dire le contenu de notre volume.
Les principales options utilisées sont :
c: créer une archive ;z: compresser avec gzip ;f: indiquer le fichier de destination ;-C /source: se placer dans/source;.: prendre tout le contenu du répertoire.
Nous obtenons donc :
volume_backup ? volume_backup.tar.gz
Vérifier la sauvegarde
Vérifiez maintenant que l’archive existe :
ls -lh ~/docker-backups
Vous devriez retrouver :
Notre sauvegarde est maintenant créée.
Vérifier le contenu de l’archive
Créer une archive ne suffit pas. Il est également important de vérifier qu’elle contient bien les fichiers attendus.
Exécutez :
tar -tzf volume_backup.tar.gz
Vous devriez retrouver :
Nous retrouvons bien :
fichier.txt;- le dossier
documents; documents/document.txt.
Notre sauvegarde contient donc les données du volume.
Simuler la perte du volume
Nous allons maintenant simuler un problème beaucoup plus sérieux : la suppression du volume Docker.
Avant de continuer, vérifiez une dernière fois que l’archive existe :
ls -lh ~/docker-backups/volume_backup.tar.gz
Une fois la sauvegarde confirmée, supprimez le volume :
docker volume rm volume_backup
Docker devrait retourner :
Vérifiez maintenant :
docker volume ls
Le volume contenant nos fichiers a été supprimé.
Nos données originales ne sont donc plus présentes dans Docker.
Cependant, nous possédons toujours notre archive :
volume_backup.tar.gz
Nous allons l’utiliser pour récupérer les données.
Recréer le même volume
Pour restaurer notre environnement, nous allons recréer exactement le même volume.
Exécutez :
docker volume create volume_backup
Docker retourne :
Vérifiez :
docker volume ls
Le volume apparaît de nouveau :
Attention : même s’il porte exactement le même nom, il s’agit d’un nouveau volume vide.
Le fait de recréer volume_backup ne restaure pas automatiquement les anciennes données.
Vérifier que le volume est vide
Avant de restaurer notre sauvegarde, vérifions son contenu :
docker run --rm -v volume_backup:/data ubuntu:24.04 ls -la /data
Vous ne devez pas retrouver les fichiers précédemment créés :
Notre nouveau volume est donc bien vide.
La situation est maintenant la suivante :
Nous allons maintenant restaurer les fichiers dans ce même volume.
Restaurer la sauvegarde dans volume_backup
Placez-vous dans le dossier contenant l’archive :
cd ~/docker-backups
Puis exécutez :
docker run --rm \
-v volume_backup:/destination \
-v "$(pwd)":/backup:ro \
ubuntu:24.04 \
tar -xzf /backup/volume_backup.tar.gz -C /destination
La commande extrait maintenant le contenu de notre archive directement dans volume_backup.
Nous effectuons donc :
volume_backup.tar.gz ? volume_backup
Comprendre la commande de restauration
Le volume est monté avec :
-v volume_backup:/destination
Le volume volume_backup devient accessible dans le conteneur sous /destination.
Cette fois-ci, nous ne mettons pas :ro.
C’est normal : le conteneur doit pouvoir écrire les fichiers restaurés dans le volume.
Nous montons ensuite le dossier contenant la sauvegarde :
-v "$(pwd)":/backup:ro
Notre dossier ~/docker-backups devient accessible sous /backup.
Nous le montons en lecture seule car le conteneur n’a pas besoin de modifier notre archive.
Enfin :
tar -xzf /backup/volume_backup.tar.gz -C /destination
Cette commande permet d’extraire le contenu de l’archive dans le volume.
Les principales options sont :
x: extraire l’archive ;z: utiliser gzip ;f: indiquer le fichier à lire ;-C /destination: extraire les fichiers dans/destination.
Notre volume contient maintenant les données provenant de la sauvegarde.
Vérifier la restauration
Nous allons maintenant vérifier que nos fichiers sont revenus.
Exécutez :
docker run --rm -v volume_backup:/data ubuntu:24.04 ls -R /data
Vous devriez retrouver :
Nos fichiers sont de nouveau présents.
Vérifier le contenu des fichiers
Vérifions maintenant que les données contenues dans les fichiers sont également correctes.
Pour fichier.txt :
docker run --rm -v volume_backup:/data ubuntu:24.04 cat /data/fichier.txt
Résultat :
Puis pour le second fichier :
docker run --rm -v volume_backup:/data ubuntu:24.04 cat /data/documents/document.txt
Résultat :
Nous avons donc récupéré exactement les données présentes avant la suppression du volume.
Ajouter la date aux sauvegardes
Dans un environnement réel, il est déconseillé d’écraser systématiquement la sauvegarde précédente.
Nous pouvons ajouter la date au nom du fichier.
Exécutez :
docker run --rm \
-v volume_backup:/source:ro \
-v "$(pwd)":/backup \
ubuntu:24.04 \
sh -c 'tar -czf /backup/volume_backup_$(date +%Y-%m-%d).tar.gz -C /source .'
Par exemple, une sauvegarde réalisée avec la date à laquelle la commande a été exécutée, comme le 17 août 2026, donnera :
volume_backup_2026-08-17.tar.gz
Le lendemain, nous pourrions obtenir :
volume_backup_2026-08-18.tar.gz
Cela permet de conserver plusieurs versions du volume.
Ajouter également l’heure
Si plusieurs sauvegardes sont effectuées dans la même journée, nous pouvons également ajouter l’heure :
docker run --rm \
-v volume_backup:/source:ro \
-v "$(pwd)":/backup \
ubuntu:24.04 \
sh -c 'tar -czf /backup/volume_backup_$(date +%Y-%m-%d_%H-%M-%S).tar.gz -C /source .'
Nous pourrions par exemple obtenir :
volume_backup_2026-08-17_11-42-16.tar.gz
Chaque sauvegarde possède ainsi un nom différent.
Sauvegarder un volume utilisé par une application
Dans notre exemple, aucun conteneur n’utilise activement volume_backup au moment de la sauvegarde.
Dans un environnement réel, la situation peut être différente.
Un volume peut être utilisé par une application qui écrit régulièrement des données :
Si des fichiers sont modifiés pendant leur archivage, la sauvegarde peut ne pas représenter un état parfaitement cohérent des données.
Pour certaines applications, il peut donc être préférable d’arrêter temporairement le conteneur avant la sauvegarde.
Commencez par afficher les conteneurs :
docker ps
Arrêtez le conteneur concerné :
docker stop nom_du_conteneur
Effectuez ensuite la sauvegarde :
docker run --rm \
-v volume_backup:/source:ro \
-v "$(pwd)":/backup \
ubuntu:24.04 \
tar -czf /backup/volume_backup.tar.gz -C /source .
Puis redémarrez le conteneur :
docker start nom_du_conteneur
Cela évite que l’application modifie les fichiers pendant leur archivage.
Cas particulier des bases de données
Il faut être particulièrement prudent lorsqu’un volume contient directement les fichiers d’une base de données.
Par exemple :
Créer simplement une archive du volume pendant que MariaDB écrit dans ses fichiers peut produire une sauvegarde incohérente.
Pour les bases de données, il est généralement préférable d’utiliser les outils de sauvegarde prévus par le moteur.
Par exemple :
mysqldumppour MySQL et MariaDB ;pg_dumppour PostgreSQL.
La sauvegarde directe d’un volume avec tar reste particulièrement adaptée aux volumes contenant des fichiers classiques, des configurations, des documents ou des données applicatives pour lesquelles la cohérence peut être garantie.
Où conserver les sauvegardes ?
Dans notre exemple, la sauvegarde est enregistrée dans :
~/docker-backups
Pour un laboratoire ou des tests, cela peut être suffisant.
En production, conserver uniquement les sauvegardes sur le même serveur que Docker est risqué.
Si le disque du serveur tombe en panne, nous pourrions perdre simultanément :
- les conteneurs ;
- les volumes ;
- les sauvegardes locales.
Il est donc préférable de copier les archives vers un autre emplacement.
Par exemple :
Ainsi, même en cas de perte complète du serveur Docker, les sauvegardes restent disponibles.
Conclusion
Dans ce tutoriel, nous avons réalisé le cycle complet de sauvegarde et de restauration d’un volume Docker.
Nous avons commencé par créer volume_backup et y enregistrer plusieurs fichiers.
Nous avons ensuite créé une archive : volume_backup ? volume_backup.tar.gz
Pour simuler une véritable perte de données, nous avons supprimé le volume : volume_backup ? supprimé
Nous avons ensuite recréé un volume portant exactement le même nom :
docker volume create volume_backup
Ce nouveau volume était vide.
Enfin, nous avons utilisé notre archive pour remettre les données à l’intérieur : volume_backup.tar.gz ? volume_backup
Après restauration, nous avons retrouvé les mêmes fichiers et leur contenu.
Cette manipulation montre une différence essentielle : un volume assure la persistance des données d’un conteneur, tandis qu’une sauvegarde permet de récupérer les données lorsque le volume lui-même est perdu.
Commentaires
Laisser un commentaire
Soyez le premier à commenter cet article !