Con aplicaciones en contenedores que se ejecutan en entornos aislados, puede ser más difícil de lo frecuente rastrear problemas con aplicaciones que usan demasiado espacio de almacenamiento. Por suerte, Docker proporciona comandos para administrar el uso del disco del contenedor.
Hacer una verificación rápida
Y si desea verificar cuánto espacio está usando Docker, puede utilizar el comando integrado docker system df
, así como el comando de Linux du
para obtener el tamaño de todo el directorio.
docker system df sudo du -sh /var/lib/docker/
Este comando muestra imágenes estáticas, contenedores que han realizado cambios en su sistema de archivos (a modo de ejemplo, archivos de registro) y volúmenes vinculados a los contenedores.
A pesar de esto, esto no es del todo exacto; aquí, tengo muchos contenedores en ejecución, 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. Generalmente 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; no desea quitar imágenes de contenedores en ejecución, de todos modos, pero quitar imágenes antiguas está bien, simplemente se volverán a descargar cuando sea necesario.
Puede podar todas las imágenes o quitar manualmente una por ID:
docker image prune -a docker image rm 3a8d8f76e7f8f
Comprobación del uso del contenedor en ejecución
Los contenedores son un poco más difíciles de rastrear, dado que pueden utilizar datos de muchas formas 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 en ellos, que almacenan datos de forma directa en el disco fuera del sistema de almacenamiento de Docker.
- Enlazar monturas: los contenedores pueden ingresar opcionalmente a directorios en el host de forma directa.
Todo, excepto las monturas de link, se mostrará en docker system df
producción. Si desea ver las estadísticas de cada contenedor, Docker proporciona una marca para el ps
comando para enumerar 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 usan ningún almacenamiento fuera de sus montajes de link, el tamaño es cero bytes.
Montajes de depuración (links y volúmenes)
Para ver el uso del montaje, tanto para los montajes de link directo como para los volúmenes administrados, deberá obtener el tamaño del sistema operativo host. Si no sabes donde están, puedes correr docker container ls
para obtener la ID de un contenedor y después ejecutar docker inspect
para tomar 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"}]
Después, puede verificar el tamaño total con du -sh
:
sudo du -sh /path/to/mount/
Envases de poda y volúmenes
Docker nunca elimina contenedores o volúmenes (a menos que ejecute contenedores con la --rm
flag), dado que al hacerlo podría perder sus datos. A pesar de esto, es factible que tenga una copia de seguridad de los datos antiguos que deben recolectarse como basura.
Del mismo modo que las imágenes, Docker proporciona una prune
comando para contenedores y volúmenes:
docker container prune docker 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 correr du -sh
fundamentalmente, que volverá toda la información, incluido el tamaño de la imagen, los datos sobre montajes de link y los datos en volúmenes.
sudo du -sh /