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.
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.