Sauvegarder et restaurer un volume Docker

AL
Abdallah LISSER
01/10/2026
12 min de lecture
102 vues
Sauvegarder et restaurer un volume Docker

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 :

Cycle de sauvegarde et restauration d’un volume Docker

Pourquoi sauvegarder un volume Docker ?

Prenons une application utilisant un volume Docker pour conserver ses données.

Le fonctionnement peut être représenté ainsi :

Application, conteneur Docker, volume et données persistantes

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 :

Création du volume volume_backup

Vérifiez maintenant la liste des volumes :

docker volume ls

Vous devriez retrouver :

Liste des volumes Docker

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 :

Contenu du volume Docker

Vérifiez également le contenu du premier fichier :

cat /data/fichier.txt

Résultat :

Contenu du fichier fichier.txt

Puis le second :

cat /data/documents/document.txt

Résultat :

Contenu du fichier document.txt

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 :

Volume toujours présent après suppression du conteneur

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 :

Vérification des données du volume

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 à :

Dossier docker-backups

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 :

Archive volume_backup.tar.gz

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 :

Contenu de l’archive de sauvegarde

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 :

Suppression du volume volume_backup

Vérifiez maintenant :

docker volume ls

Liste des volumes après suppression

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 :

Recréation du volume volume_backup

Vérifiez :

docker volume ls

Le volume apparaît de nouveau :

Volume volume_backup recréé

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 :

Volume Docker vide

Notre nouveau volume est donc bien vide.

La situation est maintenant la suivante :

Ancien volume supprimé, nouveau volume vide et sauvegarde disponible

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.

Restauration de l’archive dans le volume Docker

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 :

Fichiers restaurés dans le volume Docker

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 :

Contenu restauré de fichier.txt

Puis pour le second fichier :

docker run --rm -v volume_backup:/data ubuntu:24.04 cat /data/documents/document.txt

Résultat :

Contenu restauré de document.txt

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

Sauvegarde Docker avec la date

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

Sauvegarde Docker avec date et heure

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 :

Application utilisant un conteneur Docker et un volume

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 :

MariaDB, volume Docker et fichiers de base de données

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 :

  • mysqldump pour MySQL et MariaDB ;
  • pg_dump pour 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 :

Sauvegarde Docker locale et distante

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

0 / 2500 caractères
* Champs obligatoires. Votre commentaire sera publié immédiatement.

Soyez le premier à commenter cet article !

Image agrandie