Je peux voir que Docker prend 12 Go de mon système de fichiers:
2.7G /var/lib/docker/vfs/dir
2.7G /var/lib/docker/vfs
2.8G /var/lib/docker/devicemapper/mnt
6.3G /var/lib/docker/devicemapper/devicemapper
9.1G /var/lib/docker/devicemapper
12G /var/lib/docker
Mais comment puis-je savoir comment cela est distribué sur les conteneurs?
J'ai essayé de joindre les conteneurs en exécutant (la nouvelle commande v1.3)
docker exec -it <container_name> bash
puis en exécutant 'df -h' pour analyser l'utilisation du disque. Cela semble fonctionner, mais pas avec les conteneurs qui utilisent des "volumes à partir de".
Par exemple, j'utilise un conteneur de données uniquement pour MongoDB, appelé "mongo-data".
Quand je lance docker run -it --volumes-from mongo-data busybox
, puis df -h
à l'intérieur du conteneur, le système de fichiers monté sur /data/db
(mon conteneur de données uniquement "mongo-data") utilise 11.3G, mais quand Je fais du -h /data/db
, il dit qu'il utilise seulement 2.1G.
Alors, comment analyser l'utilisation d'un disque conteneur/volume? Ou, dans mon cas, comment puis-je connaître la taille du conteneur 'mongo-data'?
Pour voir la taille de fichier de vos conteneurs, vous pouvez utiliser l'argument --size
de docker ps
:
docker ps --size
Après 1.13.0, Docker inclut une nouvelle commande docker system df
pour afficher l’utilisation du disque de menu fixe.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 5 1 2.777 GB 2.647 GB (95%)
Containers 1 1 0 B 0B
Local Volumes 4 1 3.207 GB 2.261 (70%)
Pour afficher des informations plus détaillées sur l'utilisation de l'espace:
$ docker system df --verbose
Poster ceci comme une réponse parce que mes commentaires ci-dessus sont cachés:
Lister la taille d'un conteneur:
du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" <container_name>`
Répertoriez les tailles des volumes d'un conteneur:
docker inspect -f "{{.Volumes}}" <container_name> | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs Sudo du -d 1 -h
Édition: Répertoriez toutes les tailles et tous les volumes des conteneurs en cours d'exécution:
for d in `docker ps -q`; do
d_name=`docker inspect -f {{.Name}} $d`
echo "========================================================="
echo "$d_name ($d) container size:"
Sudo du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" $d`
echo "$d_name ($d) volumes:"
docker inspect -f "{{.Volumes}}" $d | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs Sudo du -d 1 -h
done
REMARQUE: changez 'devicemapper' en fonction de votre système de fichiers Docker (par exemple, 'aufs')
La partie volume ne fonctionnant plus, si quelqu'un est intéressé, je modifie un peu le script ci-dessus:
for d in `docker ps | awk '{print $1}' | tail -n +2`; do
d_name=`docker inspect -f {{.Name}} $d`
echo "========================================================="
echo "$d_name ($d) container size:"
Sudo du -d 2 -h /var/lib/docker/aufs | grep `docker inspect -f "{{.Id}}" $d`
echo "$d_name ($d) volumes:"
for mount in `docker inspect -f "{{range .Mounts}} {{.Source}}:{{.Destination}}
{{end}}" $d`; do
size=`echo $mount | cut -d':' -f1 | Sudo xargs du -d 0 -h`
mnt=`echo $mount | cut -d':' -f2`
echo "$size mounted on $mnt"
done
done
(cette réponse n'est pas utile, mais laissez-la ici car certains commentaires peuvent l'être)
docker images
affichera la "taille virtuelle", c'est-à-dire combien au total, y compris toutes les couches inférieures. Il y a donc une double comptabilisation si vous avez des conteneurs qui partagent la même image de base.
J'utilise docker stats $(docker ps --format={{.Names}}) --no-stream
pour obtenir:
Vous pouvez utiliser
docker history IMAGE_ID
pour voir comment la taille de l'image est répartie entre ses différents sous-composants.
Si vous souhaitez réduire la taille des images comportant plusieurs couches, je peux vous recommander l'utilitaire docker-squash
de Jason Wilder. Obtenez-le de GitHub ici: https://github.com/jwilder/docker-squash
Gardez à l'esprit que docker ps --size
peut être une commande coûteuse, nécessitant plus de quelques minutes. Il en va de même pour les demandes d'API de liste de conteneurs avec size=1
. Il vaut mieux ne pas l'exécuter trop souvent.
Jetez un oeil à alternatives nous avons compilé, y compris l'option du -hs
pour le répertoire de volumes persistants du menu fixe.