Méthode : 1. Utilisez la commande run, la syntaxe est "docker run --name test1 -it -v" ; 2. Utilisez l'instruction VOLUME de dockerfile pour créer un point de montage, la syntaxe est "VOLUME ["/data1 ","/data2 "]"; 3. Utilisez les volumes partagés du conteneur.
L'environnement d'exploitation de ce tutoriel : système linux7.3, version docker-1.13.1, ordinateur Dell G3.
Avant d'introduire l'instruction VOLUME, examinons les exigences du scénario suivantes :
1 Le conteneur est créé sur la base de l'image et le système de fichiers du conteneur final inclut le fichier de lecture. seule la couche de l'image + peut Dans la couche d'écriture, la persistance des données des opérations de processus dans le conteneur est stockée dans la couche inscriptible du conteneur. Une fois le conteneur supprimé, les données disparaissent à moins que nous ne les sauvegardions manuellement (ou créions une nouvelle image basée sur le conteneur). Les données conservées par le processus conteneur peuvent-elles être enregistrées sur l'hôte ? De cette façon, même si le conteneur est supprimé, les données sont toujours là.
2. Lorsque nous développons une application Web, l'environnement de développement est local sur l'hôte, mais l'environnement de test en cours d'exécution est placé sur le conteneur Docker.
Dans ce cas, après avoir modifié les fichiers (tels que html, js, etc.) sur l'hôte, je dois les synchroniser avec le conteneur. C'est évidemment plus gênant.
3. Plusieurs conteneurs exécutent un ensemble de services associés. Et s'ils souhaitent partager certaines données ?
Bien sûr, nous pouvons penser à diverses solutions à ces problèmes. Docker lui-même fournit un mécanisme qui peut associer un répertoire sur l'hôte à un répertoire dans le conteneur (appelé point de montage ou volume). Le contenu sous le point de montage sur le conteneur est l'hôte. Le contenu du répertoire est similaire à celui-ci. le mécanisme de montage sous les systèmes Linux. Dans ce cas, lorsque nous modifions le contenu du répertoire sur l'hôte, nous n'avons pas besoin de synchroniser le conteneur, et cela prendra effet immédiatement pour le conteneur. Les points de montage peuvent être partagés par plusieurs conteneurs.
Présentons le mécanisme de mise en œuvre spécifique.
1. Exécutez la commande : docker run --name test -it -v /home/xqh/myimage:/data ubuntu /bin/bash
L'indicateur -v est défini dans le conteneur Un point de montage /data (qui est un répertoire dans le conteneur) et associe le contenu du répertoire /home/xqh/myimage sur l'hôte à /data.
De cette façon, les opérations sur le répertoire /data dans le conteneur et les opérations sur /home/xqh/myimage sur l'hôte sont complètement synchronisées en temps réel, car ces deux répertoires pointent en réalité vers le répertoire hôte.
2. Exécutez la commande : docker run --name test1 -it -v /data ubuntu /bin/bash
L'indicateur -v ci-dessus définit uniquement le point de montage du conteneur et ne spécifie pas le répertoire hôte associé. À ce stade, Docker liera automatiquement un répertoire sur l'hôte. Vous pouvez le visualiser via la commande docker inspect.
xqh@ubuntu:~/myimage$ docker inspect test1 [ { "Id": "1fd6c2c4bc545163d8c5c5b02d60052ea41900a781a82c20a8f02059cb82c30c", ............................. "Mounts": [ { "Name": "0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01", "Source": "/var/lib/docker/volumes/0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true } ],
Chaque information sous Mounts ci-dessus enregistre les informations d'un point de montage sur le conteneur. La valeur "Destination" est le point de montage du conteneur et la valeur "Source" est le répertoire hôte correspondant. On voit que le répertoire hôte correspondant à cette méthode est automatiquement créé. Son but n'est pas de le modifier sur l'hôte, mais de le partager avec plusieurs conteneurs.
Le point de montage créé via l'indicateur -v de la commande docker run décrite ci-dessus ne peut être valide que pour le conteneur créé. Un point de montage peut être créé dans l'image via la directive VOLUME du fichier docker, de sorte que tout conteneur créé via l'image ait un point de montage. Une autre différence est que le point de montage créé via la commande VOLUME ne peut pas spécifier le répertoire correspondant sur l'hôte et est automatiquement généré.
#test FROM ubuntu MAINTAINER hello1 VOLUME ["/data1","/data2"]
Le fichier dock ci-dessus spécifie deux points de montage /data1 et /data2 via l'instruction VOLUME.
Nous utilisons docker inspect pour afficher le conteneur généré par l'image créée par ce fichier docker, et nous pouvons voir les informations suivantes
"Mounts": [ { "Name": "d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21", "Source": "/var/lib/docker/volumes/d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21/_data", "Destination": "/data1", "Driver": "local", "Mode": "", "RW": true }, { "Name": "6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36", "Source": "/var/lib/docker/volumes/6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36/_data", "Destination": "/data2", "Driver": "local", "Mode": "", "RW": true } ],
Oui Voir les informations sur les deux points de montage.
Ensuite, nous créons un autre conteneur qui peut partager les volumes /data1 et /data2 avec test1 (conteneur déjà créé). Cela se fait en utilisant l'indicateur --volumes-from dans le docker. run. , tel que :
peut provenir de différentes sources, telles que :
docker run --name test2 -it --volumes-from test1 ubuntu /bin/bash
, ou il peut s'agir de la même image, telle que :
docker run --name test3 -it --volumes-from test1 myimage /bin/bash
Les trois conteneurs ci-dessus test1, test2, test3 ont tous deux répertoires /data1. et /data2, et le répertoire Le contenu est partagé Si un conteneur modifie le contenu, d'autres conteneurs peuvent l'obtenir.
Si plusieurs conteneurs doivent partager des données (comme des bases de données persistantes, des fichiers de configuration ou des fichiers de données, etc.), vous pouvez envisager de créer un conteneur de données spécifique avec 1 ou plusieurs volumes.
D'autres conteneurs partagent les volumes de ce conteneur de données via –volumes-from.
Le volume du conteneur correspondant essentiellement au répertoire sur l'hôte, ce conteneur de données n'a pas besoin d'être démarré.
Par exemple : docker run --name dbdata myimage echo « data containers »
Explication : Il y a un volume, le partage de données entre les conteneurs est plus pratique, mais il y a aussi de nombreux problèmes qui doivent être résolus, comme le contrôle des autorisations , sauvegarde de données, suppression de volume, etc. Ces contenus seront introduits dans les articles suivants.
Apprentissage recommandé : "Tutoriel vidéo Docker"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!