GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Où sont stockés les images, les conteneurs et les volumes Docker sur le système hôte Linux ?

Vous voulez savoir où se trouvent les images, les conteneurs et les volumes Docker ?

Dans un environnement Linux typique, vous pouvez trouver l'image Docker et les données de conteneur dans :

/var/lib/docker/

Si votre serveur manque d'espace, vous devez absolument jeter un œil à ce répertoire.

Principalement, toutes les entités liées à Docker sont situées dans /var/lib/docker . Mais examinons cela plus spécifiquement, avec l'image et le conteneur Alpine comme exemple pratique.

Remarque :Veuillez noter que ces informations sont uniquement à des fins éducatives. La manipulation avec les répertoires/fichiers Docker du système hôte n'est jamais recommandée. Les commandes docker et docker-compose doivent toujours être la méthode préférée. Les répertoires/fichiers Docker situés physiquement ne doivent être accessibles ou manipulés qu'en dernier recours lors de situations d'urgence.

Emplacement des images Docker

Chaque fois que vous utilisez le docker pull commande ou exécutez docker-compose up -d pour préparer le lancement des applications, c'est ici que les images sont stockées sur un serveur Ubuntu :

/var/lib/docker/overlay2

Ici, Overlay2 est le pilote de stockage Docker par défaut sur Ubuntu. Vous pouvez le confirmer en exécutant le docker info commande et recherchez le pilote de stockage :

...
Storage Driver: overlay2
...

S'il est différent du vôtre, vous utilisez un autre pilote de stockage pour Docker. De même, l'emplacement du répertoire serait nommé selon le même pilote de stockage. La disponibilité du pilote de stockage dépend de la prise en charge du noyau.

Emplacements d'images spécifiques

Si vous recherchez les emplacements d'images spécifiques, vous pouvez utiliser la commande inspect sur Docker pour l'image extraite.

Supposons, par exemple, que j'ai extrait l'image alpine avec docker pull alpine . Exécutez la commande suivante pour l'inspecter :

[email protected]:~$ docker inspect alpine

Une fois que vous exécutez la commande, vous remarquerez trois champs à l'intérieur du Data sous-section sous GraphDriver :

...
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
                "UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
            },

...

Tous les chemins de répertoire ci-dessus sont les emplacements physiques de l'image alpine sur le système hôte. Prenez note du grand répertoire nommé par hachage dans les trois champs ci-dessus :64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e .

Au total, il existe en fait quatre types de champs :

Répertoire inférieur :Ce sont les couches en lecture seule d'un système de fichiers superposé. Pour docker, ce sont les calques d'image assemblés dans l'ordre.

RepSupérieur :Il s'agit de la couche de lecture-écriture d'un système de fichiers superposé. Pour docker, c'est l'équivalent de la couche spécifique au conteneur qui contient les modifications apportées par ce conteneur.

RépertoireTravail :Il s'agit d'un répertoire requis pour la superposition, il a besoin d'un répertoire vide pour un usage interne.

Répertoire fusionné :Ceci est le résultat du système de fichiers superposé. Docker chroote effectivement dans ce répertoire lors de l'exécution du conteneur.

Cité de cette référence (bon pour une lecture plus approfondie).

Emplacement des conteneurs Docker

Comme les images, les conteneurs sont également stockés dans le même répertoire basé sur le pilote de stockage.

/var/lib/docker/overlay2

Emplacements de conteneurs spécifiques

Si vous recherchez les emplacements de conteneurs spécifiques, vous pouvez à nouveau utiliser le inspect commande sur le conteneur en cours d'exécution.

Supposons, par exemple, que j'ai exécuté le conteneur alpin avec docker run -ti -d alpine . Lorsque vous exécutez docker ps , vous verrez qu'il est en cours d'exécution :

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED         STATUS         PORTS     NAMES
cb341d6a28fa   alpine    "/bin/sh"   6 seconds ago   Up 5 seconds             confident_banzai

Ici, le conteneur a été nommé aléatoirement confident_banzai . Inspectons-le :

[email protected]:~$ docker inspect confident_banzai

Une fois que vous avez exécuté la commande ci-dessus, vous remarquerez les quatre champs mentionnés précédemment dans le Data sous-section sous GraphDriver . Ces répertoires sont ceux où les données du conteneur sont physiquement situées sur votre système hôte :

...
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3-init/diff:/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "MergedDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/merged",
                "UpperDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/diff",
                "WorkDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/work"
            },
            "Name": "overlay2"
        },
...

Référence pour une lecture plus approfondie.

