Sauvegarde / Restauration de Conteneurs DOCKER

Si vous utilisé docker depuis un certain temps vous vous êtes déjà surement posé la question de savoir comment sauvegarder l’un de vos conteneurs docker. Afin de pouvoir le réutiliser directement, plus tard, sur votre machine courante ou alors sur une autre machine. Les conteneurs sont ces couches logicielles qui sont créés à partir d’une image de docker qui contient le système de fichiers Linux respectifs et les applications out of the box.  Nous allons voir plusieurs méthodes de sauvegarde et de restauration de conteneur docker.

1.           Sauvegarde de conteneur

Pour sauvegarder nos conteneurs, nous avons plusieurs méthodes, des méthodes de sauvegarde locale et celle qui consiste à faire des sauvegardes en ligne (sur le docker hub) en privé ou en public.

Quel que soit la méthode utilisa nous commençons par enregistre les modifications faites sur un conteneur

docker commit  -p  ID_conteneur_a_sauvegarder  Nom_Conteneur_de_sauvegarde

En gros lorsque l’on veut enregistrer les modifications faites sur un compteur on utilise la commande commit qui vas se charger de créer une image qui sera un instantané de notre conteneur.  Les modifications faites sur le 1er conteneur sont donc tout enregistrées dans notre image. L’intérêt ici est de pouvoir désormais instancier un conteneur directement à partir de l’image que l’on a enregistrée. Nous pouvons sauvegarde notre image en ligne ou en local dans un fichier compressé.

Exemple : je vais enregistrer le conteneur nommé webstack_wordpress_1

docker ps
docker commit -p 040bc5052124 webstack_wordpress_1_backup
docker images

1

Nous pouvons maintenant sauvegarder cette image que nous venons de créer en ligne ou alors directement dans un fichier compressé (.tar).

a.       Sauvegarde notre image docker en ligne.

Si vous souhaitez sauvegarder notre conteneur en ligne il vous faut utiliser les commandes qui vont suivre. Bien évidemment nous supposons ici que vous avez déjà réalisé les tâches précédentes afin de faire une image de l’instantanée de notre conteneur.

Vous devez commencer par créer un compte en ligne sur le docker hub c’est gratuit à l’heure actuelle profitez-en. Ensuite vous vous identifiez sur docker avec vos identifiants.

docker login

2

Une fois authentifié on va créer un tag pour notre image à exporter

Le nom de l’image respecte une convention de nommage. Cette convention de nommage veut que si notre image n’est pas officielle il faille  mettre votre ID (votre login docker Hub) au début de l’image suivie de slash (/) ensuite suivie du nom propre que vous donnez à l’image (suivant son contenu). Exemple ID_Docker_Hub/wordpress.

Pour taguer l’image dans le repository public. Vous devez juste renseigner le nom de l’image en respectant la convention plus haut. ( docker  tag  ID_de_image   ID_Docker_Hub/webstack_wordpress_1_backup )

Donc après s’être connecté, mon ID docker étant futuriste je tape la commande.

docker  tag  9c725b3ace47  futuriste/webstack_wordpress_1_backup
docker push futuriste/webstack_wordpress_1_backup

3

NB: j’ai ajouté l’option  –f à la commande tag pour forcer le tag, car j’avais fait une erreur à la première création.

 

b.      Sauvegarder notre conteneur docker en local

Si vous souhaitez sauvegarder votre image en local dans un fichier compressé (tar) afin de le de le déplacer sur un serveur hors ligne ou même sur votre espace de sauvegarder privée. Vous devez utiliser la commande docker Save et vous lui passé le chemin et le nom du fichier de sauvegarder ainsi que le nom de l’image à sauvegarder (l’image que l’on a enregistrée précédent).

docker save -o  webstack_wordpress_1_backup.tar   webstack_wordpress_1_backup

4

2.           Restauration de conteneur

a.       Restaurer depuis un conteneur en ligne

Pour restaurer une image que nous avons sauvegardée sur le hub en ligne il suffit d’utiliser la commande docker pull pour rapatrier l’image en local comme pour n’importe qu’elle image hébergée sur docker.

docker  pull  futuriste/webstack_wordpress_1_backup

5

 

b.      Restaurer depuis un conteneur en local ou un espace privé

Pour restaurer une image que nous avons sauvegardée en local, il suffit d’utiliser la commande docker load  et de lui indiquer en paramètre le chemin d’accès à notre fichier de sauvegarde.

docker load –i  webstack_wordpress_1_backup.tar

6

3.    Docker compose

