Formation Devops | Formation Docker : 31- les volumes Docker

www.itgalaxy.io

Par défaut, les conteneurs Docker sont éphémères. Ils doivent être conçus pour pouvoir être supprimés sans perdre les données. Pour assurer cette persistance, on utilise les volumes Docker :

  • Ils sont initialisés à la création du container. Si l’image de base contient des données au point de montage spécifié, celles-ci sont copiés dans le volume lors de son initialisation
  • Ils peuvent être partagés entre plusieurs containers (exemple : pour créer des clusters de container)
  • Les changements apportés aux données du volume sont pris en compte immédiatement
  • Les données restent sur votre hôte même si le container vient à disparaître

Initialiser un volume (option : - v )

L’utilisation la plus simple est d’initialiser un volume à la création du conteneur :

$ docker run -d -v /var/log –nametest_volumedebian:latest/bin/sleep

Ici l’option -v /var/log permet d’initialiser un volume indépendant du conteneur qui contiendra les logs du conteneur :

$ docker inspecttest_volume
—————-8<——————–
“Mounts”: [
{
“Type”: “volume”,
“Name”: “e566163a0978a34dc1357cb4df7c9d86ddbb308de1c0ba26393e564223ec8c09”,
“Source”: “/var/lib/docker/volumes/e566163a0978a34dc1357cb4df7c9d86ddbb308de1c0
“Destination”: “/var/log”,
“Driver”: “local”,
“Mode”: “”,
“RW”: true,
“Propagation”: "”
—————-8<————-

La commande inspect permet de localiser le volume sur l’arborescence locale de l’hôte ( “Source”) et le point de montage dans le conteneur ( “Destination”)

$ sudols /var/lib/docker/volumes/e566163a0978a34dc1357cb4df7c9d86ddbb308de1c0ba26393e5
apt btmp faillog lastlog wtmp

On constate que les fichiers de logs du conteneur sont accessibles dans ce volume.

Partager un dossier entre l’hôte et un conteneur (bind mounts) :

L’autre utilisation des volumes est de partager un dossier entre le conteneur et le système hôte ( exemple :pour qu’un développeur PHP puisse éditer directement les fichiers depuis la machine hôte).

$ mkdirprojet-web
$ docker run -d –name test_volume2 -p 8004:80 -v ~/projet-web:/var/www/

Ici nous disposons d’un volume monté sur l’arborescence /var/www/html du conteneur et correspondant au dossier /home/user (~) de l’hôte :

$ echo"" > ~/projet-web/phpinfo.php

on crée un fichier phpinfo.phpdirectement sur l’arborescence du système hôte. On teste depuis un navigateur avec l’URL :http://:8004/phpinfo.php que le fichier est bien accédé par le conteneur.

$ docker inspect test_volume2
—————8<——————–
“Mounts”: [
{
“Type”: “bind”,
“Source”: “/home/formation/projet-web”,
“Destination”: “/var/www/html”,
“Mode”: “”,
“RW”: true,
“Propagation”: “rprivate”
————–8<——————–

la commande inspect permet de visualiser cette configuration du conteneur.
“Source” correspond à l’arborescence de l’hôte et “Destination” au point de montage dans le conteneur

Partager un volume de données entre plusieurs conteneurs (option : –volumes-from )

On démarre un conteneur qui “exporte” son arborescence /usr/share/nginx/html dans un volume

$ docker run -d -p 8005:80 -v /usr/share/nginx/html –name test_volume3

On démarre ensuite un conteneur en mode intéractifqui partage le même volume de données

$ docker run -it –volumes-from test_volume3 debian:latest/bin/bash

Depuis ce conteneur on crée un fichier de test (exit pour quitter le conteneur)

root@e232d8d9d527:/# echobonjour > /usr/share/nginx/html/test.html

On teste depuis un navigateur avec l’URL http://docker-x.univ-rouen.fr:8005/test.html que le fichier est bien accessible depuis le conteneur test_volume3.

Docker ne supprime pas les volumes à la suppression des conteneurs. Pour éviter l’accumulation de volumes orphelins, il faut utiliser la commande rm avec l’option -v docker rm-v nom_conteneur ou CID ou faire une purge régulière avec la commande
docker volume rm$(docker volume ls –qfdangling=true)






1. Nous contactez


2. Infra as a Service

  • Description: Infrastructure cloud évolutive et sécurisée
  • Links:

3. Projets Développeurs


4. Développeurs


5. Formations Complètes


6. Marketplace

7. Blogs


This website is powered by ItGalaxy.io