Con aplicaciones en contenedores que se ejecutan en entornos aislados, puede resultar más difícil de lo habitual localizar problemas con aplicaciones que utilizan demasiado espacio de almacenamiento. Afortunadamente, Docker proporciona comandos para administrar el uso del disco del contenedor.
Hacer una verificación rápida
Y si desea comprobar cuánto espacio está utilizando Docker, puede utilizar el comando incorporado docker system df, así como el comando de Linux.
du
para obtener el tamaño de todo el directorio.
docker system dfsudo du -sh /var/lib/docker/
Este comando muestra imágenes estáticas, contenedores que han realizado cambios en su sistema de archivos (por ejemplo, archivos de registro) y volúmenes vinculados a los contenedores.
Sin embargo, esto no es del todo exacto: aquí tengo muchos contenedores ejecutándose, pero todos almacenan datos en montajes vinculados en el sistema operativo host, no en volúmenes.
Limpieza de imágenes de Docker
Las imágenes de Docker son diferentes a los contenedores en ejecución; son los archivos que descarga desde Docker Hub para iniciar un contenedor. Por lo general, son bastante grandes y contienen todo el código necesario para ejecutar un sistema operativo básico y su aplicación.
Cada versión de una imagen es independiente, pero se almacena en capas, por lo que varias versiones nuevas no ocuparán el doble de espacio de almacenamiento. Puede ver todas las imágenes con image ls:
docker image ls
Limpiarlos es fácil; Por supuesto, no desea eliminar imágenes de contenedores en ejecución, pero eliminar imágenes antiguas está bien: simplemente se volverán a descargar cuando sea necesario.
Puede podar todas las imágenes o eliminar manualmente una por ID:
docker image prune -adocker image rm 3a8d8f76e7f8f
Comprobación del uso del contenedor en ejecución
Los contenedores son un poco más complicados de rastrear, ya que pueden usar datos de muchas maneras diferentes:
- Imagen subyacente: cada contenedor deberá almacenar su imagen, pero esta se reutiliza en todos los contenedores.
- Capa de modificación: si un contenedor escribe en su sistema de archivos, como archivos de registro, se guardará en una nueva capa encima de la imagen subyacente. Esto es único para cada contenedor.
- Volúmenes: los contenedores pueden tener unidades virtuales montadas, que almacenan datos directamente en el disco fuera del sistema de almacenamiento Docker.
- Vincular monturas: los contenedores pueden opcionalmente acceder directamente a los directorios del host.
Todo, excepto los montajes vinculados, aparecerá en la salida df del sistema acoplable. Si desea ver las estadísticas de cada contenedor, Docker proporciona una marca para que el comando ps enumere el uso:
docker ps --size
Aquí, esto muestra el tamaño en el disco, así como el tamaño virtual (que incluye la imagen subyacente compartida). Dado que estos contenedores no utilizan ningún almacenamiento fuera de sus montajes de enlace, el tamaño es cero bytes.
Montajes de depuración (enlaces y volúmenes)
Para ver el uso de montaje, tanto para montajes de enlace directo como para volúmenes administrados, deberá obtener su tamaño del sistema operativo host. Si no sabe dónde están, puede ejecutar docker container ls para obtener el ID de un contenedor y luego ejecutar docker inspect para obtener la información de montaje:
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"}]
Luego, puedes verificar el tamaño total con du -sh:
sudo du -sh /path/to/mount/
Contenedores y volúmenes de poda
Docker nunca elimina contenedores o volúmenes (a menos que ejecute contenedores con el indicador –rm), ya que hacerlo podría perder sus datos. Sin embargo, es posible que tenga una copia de seguridad de datos antiguos que deban recolectarse como basura.
Al igual que las imágenes, Docker proporciona un comando de poda para contenedores y volúmenes:
docker container prunedocker volume prune
Depuración manual
Si tiene acceso directo al servidor que ejecuta Docker, puede abrir un shell en el contenedor:
sudo docker exec -it containerID /bin/bash
y ejecute du -sh en todo, lo que devolverá todos los datos, incluido el tamaño de la imagen, los datos sobre los montajes de enlace y los datos en los volúmenes.
sudo du -sh /