Les répertoires ci-dessus sont les emplacements physiques de vos données de conteneur dans le système hôte. N'oubliez pas le grand répertoire nommé par hachage :64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e à partir des Images Docker section? Le répertoire en dessous s'appelle diff , comme vous pouvez le voir dans le LowerDir section après : , qui est maintenant un point de montage pour le conteneur - extrait de l'image de base UpperDir !

Ces répertoires resteront disponibles même après l'arrêt du conteneur. Ainsi, le chemin complet qui est commun entre l'image (MergedDir , UpperDir et WorkDir ) et le conteneur (LowerDir point de montage) est :

/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/

Le but de l'image est contigu après s'être assigné au conteneur jusqu'au LowerDir niveau, c'est pourquoi les quatre champs sont alloués et basés sur un répertoire différent (avec un nouveau hash) du fait du caractère dynamique de ce dernier, qui devient :

/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/
Remarque :Le processus de montage de répertoire de l'image de base au conteneur est très similaire à la façon dont vous montez des volumes sur Docker !

Emplacement des volumes Docker

Contrairement aux images et conteneurs Docker, les emplacements physiques des volumes sont assez simples. Les volumes sont situés à :

/var/lib/docker/volumes/

Emplacements de volumes spécifiques

Dans ce cas, il existe principalement deux types. L'un est des volumes Docker réguliers et l'autre est des montages liés.

Volumes Docker

Si vous recherchez les emplacements de volumes spécifiques, vous pouvez utiliser le docker volume ls d'abord la commande et vérifiez le nom ou l'ID du volume.

Par exemple, j'ai exécuté le conteneur alpin avec la commande suivante avec un volume :

[email protected]:~$ docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine

Maintenant, un volume nommé test-data sera automatiquement créé. Créons maintenant un fichier nommé test.md à l'intérieur de cet emplacement :

[email protected]:~$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"

Vérifiez que le fichier a bien été créé :

[email protected]:~$ docker exec -ti alpine-container sh
/ # ls /var/lib/app/content/
test.md
/ # exit

Lorsque vous exécutez docker volume ls , le volume nommé test-data serait listé :

[email protected]:~$ docker volume ls
DRIVER    VOLUME NAME
local     d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local     e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local     test-data

Enfin, vous pouvez confirmer l'emplacement réel du fichier sur votre système hôte :

[email protected]:~$ sudo ls -l /var/lib/docker/volumes/test-data/_data
total 0
-rw-r--r-- 1 root root 0 Oct  6 23:20 test.md

Par conséquent, le chemin du volume monté est toujours situé dans un répertoire nommé _data dans le répertoire de volume respectif.

Vous pouvez également vérifier ces chemins à la manière de Docker en utilisant le docker volume inspect commande suivie du nom ou de l'ID du volume et en regardant dans le Mountpoint paramètre dans la sortie :

[email protected]:~$ docker volume inspect test-data
[
    {
        "CreatedAt": "2021-10-06T23:20:20+05:30",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data",
        "Name": "test-data",
        "Options": null,
        "Scope": "local"
    }
]

Lier les montages

Les emplacements des montages liés sont assez évidents et encore plus simples car vous montez le volume directement à partir d'un emplacement côté hôte :

[email protected]:~$ mkdir /home/avimanyu/test-data
[email protected]:~$ docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine

Dans ce cas, un volume monté lié nommé test-data deviendra disponible côté conteneur sous la forme /var/lib/app/content .

Résumé

Dans ce rapide tutoriel, j'ai adopté une approche générique basée sur Linux pour montrer les emplacements physiques des images, conteneurs et volumes Docker résidant sur votre serveur Linux (Ubuntu 20.04 dans ce cas) au niveau de l'hôte.

Si vous souhaitez partager des commentaires, des commentaires ou des suggestions concernant cette approche, veuillez laisser vos réflexions dans la section des commentaires ci-dessous.


Docker
  1. Comment supprimer toutes les images Docker, les conteneurs, les volumes, les réseaux et les ressources inutilisées

  2. Quelle est la différence entre un conteneur Linux et une image ?

  3. Comment créer, répertorier et supprimer des conteneurs Docker sous Linux

  4. Qu'est-ce que Docker (et les conteneurs Linux ?)

  5. Comment utiliser les images Docker, les conteneurs et les Dockerfiles en profondeur

Où sont stockés les images et les conteneurs Docker sur l'hôte ?

Comment obtenir l'adresse IP d'un conteneur Docker à partir de l'hôte

Comment utiliser Docker Cp pour copier des fichiers entre l'hôte et les conteneurs

Comment créer des volumes Docker sous Windows en toute simplicité

Comment vérifier l'utilisation de l'espace disque pour les images Docker, les conteneurs et les volumes

Comment copier des fichiers entre l'hôte et le conteneur Docker