Docker Compose est un outil qui permet de décrire la composition de notre infrastructure dans le fichier docker-compose.yml au format YAML. L’avantage d’un tel outil est que pour démarrer notre stack Web qui est constitué d’un serveur web et d’un serveur mysql.  Voici un exemple de conf.

Commencont déjà par installer le module Docker-Compose sur notre stack docker via l’outil de gestion de paquets PIP.

On commence par faire une mise à jour de la liste des paquets  et on Install CURL

sudo apt-get update  && apt-get install curl 

Ensuite on télécharge le binaire de docker-compose la dernière version actuelle 1.8.0.

curl -L https://github.com/docker/compose/releases/download/VERSION_NUM/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

 NB : remplacer VERSION_NUM par le numéro de votre version de docker-compose que vous voulez Ex : la 1.8.0 qui est la dernière version actuelle.  Exemple de commande :

curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

On donne les droits d’exécution au binaire de docker compose.

chmod +x /usr/local/bin/docker-compose

Pour connaitre la version de docker compose :   docker-compose –version

Ensuite on créer un fichier YAML qui contiendra les informations de lancement de nos conteneurs docker. Créez un dossier qui nous servira de contexte pour nos conteneurs et créez-y le fichier docker-compose.yml que vous avez créé.

Créée un dossier pour notre ensemble de conteneurs

mkdir wordpress_1
nano   wordpress_1/docker-compose.yml

Mettre le contenu suivant dans le fichier en question.

mysql:
  	image: mysql:5.7
  	volumes:
	  - "./.data/db:/var/lib/mysql"
  	restart: always
	  environment:
		MYSQL_ROOT_PASSWORD: docker2016
		MYSQL_DATABASE: wordpress1
		MYSQL_USER: wordpress1
		MYSQL_PASSWORD: wordpress1

wordpress:
	image: wordpress:latest
	links:
		- mysql
	ports:
		- "9000:80"
	restart: always
	environment:
		WORDPRESS_DB_HOST: mysql:3306
		WORDPRESS_DB_NAME: wordpress1
		WORDPRESS_DB_USER: wordpress1
		WORDPRESS_DB_PASSWORD: wordpress1

Donc en gros on décrit dans le fichier docker compose l’intégralité de la commande docker run utilisée lors du lancement du conteneur. Pas besoin d’explication si vous savez comment fonctionne la commande docker run vous pouvez essaiment de déduire ce que fais ce fichier docker-compose.   Pour avoir de information sur l’ensemble des options disponible dans un fichier docker-compose aller à l’adresse  Et vous pouvez avoir différent modèle de fichier docker compose préfet a cette adresse

ensuite avant de lancer la commande de docker compose on se positionne  dans le dossier que l’on vient de créer et qui contient notre fichier YAML.

cd wordpress_1
docker-compose up –d

Si lorsque vous lancez la commande docker-compose vous avez un message d’erreur qui vous informe que le client a une version différente de celle  du serveur essayé d’ajuster la version du client que vous téléchargez afin de trouver celle qui correspond à votre serveur.

J’avais utilisé la commande :

curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 

Avant de relancer la commande curl pour télécharger le nouveau fichier penser à supprimer l’ancien qui avait été téléchargé :

rm   /usr/local/bin/docker-compose

Pour corriger le problème, j’ai donc essayé de télécharger des versions antérieures. la version 1.4.0 avec la commande :

curl -L https://github.com/docker/compose/releases/download/1.4.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

N’oubliez pas d’attribuer les droits d’exécution à chaque fois.

chmod +x /usr/local/bin/docker-compose

Il m’affiche le message :

6 7

J’ai donc supprimé l’ancien fichier et télécharger la version 1.3.0 de l’exécutable et cella a fonctionné correctement.  J’ai utilisé la commande :

curl -L https://github.com/docker/compose/releases/download/1.3.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

Si vous souhaité désinstaller docker-compose alors que vous avez utilisé curl utiliser la commandé.

rm /usr/local/bin/docker-compose

Quelque commande docker-compose utile :

Ces commandes doivent être lancé dans l’un des répertoires qui contient un fichier YAML c’est-à-dire elle fonctionne pour un ensemble de conteneurs docker-compose uniquement.

Créer et démarrer un conteneur : docker-compose up

Créer et démarrer un conteneur en tâche de fond :   docker-compose up –d

Afficher la sortie standard des conteneurs : docker-compose logs

Arrêter les conteneurs : docker-compose stop

Supprimer les conteneurs : docker-compose rm

 

 

4.    Webographie :

 

W3BLOG

 

Laisser un commentaire

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