Introduction
Docker est une plateforme de conteneurs qui constitue un environnement standardisé, léger, virtualisé, portable et défini par logiciel, permettant au logiciel de s'exécuter de manière isolée par rapport aux autres logiciels s'exécutant sur la machine hôte physique. Docker est un composant déterminant de l'aspect Développement et Intégration Continus du développement logiciel. En fournissant un environnement d'exécution cohérent, Docker garantit que le logiciel se comporte de la même manière, quelle que soit la machine hôte physique sur laquelle il est déployé. Pour un aperçu complet de l'écosystème Docker, consultez cet article.
Bien que les conteneurs Docker soient autonomes, ils ont parfois besoin de partager l'accès aux données ou de conserver les données sur le disque après l'arrêt du conteneur. Les données peuvent se présenter sous la forme de bases de données, de fichiers journaux ou de données générées par l'utilisateur. Il est impossible d'inclure de telles données dans un fichier de configuration d'image Docker, mais elles doivent être disponibles pour que votre application fonctionne comme prévu. Le partage et la persistance des données dans les conteneurs Docker sont gérés par les volumes Docker. Les volumes Docker peuvent être créés lors de la création du conteneur ou créés ultérieurement et attachés aux conteneurs. Dans ce tutoriel, nous aborderons les quatre différentes manières de partager des données entre conteneurs.
Prérequis
- Configurez un serveur exécutant Ubuntu 20.04 et Créez un utilisateur non-root avec des privilèges sudo. Connectez-vous avec l'utilisateur non-root pour procéder aux étapes suivantes.
- Installez Docker - nous avons un tutoriel sur Comment installer et utiliser Docker sur Ubuntu, vous devez suivre les étapes 1, 2, 3 et 4. Cela devrait fonctionner pour n'importe quelle distribution Ubuntu.
Veuillez noter que, bien que nous travaillions avec Ubuntu 20.04, les instructions et les commandes pour Docker fonctionneront sur tout autre système d'exploitation sur lequel Docker est installé et où l'utilisateur sudo a été ajouté au groupe docker, comme expliqué dans les prérequis ci-dessus.
Étape 1 : Créer des volumes Docker indépendants
Nous allons commencer par créer des volumes indépendants qui ne sont liés à aucun conteneur Docker. Pour ce faire, nous disposons de la commande docker volume create qui a été introduite dans la version 1.9 de Docker. Entrez la commande suivante pour créer un volume nommé Step1DataVolume :
|
1 |
docker volume create --name Step1DataVolume |
Vous devriez voir la sortie suivante indiquant que la création du volume a réussi :
![]()
Maintenant que nous avons un volume indépendant, nous pouvons créer un nouveau conteneur à partir de l'image officielle Ubuntu à titre d'exemple pour l'utiliser. Entrez la commande suivante pour créer le conteneur et attacher le volume :
|
1 |
docker run -ti --rm -v Step1DataVolume:/Step1DataVolume ubuntu |
Dans cette commande, le drapeau --rm supprimera automatiquement le conteneur après la sortie. Le drapeau -v est utilisé pour spécifier et monter le volume. Le drapeau -v prend le nom du volume, deux points, et le chemin absolu à l'intérieur du conteneur où le volume doit apparaître. Gardez à l'esprit que lors de l'exécution de la commande, si les répertoires spécifiés dans le chemin n'existent pas, ils seront créés. S'ils existent déjà, le volume monté masquera le contenu existant. Pour le drapeau -ti , le -t donne accès au terminal, et le -i nous permet d'interagir avec le conteneur via le terminal.
Une fois à l'intérieur du conteneur, exécutez la commande suivante pour écrire des données dans le volume :
|
1 |
echo "Step One Sample Text" > /Step1DataVolume/StepOne.txt |
Tapez exit et appuyez sur Entrée pour quitter le conteneur. Comme expliqué, le conteneur est automatiquement supprimé lorsque vous quittez, grâce au drapeau --rm, cependant, le volume restera accessible.
Pour vérifier que le volume existe toujours, vous pouvez utiliser la commande docker volume inspect :
|
1 |
docker volume inspect Step1DataVolume |
Vous devriez voir la sortie suivante :

Ensuite, créons un nouveau conteneur. Tout d'abord, attachez le volume et voyez si nous pouvons accéder au texte que nous avons créé dans le conteneur précédent. Entrez la commande suivante pour créer et exécuter le conteneur en utilisant le ubuntu image :
|
1 |
docker run -ti --rm -v Step1DataVolume:/Step1DataVolume ubuntu |
À l'intérieur du conteneur, exécutez la commande suivante pour vérifier que le StepOne.txt fichier existe :
|
1 |
cat /Step1DataVolume/StepOne.txt |
Vous devriez voir une sortie similaire :

