Où sont stockées les images Docker? Explication des chemins des conteneurs Docker

Docker a été largement adopté et est utilisé pour exécuter et mettre à l'échelle des applications en production. De plus, il peut être utilisé pour démarrer rapidement des applications en exécutant une seule commande Docker.

Les entreprises investissent également de plus en plus d'efforts pour améliorer le développement des conteneurs Docker locaux et distants, ce qui présente également de nombreux avantages.

Vous pouvez obtenir les informations de base sur votre configuration Docker en exécutant:

$ docker info ... Storage Driver: overlay2 Docker Root Dir: /var/lib/docker ... 

La sortie contient des informations sur votre pilote de stockage et votre répertoire racine du docker.

L'emplacement de stockage des images et des conteneurs Docker

Un conteneur Docker se compose de paramètres réseau, de volumes et d'images. L'emplacement des fichiers Docker dépend de votre système d'exploitation. Voici un aperçu des systèmes d'exploitation les plus utilisés:

  • Ubuntu: /var/lib/docker/
  • Feutre: /var/lib/docker/
  • Debian: /var/lib/docker/
  • Les fenêtres: C:\ProgramData\DockerDesktop
  • MacOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

Sous macOS et Windows, Docker exécute des conteneurs Linux dans un environnement virtuel. Par conséquent, il y a d'autres choses à savoir.

Docker pour Mac

Docker n'est pas nativement compatible avec macOS, donc Hyperkit est utilisé pour exécuter une image virtuelle. Ses données d'image virtuelle se trouvent dans:  

~/Library/Containers/com.docker.docker/Data/vms/0

Dans l'image virtuelle, le chemin est le chemin Docker par défaut /var/lib/docker.

Vous pouvez étudier votre répertoire racine Docker en créant un shell dans l'environnement virtuel:

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 

Vous pouvez arrêter cette session en appuyant sur Ctrl + a , puis en appuyant sur k et y .

Docker pour Windows

Sous Windows, Docker est un peu fractionné. Il existe des conteneurs Windows natifs qui fonctionnent de la même manière que les conteneurs Linux. Les conteneurs Linux sont exécutés dans un environnement virtuel basé sur Hyper-V minimal.

La configuration et l'image virtuelle pour exécuter les images Linux sont enregistrées dans le dossier racine Docker par défaut.

C:\ProgramData\DockerDesktop

Si vous inspectez des images régulières, vous obtiendrez des chemins Linux comme:

$ docker inspect nginx ... "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff" ... 

Vous pouvez vous connecter à l'image virtuelle en:

docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh

Là, vous pouvez vous rendre à l'emplacement référencé:

$ cd /var/lib/docker/overlay2/585...9eb/ $ ls -lah drwx------ 4 root root 4.0K Feb 6 06:56 . drwx------ 13 root root 4.0K Feb 6 09:17 .. drwxr-xr-x 3 root root 4.0K Feb 6 06:56 diff -rw-r--r-- 1 root root 26 Feb 6 06:56 link -rw-r--r-- 1 root root 57 Feb 6 06:56 lower drwx------ 2 root root 4.0K Feb 6 06:56 work

La structure interne du dossier racine Docker

À l'intérieur /var/lib/docker, différentes informations sont stockées. Par exemple, les données pour les conteneurs, les volumes, les builds, les réseaux et les clusters.

$ ls -la /var/lib/docker total 152 drwx--x--x 15 root root 4096 Feb 1 13:09 . drwxr-xr-x 13 root root 4096 Aug 1 2019 .. drwx------ 2 root root 4096 May 20 2019 builder drwx------ 4 root root 4096 May 20 2019 buildkit drwx------ 3 root root 4096 May 20 2019 containerd drwx------ 2 root root 12288 Feb 3 19:35 containers drwx------ 3 root root 4096 May 20 2019 image drwxr-x--- 3 root root 4096 May 20 2019 network drwx------ 6 root root 77824 Feb 3 19:37 overlay2 drwx------ 4 root root 4096 May 20 2019 plugins drwx------ 2 root root 4096 Feb 1 13:09 runtimes drwx------ 2 root root 4096 May 20 2019 swarm drwx------ 2 root root 4096 Feb 3 19:37 tmp drwx------ 2 root root 4096 May 20 2019 trust drwx------ 15 root root 12288 Feb 3 19:35 volumes 

Images Docker

Les contenus les plus lourds sont généralement des images. Si vous utilisez la superposition du pilote de stockage par défaut2, vos images Docker sont stockées dans /var/lib/docker/overlay2. Là, vous pouvez trouver différents fichiers qui représentent des couches en lecture seule d'une image Docker et une couche au-dessus qui contient vos modifications.

