Cómo analizar el uso del disco de un contenedor Docker
Puedo ver que Docker ocupa 12 GB de mi sistema de archivos:
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
Pero, ¿cómo sé cómo se distribuye esto en los contenedores?
Intenté conectarme a los contenedores ejecutando (el nuevo comando v1.3)
docker exec -it <container_name> bash
y luego ejecutar df -h
para analizar el uso del disco. Parece estar funcionando, pero no con contenedores que utilizan "volúmenes de".
Por ejemplo, utilizo un contenedor de sólo datos para MongoDB, llamado 'mongo-data'.
Cuando ejecuto docker run -it --volumes-from mongo-data busybox
, y luego df -h
dentro del contenedor, dice que el sistema de archivos montado en /data/db
(mi contenedor de solo datos 'mongo-data') usa 11.3G, pero cuando lo hago du -h /data/db
, dice que usa solo 2.1G.
Entonces, ¿cómo analizo el uso del disco de un contenedor/volumen? O, en mi caso, ¿cómo puedo saber el tamaño del contenedor 'mongo-data'?
Para ver el tamaño de archivo de sus contenedores, puede usar el --size
argumento de docker ps
:
docker ps --size
Después de la versión 1.13.0, Docker incluye un nuevo comando docker system df
para mostrar el uso del disco de Docker.
$ 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%)
Para mostrar información más detallada sobre el uso del espacio:
$ docker system df --verbose
Publicar esto como respuesta porque mis comentarios anteriores se ocultaron:
Enumere el tamaño de un contenedor:
du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" <container_name>`
Enumere los tamaños de los volúmenes de un contenedor:
docker inspect -f "{{.Volumes}}" <container_name> | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs sudo du -d 1 -h
Editar: enumere todos los tamaños y volúmenes de los contenedores en ejecución:
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
NOTA: Cambie 'devicemapper' según su sistema de archivos Docker (por ejemplo, 'aufs')