Gestion des données à l'aide du volume dans Docker (mémorandum personnel)

Vue d'ensemble de la gestion des données dans Docker

Les données dynamiques gérées par le conteneur peuvent être placées dans la couche de lecture / écriture du conteneur en cours d'exécution, mais elles présentent certains inconvénients. Par exemple, lorsqu'un conteneur est supprimé, les données du conteneur disparaissent également. Il ne peut pas être partagé entre les conteneurs. Les performances d'écriture sont également médiocres par rapport à l'écriture sur des données sur l'hôte.

Gestion des données à l'aide du volume

Pour Linux

Créé sous / var / lib / docker / volumes. Il sera automatiquement monté sur le conteneur. Le volume créé peut être nommé et géré, et peut être monté sur plusieurs conteneurs. De plus, les fichiers communs peuvent être lus et écrits par plusieurs conteneurs. le volume ne disparaît pas lorsque le conteneur est supprimé et ne disparaît pas tant qu'il n'a pas été explicitement supprimé. Étant donné que le déplacement de fichiers n'est pas recommandé, il s'agit d'une fonctionnalité fournie pour gérer les fichiers sur le conteneur.

Commandes de gestion de volume de base

-#Docker pour éviter les différences environnementales-Démarrez une machine virtuelle avec la commande machine et travaillez dessus.
% docker-machine create vol-test
-#Connexion SSH à l'hôte créé
% docker-machine ssh vol-test
-#volume docker créer un nouveau nom de volume
$ docker volume create my-vol
-#Vérifier le volume existant
$ docker volume ls
-#Dans la zone de la machine hôte gérée par Docker, "mon-Un volume appelé "vol" est créé.
DRIVER              VOLUME NAME
local               my-vol

Confirmation détaillée du volume

-#volume docker inspecter le nom du volume
$ docker valume inspect my-vol

Supprimer le volume

-#volume du docker nom du volume rm
$ docker valume rm my-vol

Montez le volume sur le conteneur.

Monter avec -v

-# docker run -itd --nom Nom du conteneur-v nom du volume:Source du conteneur de point de montage
$ docker run -itd —-name mount-c1 -v vol1:/app nginx:latest

Dans l'argument de -v, spécifiez le nom du volume séparé par deux-points et le chemin à monter sur le conteneur. Cette fois, le nom du volume est ** "vol1" **, et comme il n'existe pas, il sera créé en tant que nouveau volume. Le point de montage dans le conteneur sera ** "/ app" **. Vous pouvez voir que "vol1" est créé par la commande docker volume ls. Vous pouvez vérifier le volume monté en vérifiant les détails du conteneur avec la commande docker inspect.

Connectez-vous au conteneur et vérifiez les informations de volume.

$ docker exec -it mount-c1 /bin/bash
# df
Filesystem     1K-blocks   Used Available Use% Mounted on
overlay         18714000 189496  17535376   2% /
tmpfs              65536      0     65536   0% /dev
tmpfs             504516      0    504516   0% /sys/fs/cgroup
shm                65536      0     65536   0% /dev/shm
/dev/sda1       18714000 189496  17535376   2% /app
tmpfs             504516      0    504516   0% /proc/asound
tmpfs             504516      0    504516   0% /proc/acpi
tmpfs             504516      0    504516   0% /proc/scsi
tmpfs             504516      0    504516   0% /sys/firmware

Vous pouvez voir que "/ app" est monté.

Essayez de télécharger le fichier dans / app

-#Aller à l'App
# cd app
-#Création d'un fichier "hogehoge"
# touch hogehoge
# ls
hogehoge

Montez "mount -c1" dans un autre conteneur et vérifiez si le même fichier existe.

Montez avec --mount.

-# docker run -itd --nom Nom du conteneur--mount source=nom du volume,target=Source du conteneur de point de montage
$ docker run -itd —-name mount-c2 —-mount source=vol1,target=/app nginx:latest

Lors du montage avec --mount, spécifiez le volume de la source de montage dans l'argument de la source et la destination de montage dans l'argument de la cible. L'opération est la même que -v.

$ docker exec -it mount-c2 /bin/bash
# ls -l /app

Vous pouvez voir le fichier Hogehoge. En montant le même volume sur plusieurs conteneurs de cette manière, les fichiers peuvent être partagés. Cependant, cette méthode ne peut partager que des conteneurs s'exécutant sur le même hôte, pas entre différents hôtes.

Monter le volume lors du démarrage du conteneur

-# docker run -itd --nom Nom du conteneur--mount source=nom du volume,destination=Source du conteneur de point de montage
$ docker run -itd —-name mount-c3 —-mount source=copy-vol,destination=/etc/nginx nginx

Un volume appelé "copy-vol" a été créé et monté dans "/ etc / nginx". Le fichier de configuration et le répertoire de "etc / nginx" sont copiés en volume.

$ docker volume inspect copy-vol

Vous pouvez voir le point de montage en regardant les détails de Volume. Lorsqu'un nouveau volume est créé et monté, les fichiers qui existaient déjà sont copiés et existent maintenant sur le volume. Un autre modèle de montage consiste à monter un volume qui existe déjà. Les fichiers du conteneur ne sont jamais copiés. Jusqu'au dernier, le volume existant est monté au point de montage spécifié et les fichiers existants qui existaient sur le conteneur sont masqués par le volume de montage et deviennent invisibles.

Comment monter un volume en lecture seule

Vous pouvez définir s'il faut le rendre en lecture / écriture ou en lecture seule pour chaque conteneur. Comment monter en lecture seule à l'aide de l'indicateur de montage.

-# docker run -itd --nom Nom du conteneur--mount source=nom du volume,destination=Point de montage,source de conteneur en lecture seule
$ docker run -itd —-name mount-c4 -—mount source=copy-vol,destination=/etc/nginx,readonly nginx

Spécifiez "lecture seule" séparés par "," virgules.

$ docker inspect mount-c4

Vous pouvez voir que "RW": false dans "Mounts".

Comment monter un volume en lecture seule avec -v

-# docker run -itd --nom Nom du conteneur-v nom du volume:Point de montage:source du conteneur ro
$ docker run -itd —-name mount-c5 -v copy-vol:/etc/nginx:ro nginx

Il peut être défini en lecture seule en définissant le nom du volume: point de montage: ro.

Recommended Posts

Gestion des données à l'aide du volume dans Docker (mémorandum personnel)
Gestion des données à l'aide de Bindmount de Docker et de tmpfs (mémorandum personnel)
Construction d'un environnement d'analyse de données avec Docker (mémorandum personnel)
Construire un pipeline CICD à l'aide de Docker (mémorandum personnel)
Docker Machine (Mémorandum personnel)
Réseau Docker (mémorandum personnel)
Création d'un hôte Docker sur AWS à l'aide de Docker Machine (mémorandum personnel)
Existe en utilisant la spécification dans Spring Data JPA
[Personnel] Mémorandum JUnit5 (travail en cours)
Mémorandum Docker
Accélérez le volume en utilisant Docker avec vscode.
Construction de l'environnement de développement Django à l'aide de Docker-compose (mémorandum personnel)
Mémorandum technique (Docker)
Mémorandum de commande Docker