24/12/2024

AutresLinux

Comment sauvegarder et restaurer un conteneur Docker ?

I. Présentation

Si vous travaillez dans l'informatique depuis quelques années, vous savez sûrement à quel point il est important de réaliser des sauvegardes afin d'anticiper une quelconque perte de données. Même lorsque vous déployez une application conteneurisée, il est nécessaire de sauvegarder tous les fichiers et dossiers qui s'y rapportent afin, qu'en cas de coup dur, vous puissiez récupérer toutes ces données et restaurer votre conteneur sans heurts.

Dans cet article, nous allons voir comment sauvegarder un conteneur Docker en l'enregistrant en tant que fichier tar dans votre système local. C'est la manière la plus simple, la plus utilisée, et la plus "portative" d'après ce que j'ai pu constater.

II. Préparation de notre environnement et sauvegarde d'un conteneur

Pour notre exemple, nous allons instancier un conteneur Ubuntu en créant un simple fichier à l'intérieur pour simuler une simple modification, afin d'avoir un repère temporel.

docker run -it ubuntu bash
echo "2022" >> backup.txt
ls
cat backup.txt

Sortez du Shell de votre conteneur avec "exit", et commitez* votre conteneur pour créer un marqueur temporel :

docker commit -p <id> backup-10-01-2022

*Litérallement valider, confirmer en français son "état" à l'instant t (comme un snapshot), en créant une nouvelle image à partir de ce conteneur.

Dès lors, exportez cette nouvelle image (nommée "backup-10-01-2022") en un fichier .tar, par le biais de la commande suivante :

docker save -o ~/backup-ubuntu-container-10-01-2022.tar backup-10-01-2022

Ce fichier sera présent dans le dossier "/root". Voici un exemple en image :

III. Supprimer le conteneur et ses images associées

Afin de se positionner en condition réelle, je vous invite à effectuer les actions suivantes afin de simuler un nouvel environnement Docker (comme si nous étions sur une machine vierge équipée seulement de Docker).

Listez les conteneurs actif/inactif :

docker ps -a

Supprimez le conteneur initial Ubuntu par la biais de la commande ci-dessous :

docker rm <id>

Puis, listez vos images avec :

docker images

Vous constaterez que la commande "docker save" que nous avons exécutée précédemment a automatiquement créé une nouvelle image instantanée (snapshot). Celle-ci a été référencée automatiquement en tant qu'image par le moteur Docker.

Supprimez les deux images étant affiliées de base au conteneur Ubuntu (l'image de base ainsi que le snapshot) :

docker rmi -f <id> <id> # Dans mon cas <9b> <ba>

En image, cela donne l'enchaînement suivant :

Notre système hôte docker n'a donc plus aucun lien avec une quelconque image se rapportant à notre conteneur Ubuntu. Nous allons pouvoir passer à la phase de restauration.

Voici la liste des images restantes sur mon hôte Docker :

III. Restaurer un conteneur Docker

Pour ressusciter notre conteneur par l'intermédiaire d'une action de restauration, nous avons simplement besoin de saisir une seule commande. Positionnez-vous dans le dossier où vous avez sauvegardé votre conteneur (dans la première partie de l'article). Dans mon exemple, ce fichier se nomme "backup-ubuntu-container-10-01-2022.tar", et se situe dans le dossier /root/

Restaurez votre conteneur à l'aide de la commande suivante :

docker load -i ~/backup-ubuntu-container-10-01-2022.tar

Vous pourrez alors voir que votre snapshot a bien été monté dans le registre des images docker via cette commande :

docker images

Instanciez cette image par le biais de la commande suivante :

docker run -it backup-10-01-2022

Par la suite, vous pourrez constater que vous disposez toujours du fichier "backup.txt" stocké à la racine du système de fichiers de notre conteneur, ce qui prouve que la sauvegarde/restauration de notre conteneur a bel et bien fonctionné !

Entrez dans le Shell du conteneur via :

docker run -it backup-10-01-2022

Puis affichez le contenu du fichier que nous avons créé juste avant la sauvegarde / capture :

cat backup.txt

Notre conteneur a bel et bien été restauré à son état d'origine :

Ce tutoriel touche à sa fin, j'espère qu'il vous a plu ! Maintenant, vous n'aurez plus d'excuse si par mégarde, vous perdez ou supprimez l'un de vos conteneurs. Cela vous évitera de vous retrouver dans cette situation :

author avatar
Geoffrey Sauvageot-Berland Ingénieur Cybersécurité
Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.