Explorons le contenu en utilisant un exemple:

$ docker image pull nginx $ docker image inspect nginx [ { "Id": "sha256:207...6e1", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "ng[email protected]:ad5...c6f" ], "Parent": "", ... "Architecture": "amd64", "Os": "linux", "Size": 126698063, "VirtualSize": 126698063, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/585...9eb/diff: /var/lib/docker/overlay2/585...9eb/diff", "MergedDir": "/var/lib/docker/overlay2/585...9eb/merged", "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff", "WorkDir": "/var/lib/docker/overlay2/585...9eb/work" }, ... 

Le LowerDir contient les couches en lecture seule d'une image. La couche lecture-écriture qui représente les modifications fait partie de UpperDir . Dans mon cas, le dossier NGINX UpperDir contient les fichiers journaux:

$ ls -la /var/lib/docker/overlay2/585...9eb/diff total 8 drwxr-xr-x 2 root root 4096 Feb 2 08:06 . drwxr-xr-x 3 root root 4096 Feb 2 08:06 .. lrwxrwxrwx 1 root root 11 Feb 2 08:06 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Feb 2 08:06 error.log -> /dev/stderr

Le MergedDir représente le résultat des UpperDir et LowerDir qui sont utilisés par Docker pour exécuter le conteneur. Le WorkDir est un répertoire interne pour overlay2 et doit être vide.

Volumes Docker

Il est possible d'ajouter un magasin persistant aux conteneurs pour conserver les données plus longtemps que le conteneur existe ou pour partager le volume avec l'hôte ou avec d'autres conteneurs. Un conteneur peut être démarré avec un volume en utilisant l' option -v :

$ docker run --name nginx_container -v /var/log nginx

Nous pouvons obtenir des informations sur l'emplacement du volume connecté en:

$ docker inspect nginx_container ... "Mounts": [ { "Type": "volume", "Name": "1e4...d9c", "Source": "/var/lib/docker/volumes/1e4...d9c/_data", "Destination": "/var/log", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ... 

Le répertoire référencé contient les fichiers de l'emplacement /var/logdu conteneur NGINX.

$ ls -lah /var/lib/docker/volumes/1e4...d9c/_data total 88 drwxr-xr-x 4 root root 4.0K Feb 3 21:02 . drwxr-xr-x 3 root root 4.0K Feb 3 21:02 .. drwxr-xr-x 2 root root 4.0K Feb 3 21:02 apt -rw-rw---- 1 root 43 0 Jan 30 00:00 btmp -rw-r--r-- 1 root root 34.7K Feb 2 08:06 dpkg.log -rw-r--r-- 1 root root 3.2K Feb 2 08:06 faillog -rw-rw-r-- 1 root 43 29.1K Feb 2 08:06 lastlog drwxr-xr-x 2 root root 4.0K Feb 3 21:02 nginx -rw-rw-r-- 1 root 43 0 Jan 30 00:00 w 

Nettoyer l'espace utilisé par Docker

Il est recommandé d'utiliser la commande Docker pour nettoyer les conteneurs inutilisés. Le conteneur, les réseaux, les images et le cache de construction peuvent être nettoyés en exécutant:

$ docker system prune -a

De plus, vous pouvez également supprimer les volumes inutilisés en exécutant:

$ docker volumes prune

Sommaire

Docker est une partie importante des environnements et des outils de nombreuses personnes. Parfois, Docker se sent un peu comme par magie en résolvant les problèmes de manière très intelligente sans dire à l'utilisateur comment les choses se font en coulisses. Pourtant, Docker est un outil régulier qui stocke ses pièces lourdes dans des endroits qui peuvent être ouverts et modifiés.

Parfois, le stockage peut se remplir rapidement. Par conséquent, il est utile d'inspecter son dossier racine, mais il n'est pas recommandé de supprimer ou de modifier les fichiers manuellement. Au lieu de cela, les commandes d'élagage peuvent être utilisées pour libérer de l'espace disque.

J'espère que vous avez apprécié l'article. Si vous l'aimez et ressentez le besoin d'applaudissements, suivez-moi sur Twitter.

Je suis co-fondateur de notre plateforme de voyage révolutionnaire appelée Explore The World. Nous sommes une jeune startup située à Dresde, en Allemagne, et ciblerons d'abord le marché allemand. Contactez-moi si vous avez des commentaires et des questions sur n'importe quel sujet.

Joyeux Docker explorant :)

Références

  • Documentation Docker storagediver

    //docs.docker.com/storage/storagedriver/

  • Système de fichiers de superposition de documentation

    //www.kernel.org/doc/Documentation/filesystems/overlayfs.txt