Vous vous demandez combien d'espace Docker consomme sur votre système Linux ?
Principalement, toutes les images Docker, conteneurs et autres entités associées se trouvent dans /var/lib/docker
. Vous pouvez vérifier la taille de ce répertoire et obtenir l'espace disque total utilisé par Docker :
[email protected]:~$ sudo du -sh /var/lib/docker
4.9G /var/lib/docker
Mais ce n'est pas très descriptif et vous devrez peut-être aller plus loin dans ce répertoire pour voir quel composant utilise quel espace.
Heureusement, Docker a fourni des outils pour obtenir ces informations de manière plus utile.
Vérification de l'utilisation de l'espace disque Docker [The Docker Way]
La méthode "Docker" la plus basique pour savoir combien d'espace est utilisé par les images, les conteneurs, les volumes locaux ou le cache de construction est la suivante :
docker system df
Lorsque vous exécutez cette commande (utilisez sudo
si nécessaire), vous obtenez toutes les informations d'utilisation du disque regroupées par composants Docker.
[email protected]:~$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 4 4 1.065GB 0B (0%)
Containers 4 4 5.705kB 0B (0%)
Local Volumes 7 7 1.108GB 0B (0%)
Build Cache 0 0 0B 0B
C'est certainement mieux que de regarder la taille totale de /var/lib/docker. Vous pouvez voir combien d'espace est consommé par les images, les conteneurs et les volumes.
Cependant, cela fournit toujours une image claire sur laquelle l'image ou le volume prend plus d'espace.
En fait, c'est le cas. Le docker system df
la commande a l'option détaillée -v
qui donne tous ces détails.
docker system df -v
Voici la sortie détaillée :
[email protected]:~$ docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
ghost 4.32.0 b40265427368 8 weeks ago 468.8MB 0B 468.8MB 1
jrcs/letsencrypt-nginx-proxy-companion latest 037cc4751b5a 13 months ago 24.35MB 0B 24.35MB 1
jwilder/nginx-proxy latest 509ff2fb81dd 15 months ago 165MB 0B 165MB 1
mariadb 10.5.3 f5d2bcaf057b 20 months ago 407MB 0B 407MB 1
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
899cc90e85d9 ghost:4.32.0 "docker-entrypoint.s…" 1 0B 8 weeks ago Up 8 weeks ghost_ghost_6
17b58fdafbce jrcs/letsencrypt-nginx-proxy-companion "/bin/bash /app/entr…" 4 571B 3 months ago Up 2 months letsencrypt-proxy-companion
58f99f46ee03 jwilder/nginx-proxy "/app/docker-entrypo…" 5 5.13kB 3 months ago Up 2 months jwilder-nginx-proxy
fb907286b60e mariadb:10.5.3 "docker-entrypoint.s…" 1 2B 3 months ago Up 2 months ghost_db_1
Local Volumes space usage:
VOLUME NAME LINKS SIZE
ghostdb 1 434.7MB
jwilder-nginx-with-ssl_acme 2 36.09kB
jwilder-nginx-with-ssl_certs 2 25.12kB
jwilder-nginx-with-ssl_dhparam 1 1.525kB
jwilder-nginx-with-ssl_html 2 1.106kB
jwilder-nginx-with-ssl_vhost 2 556B
ghost 1 674MB
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
C'est bien, non ? Il existe également d'autres moyens.
Vérification des tailles d'image Docker
Si vous souhaitez uniquement voir les images Docker et leurs tailles, vous pouvez également utiliser cette commande :
docker image ls
Il répertorie toutes les images Docker de votre système avec quelques détails dont la taille :
[email protected]:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest beae173ccac6 6 weeks ago 1.24MB
ubuntu latest fb52e22af1b0 5 months ago 72.8MB
alpine latest 49f356fa4513 10 months ago 5.61MB
hello-world latest d1165f221234 11 months ago 13.3kB
Vérification des tailles de conteneur en cours d'exécution
De même, si vous souhaitez connaître la taille des conteneurs Docker en cours d'exécution, vous pouvez utiliser la commande docker ps :
docker ps --size
Vous devriez voir une colonne SIZE ajoutée à la sortie de la commande :
[email protected]:~$ docker ps --size
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
1171dcfb7e06 alpine "sleep 10" 10 months ago Up 9 seconds always-policy 0B (virtual 5.61MB)
Avez-vous remarqué qu'il indique 0 B, puis affiche un 5,61 Mo virtuel ? La taille virtuelle inclut l'image sous-jacente partagée.
Revenons plus spécifiquement à l'approche Linux, avec l'image et le conteneur Alpine comme exemple pratique.
Utilisation des commandes Linux standard pour analyser l'utilisation de l'espace disque Docker
Chaque fois que vous utilisez le docker pull
commande ou exécutez docker-compose up -d
pour préparer le lancement des applications, voici comment rechercher l'utilisation de l'espace image, effectivement stocké sur un serveur Ubuntu 20.04 :
sudo du -sh /var/lib/docker/overlay2/<hash-named-directory>/
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.
Utilisation spécifique du disque d'image
Si vous recherchez les emplacements d'images spécifiques, vous pouvez utiliser la commande Docker inspect 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 :
$ 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"
},
...
Sur la base des informations ci-dessus, vous pouvez voir que le (mentionné précédemment dans le du
syntaxe de commande) dans ce cas est 64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
.
Ici, vous pouvez exécuter la commande suivante pour révéler la quantité d'espace utilisée par l'image Alpine :
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
6.0M /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
De même, 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
Utilisation spécifique du disque de conteneur
Si vous recherchez les emplacements de conteneurs spécifiques, vous pouvez à nouveau utiliser le inspect
commande sur Docker pour 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 :
$ 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 :
$ 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 emplacements sont ceux où les données du conteneur sont physiquement stockées sur votre système hôte, comme vous l'avez vu pour les images :
...
"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"
},
...
Vous pouvez maintenant utiliser le du
commande à nouveau :
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
32K /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
Contrairement aux images et conteneurs Docker, les emplacements physiques des volumes sont assez simples. Les volumes sont situés à :
/var/lib/docker/volumes/
Par conséquent, vous pouvez exécuter la commande suivante pour connaître l'utilisation totale de l'espace disque du volume Docker sur votre système :
avimanyu @iborg-desktop:~$ sudo du -sh /var/lib/docker/volumes/
60K /var/lib/docker/volumes/
Utilisation spécifique du volume de disque
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. Supposons, par exemple, que j'ai exécuté le conteneur alpin avec la commande suivante avec un volume :
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 :
$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"
Vérifiez que le fichier a bien été créé :
$ 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é :
$ 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 :
$ 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.
Ainsi, vous pouvez utiliser le du
commande ici encore pour des volumes spécifiques ! :
[email protected]:~$ sudo du -sh /var/lib/docker/volumes/test-data/_data
4.0K /var/lib/docker/volumes/test-data/_data
N'oubliez pas de noter le nom du volume chaque fois que vous souhaitez connaître l'espace utilisé par votre volume.
Lier les montages
Il s'agit de la seule exception dans Docker où vous devez utiliser une approche Linux pour surveiller l'utilisation de l'espace disque. Dans le même temps, il est toujours préférable d'arrêter d'abord les conteneurs en cours d'exécution.
$ mkdir /home/avimanyu/test-data
$ 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
.
[email protected]:~$ sudo du -sh /home/avimanyu/test-data
4.0K /home/avimanyu/test-data
Vous pouvez également tester la même chose à l'intérieur du conteneur :
[email protected]:~$ sudo docker exec -ti alpine-container sh
/ # du -sh /var/lib/app/content
4.0K /var/lib/app/content
Comme vous pouvez le voir, les deux tailles indiquées ci-dessus sont les mêmes car ce sont en fait des montages liés.
Les journaux Docker sur l'hôte sont toujours stockés dans des volumes. En utilisant la méthode décrite dans cette section, les utilisateurs peuvent également naviguer et le découvrir en examinant l'utilisation de l'espace disque des volumes Docker. Cela varie d'une application à l'autre et de l'emplacement des fichiers journaux dans les volumes d'application.
Conseils bonus
Sur la base de ce que vous avez appris jusqu'à présent, très évidemment, vous pouvez également utiliser la commande suivante pour récupérer l'utilisation du disque des images et des conteneurs :
sudo du -sh /var/lib/docker/overlay2
Les journaux Docker sur l'hôte sont toujours stockés dans des volumes. Un volume Docker généralement important indiquerait très probablement que les journaux se sont accumulés et sont gérés de manière inefficace.
Comment vérifier les journaux Docker [stockés ou en temps réel]Explorez et apprenez quelques façons intéressantes de faciliter la gestion des journaux sur Docker. Manuel LinuxAvimanyu BandyopadhyayEn utilisant la méthode décrite dans la section des volumes de cet article, les utilisateurs peuvent également naviguer et atténuer cela en examinant l'utilisation de l'espace disque des volumes docker. Cela varie d'une application à l'autre et de l'emplacement des fichiers journaux dans les volumes d'application.
Résumé
Dans ce didacticiel, j'ai adopté une approche générique basée sur Linux pour vous montrer comment connaître l'occupation de l'espace disque des images, conteneurs et volumes Docker résidant sur votre serveur Linux au niveau de l'hôte. Vous avez également appris à le faire de la manière préférée (Docker).
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