[LINUX] À propos du volume Docker

Je joue avec Docker dans l'environnement EC2 (Amazon Linux2). Quand j'ai remarqué, les points de montage proliféraient sur le système d'exploitation hôte. .. .. J'ai donc essayé différentes choses pour approfondir ma compréhension de Volume.

À propos de VOLUME dans Docker

Extrait de la description de dockerfile-VOLUME dans la référence Docker L'instruction> VOLUME crée un point de montage avec le nom spécifié et en fait un volume montable en externe à partir d'un autre hôte ou conteneur. La commande docker run initialise le volume nouvellement créé comme emplacement pour stocker les données à l'emplacement spécifié à partir de l'image de base.

Après avoir lu ceci, j'ai compris que "le répertoire spécifié par VOLUME est créé dans le conteneur", mais ** "En faire un volume montable en externe à partir d'un autre hôte ou conteneur" ** , Il a été reconnu que lorsque le conteneur a été lancé (exécuté), -v était utilisé pour définir un répertoire pouvant être lié à un répertoire sur le système d'exploitation hôte. (Si vous ne spécifiez pas -v, il ne sera pas persistant après tout et les données seront supprimées)

J'ai donc vérifié le fonctionnement de Volume de différentes manières.

Environnement de vérification

Vérification du fonctionnement

#Le volume n'existe pas(Avant de démarrer le conteneur)
[~]docker volume ls
DRIVER              VOLUME NAME

#Démarrer le conteneur à partir de l'image CentOS
[~]docker run --name test_container -dt centos

#Le volume n'existe pas(Après avoir démarré le conteneur)
docker volume ls
DRIVER              VOLUME NAME
#dockerfile(Volume basé sur l'image CentOS=/test_Définir le volume)
ARG baseimagetag=latest
FROM centos:${baseimagetag} AS baseimage
VOLUME /test_volume

#création d'image Docker
[~]docker build -t centos_mod .

#Le volume n'existe pas(Avant de démarrer le conteneur)
[~]docker volume ls
DRIVER              VOLUME NAME

#CentOS(Modification)Lancer le conteneur à partir de l'image
[~]docker run --name test_container -dt centos_mod

#Le volume est créé(Après avoir démarré le conteneur)
docker volume ls
DRIVER              VOLUME NAME
local               ec1feead17bb87e24d3e2e6db716daf58d12747cbdd0b510fd30f507d7f8308b

#Vérifiez le point de montage sur le système d'exploitation hôte de Volume
#Automatiquement/var/lib/docker/volumes/Vous pouvez voir que le point de montage est créé en dessous
[~]docker inspect ec1feead17bb87e24d3e2e6db716daf58d12747cbdd0b510fd30f507d7f8308b
[
    {
        "CreatedAt": "2020-07-10T08:30:00+09:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/ec1feead17bb87e24d3e2e6db716daf58d12747cbdd0b510fd30f507d7f8308b/_data",
        "Name": "ec1feead17bb87e24d3e2e6db716daf58d12747cbdd0b510fd30f507d7f8308b",
        "Options": null,
        "Scope": "local"
    }
]

#Arrêter et supprimer des conteneurs
[~]docker stop test_container
[~]docker rm test_container

#Volume confirmé(Après avoir supprimé le conteneur)
#Le point de montage sur le système d'exploitation hôte existe
docker volume ls
DRIVER              VOLUME NAME
local               ec1feead17bb87e24d3e2e6db716daf58d12747cbdd0b510fd30f507d7f8308b
#CentOS(Modification)Lancer le conteneur à partir de l'image(Nommez le point de montage du système d'exploitation hôte(host_mount)Spécifié par
[~]docker run --name test_container -v host_mount:/test_volume -dt centos_mod
baf6954e9dbce1dd9ad3ae5c8286e63c01fd39689d79053725ae1800b70ea752

#Le volume est créé(Après avoir démarré le conteneur)
[~]docker volume ls
DRIVER              VOLUME NAME
local               host_mount

#Vérifiez le point de montage sur le système d'exploitation hôte de Volume
#Automatiquement/var/lib/docker/volumes/Sous subordonné-Nom spécifié par v/_Vous pouvez voir que le point de montage est créé dans les données
docker inspect host_mount
[
    {
        "CreatedAt": "2020-07-10T22:22:49+09:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/host_mount/_data",
        "Name": "host_mount",
        "Options": null,
        "Scope": "local"
    }
]
#CentOS(Modification)Lancer le conteneur à partir de l'image(Répertoire des points de montage du système d'exploitation hôte(/test_mount)Spécifié par
[~]docker run --name test_container -v /test_mount:/test_volume -dt centos_mod
e5e70d6235dbfe54950e2053f61236c1450d43c0b3aacfa38341e37cfacecaaa

#Vérifier le volume(Après avoir démarré le conteneur)
#Le point de montage ne s'affiche pas avec la commande suivante
[~]docker volume ls
DRIVER              VOLUME NAME

#Vérifiez le point de montage à partir des informations du conteneur
[~]docker inspect test_container
##Extrait
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/test_mount",
                "Destination": "/test_volume",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

Ce que j'ai compris en vérifiant l'opération

--Lorsque vous démarrez un conteneur à l'aide d'une image Docker avec VOLUME défini, Le répertoire spécifié par VOLUME est créé dans le conteneur en tant que zone de persistance.

(Bonus) Volume Comment vérifier si l'image est spécifiée

Affichez les informations de l'image avec docker inspect <nom de l'image> et vérifiez si le répertoire est spécifié dans la partie ** "Volumes": **.

Exemple) Pour le conteneur MySQL / Var / lib / mysql est défini dans le conteneur comme une zone de persistance

"Volumes": {
        "/var/lib/mysql": {}
},

Recommended Posts

À propos du volume Docker
À propos de CAGR
J'ai vérifié le contenu du volume du docker
À propos de virtiofs
À propos de python-apt
À propos de l'autorisation
À propos de sklearn.preprocessing.Imputer
À propos de Gunicorn
À propos de requirements.txt
À propos des paramètres régionaux
Installer Docker
À propos de l'axe = 0, axe = 1
À propos de l'importation
À propos de numpy
À propos de pip
À propos de Linux
Django + Docker
À propos de numpy.newaxis
À propos d'Endian
À propos de Linux
À propos de l'importation
À propos de Linux
À propos de Linux
À propos de cv2.imread
À propos de _ et __
À propos de wxPython