linux - español - Docker: cómo analizar el uso del disco de un contenedor?
docker manual (8)
(Esta respuesta no es útil, pero dejarla aquí ya que algunos de los comentarios pueden ser)
docker images
mostrarán el "tamaño virtual", es decir, cuánto en total, incluidas todas las capas inferiores. Entonces, un recuento doble si tiene contenedores que comparten la misma imagen base.
Estuve buscando por un tiempo, pero no pude encontrar una forma de analizar el uso del disco de un contenedor / volumen Docker.
Veo que Docker toma 12GB 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 ejecutando ''df -h'' para analizar el uso del disco. Parece estar funcionando, pero no con contenedores que usan ''volúmenes-desde''.
Por ejemplo, utilizo un contenedor de solo 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 está montado en ''/ data / db'' (my ''mongo-data'' contenedor de solo datos) usa 11.3G, pero cuando hago ''du -h / data / db'', dice que usa solo 2.1G.
Entonces, ¿cómo analizo el uso de un contenedor / disco de volumen? O, en mi caso, ¿cómo averiguo el tamaño del contenedor ''mongo-data''?
Muchas gracias,
Después de 1.13.0, Docker incluye un nuevo docker system df
acoplador de comandos docker system df
para mostrar el uso del disco acoplable.
$ 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 -v
La parte del volumen ya no funciona, así que si alguien está interesado, simplemente modifico un poco el guión anterior:
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
Para ver el tamaño del archivo de sus contenedores, puede usar el argumento -s
de docker ps
:
docker ps -s
Publicar esto como respuesta porque mis comentarios anteriores se ocultaron:
Enumera 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: enumera 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'' de acuerdo con su sistema de archivos Docker (por ejemplo, ''aufs'')
Puedes usar
docker history IMAGE_ID
para ver cómo se distribuye el tamaño de la imagen entre sus diversos subcomponentes.
Si desea reducir el tamaño de las imágenes en varias capas, puedo recomendar la utilidad docker-squash
Jason Wilder. Obtenlo de GitHub aquí: https://github.com/jwilder/docker-squash
Tenga en cuenta que docker ps --size
puede ser un comando costoso, tardando más de unos minutos en completarse. Lo mismo se aplica a las solicitudes API de lista de contenedores con size=1
. Es mejor no ejecutarlo con demasiada frecuencia.
Eche un vistazo a las alternatives que du -hs
, incluida la opción du -hs
para el directorio de volumen persistente docker.