Ensuite, saisissez exit et appuyez sur entrée pour quitter le conteneur. Dans cette étape, vous avez appris à gérer la persistance des données à l'aide de volumes Docker indépendants et à attacher des volumes aux conteneurs.
Étape 2 : Créer un volume Docker qui persiste les données lorsque vous supprimez un conteneur
Dans cette étape, nous utiliserons une seule commande pour créer un volume en même temps que nous créons un conteneur. Nous supprimerons ensuite le conteneur et attacherons le volume à un nouveau conteneur. La commande est similaire à celle utilisée à l'Étape 1, cependant, nous ajoutons une option --name, pour spécifier un nom pour le conteneur :
|
1 |
docker run -ti --name=Step2Container1 -v Step2DataVolume:/Step2DataVolume ubuntu |
Une fois à l'intérieur du conteneur, entrez la commande suivante pour écrire des données dans le volume et vérifier que les données s'y trouvent :
|
1 2 3 |
echo "Step Two Sample Text" > /Step2DataVolume/StepTwo.txt cat /Step2DataVolume/StepTwo.txt |
Voici la sortie des trois commandes :

Ensuite, quittez le conteneur. Lorsque vous redémarrerez le conteneur à l'aide de la commande suivante, le volume s'attachera automatiquement :
|
1 |
docker start -ai Step2Container1 |
À l'intérieur du conteneur, vérifiez que le volume est monté en vérifiant l'existence du StepTwo.txt fichier à l'aide de la commande :
|
1 |
cat /Step2DataVolume/StepTwo.txt |
Voici la sortie :

Vous pouvez quitter le conteneur maintenant. Docker empêche la suppression d'un volume référencé par un autre conteneur. Vous pouvez essayer de supprimer le volume à l'aide de la commande :
|
1 |
docker volume rm Step2DataVolume |
Vous devriez voir le message d'erreur dans la sortie :
![]()
Supprimons le conteneur en utilisant l'ID de conteneur affiché dans la sortie avec la commande docker rm :
|
1 |
docker rm e3932e65e484bbf4524ca8de1b1dd99c4e92c12f92a9d6b0567a643d0aa6bb2d |
Remplacez l' ID du conteneur par l' ID de votre conteneur affiché dans votre terminal. La commande supprime le conteneur, mais elle ne supprime pas le volume que nous avons créé. Vous pouvez lister les volumes disponibles à l'aide de la commande docker volume ls pour vérifier :
|
1 |
docker volume ls |
Voici la sortie :

Pour supprimer le conteneur créé à l'Étape 2, entrez la commande suivante :
|
1 |
docker volume rm Step2DataVolume |
Dans cette étape, vous avez pu créer un volume Docker en même temps que vous créiez un conteneur. Voyons comment nous pouvons créer un volume à partir d'un répertoire existant contenant des données.
Étape 3 : Créer un volume Docker à partir d'un répertoire existant contenant des données
Si vous souhaitez copier des données dans un volume, vous pouvez créer un volume lors de la création d'un conteneur et fournir le chemin d'accès à un répertoire contenant les données dans l'image de base. Dans la commande ci-dessous, nous créons un conteneur et ajoutons un volume de données au niveau de /var, qui est un répertoire contenant des données dans l'image de base :
|
1 |
docker run -ti --rm -v Step3DataVolume:/var ubuntu |
Lorsque la commande s'exécute, le contenu du répertoire /var de l'image de base sera copié dans le volume. Le volume peut être attaché à un nouveau conteneur. Ensuite, quittez le conteneur :

Entrez la commande suivante pour créer le conteneur, attacher le volume et lister le contenu du volume à l'aide de la commande ls :
|
1 |
docker run --rm -v Step3DataVolume:/Step3DataVolume ubuntu ls Step3DataVolume |
Vous devriez voir une sortie similaire de la commande, qui est une copie du contenu du répertoire /var de l'image de base désormais disponible dans le Step3DataVolume:

