Comment sauvegarder et restaurer un conteneur Docker ?
Sommaire
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 :