Comment vérifier l’utilisation de l’espace disque pour les images et les conteneurs Docker
Avec des applications conteneurisées s’exécutant dans des environnements isolés, il peut être plus difficile que d’habitude de détecter les problèmes liés aux applications utilisant trop d’espace de stockage. Heureusement, Docker fournit des commandes pour gérer l’utilisation du disque du conteneur.
Sommaire
Faire une vérification rapide
Et si vous voulez vérifier combien d’espace Docker utilise, vous pouvez utiliser la commande intégrée docker system df
, ainsi que la commande Linux du
pour obtenir la taille de l’ensemble du répertoire.
docker system df sudo du -sh /var/lib/docker/
Cette commande affiche les images statiques, les conteneurs qui ont apporté des modifications à leur système de fichiers (par exemple, les fichiers journaux) et les volumes liés aux conteneurs.
Cependant, ce n’est pas tout à fait exact – ici, j’ai de nombreux conteneurs en cours d’exécution, mais ils stockent tous des données dans des montages de liaison sur le système d’exploitation hôte, pas des volumes.
Nettoyage des images Docker
Les images Docker sont différentes des conteneurs en cours d’exécution ; ce sont les fichiers que vous téléchargez depuis Docker Hub pour lancer un conteneur. Ils sont généralement assez gros et contiennent tout le code nécessaire pour exécuter un système d’exploitation de base et votre application.
Chaque version d’une image est distincte, mais elle est stockée en couches, de sorte que plusieurs nouvelles versions ne prendront pas deux fois plus d’espace de stockage. Vous pouvez afficher toutes les images avec image ls
:
docker image ls
Les nettoyer est facile ; vous ne voulez pas supprimer les images des conteneurs en cours d’exécution, bien sûr, mais la suppression des anciennes images est très bien – elles seront simplement téléchargées à nouveau si nécessaire.
Vous pouvez élaguer toutes les images ou en supprimer une manuellement par ID :
docker image prune -a docker image rm 3a8d8f76e7f8f
Vérification de l’utilisation du conteneur en cours d’exécution
Les conteneurs sont un peu plus difficiles à localiser, car ils peuvent utiliser les données de différentes manières :
- Image sous-jacente: chaque conteneur devra stocker son image, mais celle-ci est réutilisée dans tous les conteneurs.
- Couche de modification: si un conteneur écrit dans son système de fichiers, comme des fichiers journaux, il sera enregistré dans un nouveau calque au-dessus de l’image sous-jacente. Ceci est unique à chaque conteneur.
- Volumes: les conteneurs peuvent avoir des lecteurs virtuels montés sur eux, qui stockent les données directement sur le disque en dehors du système de stockage Docker.
- Lier les montures: les conteneurs peuvent éventuellement accéder directement aux répertoires de l’hôte.
Tout sauf les montures de liaison apparaîtra dans docker system df
sortir. Si vous souhaitez afficher les statistiques de chaque conteneur, Docker fournit un indicateur pour le ps
commande pour lister l’utilisation :
docker ps --size
Ici, cela montre la taille sur le disque, ainsi que la taille virtuelle (qui inclut l’image sous-jacente partagée). Étant donné que ces conteneurs n’utilisent aucun stockage en dehors de leurs montages de liaison, la taille est de zéro octet.
Débogage des montages (binds et volumes)
Pour afficher l’utilisation des montages, à la fois pour les montages à liaison directe et les volumes gérés, vous devrez en obtenir la taille à partir du système d’exploitation hôte. Si vous ne savez pas où ils sont, vous pouvez courir docker container ls
pour obtenir l’ID d’un conteneur, puis exécutez docker inspect
pour récupérer les informations de montage :
docker inspect a1c904020044 -f '{{json .Mounts}}' [{"Type":"bind","Source":"/home/daemon-data/921ff235-5075-4d64-b977-8d02cc3dacc9","Destination":"/home/container","Mode":"","RW":true,"Propagation":"rprivate"}]
Ensuite, vous pouvez vérifier la taille totale avec du -sh
:
sudo du -sh /path/to/mount/
Élagage des conteneurs et des volumes
Docker ne supprime jamais les conteneurs ou les volumes (sauf si vous exécutez des conteneurs avec le --rm
flag), car cela pourrait perdre vos données. Cependant, vous pouvez avoir sauvegardé d’anciennes données qui doivent être récupérées.
Tout comme les images, Docker fournit un prune
commande pour les conteneurs et les volumes :
docker container prune docker volume prune
Débogage manuel
Si vous avez un accès direct au serveur exécutant Docker, vous pouvez ouvrir un shell dans le conteneur :
sudo docker exec -it containerID /bin/bash
et courir du -sh
sur l’ensemble, qui reviendra toutes les données, y compris la taille de l’image, les données sur les montages liés et les données en volumes.
sudo du -sh /