Bien que le montage du /var répertoire comme nous l'avons fait dans cet exemple puisse être peu pratique, cela nous aide à comprendre que vous pouvez monter n'importe quel répertoire créé dans vos images personnalisées sur un volume Docker pour rendre les données disponibles pour d'autres conteneurs.
Étape 4 : Partage de données entre plusieurs conteneurs Docker
Dans la plupart des cas, vous souhaiterez que plusieurs conteneurs accèdent aux données d'un seul volume Docker. Dans les exemples précédents, nous n'avons attaché un volume qu'à un seul conteneur. Maintenant, vous allez apprendre à attacher un volume à plusieurs conteneurs. Bien que vous puissiez y parvenir facilement, Docker ne gère pas le verrouillage des fichiers. Pour que plusieurs conteneurs écrivent sur le même volume, vous devez concevoir individuellement les applications exécutées dans ces conteneurs pour gérer l'écriture dans des magasins de données partagés afin d'éviter la corruption des données.
- Créez Step4Container1 et Step4DataVolume
Utilisez la commande docker run avec l'option --name pour créer un conteneur nommé :
|
1 |
docker run -ti --name=Step4Container1 -v Step4DataVolume:/Step4DataVolume ubuntu |
À l'intérieur du conteneur, exécutez la commande suivante pour créer un fichier texte et ajouter du texte :
|
1 |
echo "Texte d'exemple de l'étape quatre" > /Step4DataVolume/StepFour.txt |
Après cela, quittez le conteneur et revenez à l'environnement hôte. Maintenant, nous voulons créer un autre conteneur et monter les volumes de Step4Container1 sur celui-ci.
- Créez Step4Container2 et attachez les volumes du conteneur Step4Container1
Exécutez la commande suivante pour créer Step4Container2 et monter les volumes de Step4Container1:
|
1 |
docker run -ti --name=Step4Container2 --volumes-from Step4Container1 ubuntu |
À l'intérieur du conteneur, utilisez la commande cat pour vérifier la persistance des données :
|
1 |
cat /Step4DataVolume/StepFour.txt |
Vous devriez voir la sortie suivante :

Nous pouvons ajouter du texte supplémentaire au fichier depuis Step4Container2 en saisissant la commande suivante :
|
1 |
echo "Nous ajoutons du texte pendant que nous sommes à l'intérieur de Step4Container2" >> /Step4DataVolume/StepFour.txt |
Quittez le conteneur après cela et nous retournerons à Step4Container1 pour vérifier si les données sont toujours présentes.
- Vérifier les modifications apportées au volume Docker entre différents conteneurs
Pour afficher les modifications, vous devez d'abord redémarrer le Step4Container1 en utilisant la commande :
|
1 |
docker start -ai Step4Container1 |
Vérifiez les modifications à l'aide de la commande :
|
1 |
cat /Step4DataVolume/StepFour.txt |
Vous devriez voir une sortie similaire à la capture d'écran ci-dessous :

Une fois que vous avez vérifié que les deux conteneurs peuvent lire et écrire des données sur le même volume, vous pouvez maintenant quitter le conteneur. Comme mentionné, Docker ne gère pas le verrouillage des fichiers, c'est le rôle de la logique applicative exécutée à l'intérieur des conteneurs de gérer l'accès en lecture-écriture aux magasins de données partagés. Docker permet de monter des volumes en lecture seule pour éviter la corruption accidentelle des données par des conteneurs qui ne nécessitent qu'un accès en lecture seule en ajoutant :ro comme indiqué dans l'exemple suivant.
- Monter un volume sur un conteneur Docker en lecture seule
Pour cet exemple, nous allons créer un conteneur nommé Step4Container3. Dans la commande de création, nous montons les volumes de Step4Container1 et ajoutons :ro pour spécifier que ce conteneur a un accès en lecture seule mais ne peut pas écrire sur le volume. Exécutez la commande suivante dans votre terminal :
|
1 |
docker run -ti --name=Step4Container3 --volumes-from Step4Container1:ro ubuntu |
Une fois à l'intérieur du conteneur, vous pouvez lire le fichier texte dans le volume en saisissant la commande suivante :
|
1 |
cat /Step4DataVolume/StepFour.txt |

Cependant, si vous essayez de supprimer le fichier à l'aide de la commande :
|
1 |
rm /Step4DataVolume/StepFour.txt |
Vous obtiendrez un message d'erreur dans votre terminal comme :
![]()
Une fois que vous avez vérifié les permissions de lecture-écriture, vous pouvez quitter le conteneur. Si vous souhaitez nettoyer les conteneurs et le volume créés dans ce tutoriel, exécutez les commandes suivantes :
|
1 2 3 |
docker rm Step4Container1 Step4Container2 Step4Container3 docker volume rm Step4DataVolume |
Dans cette étape, vous avez appris à partager des données entre plusieurs conteneurs à l'aide de volumes Docker ainsi qu'à monter des volumes de données sur des conteneurs en lecture seule.
Conclusion
Dans ce tutoriel, vous avez créé des volumes Docker et appris à partager des données entre des conteneurs Docker. En abordant le partage de données entre conteneurs, nous avons noté que la logique applicative individuelle à l'intérieur du conteneur doit gérer le verrouillage des fichiers pour éviter la corruption des données lors de l'écriture dans des stockages de données partagés, car Docker ne dispose d'aucune implémentation pour gérer le verrouillage des fichiers.
Pour plus de ressources sur l'utilisation de Docker, vous pouvez consulter d'autres tutoriels sur notre blog :
- Comment partager des données entre un conteneur Docker et un hôte
- Nettoyer les ressources Docker – Images, conteneurs et volumes
- Déployer Laravel, Nginx et MySQL avec Docker Compose
- Installer et configurer Docker sur CentOS 7
Bonne informatique !
Commentaires
Aucun commentaire pour l'instant. Soyez le premier.