¿Se pregunta cuánto espacio consume Docker en su sistema Linux?
Principalmente, todas las imágenes, contenedores y otras entidades relacionadas de Docker se encuentran en /var/lib/docker
. Puede comprobar el tamaño de este directorio y obtener el espacio total en disco utilizado por Docker:
[email protected]:~$ sudo du -sh /var/lib/docker
4.9G /var/lib/docker
Pero eso no es muy descriptivo y es posible que tenga que ir más allá en este directorio para ver qué componente usa qué espacio.
Afortunadamente, Docker ha proporcionado herramientas para obtener esta información de una manera más útil.
Comprobación del uso del espacio en disco de Docker [The Docker Way]
La forma "Docker" más básica de saber cuánto espacio están utilizando imágenes, contenedores, volúmenes locales o caché de compilación es:
docker system df
Cuando ejecute este comando (utilice sudo
si es necesario), obtiene toda la información de uso del disco agrupada por componentes de Docker.
[email protected]:~$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 4 4 1.065GB 0B (0%)
Containers 4 4 5.705kB 0B (0%)
Local Volumes 7 7 1.108GB 0B (0%)
Build Cache 0 0 0B 0B
Esto definitivamente es mejor que mirar el tamaño total de /var/lib/docker. Puede ver cuánto espacio consumen las imágenes, los contenedores y los volúmenes.
Sin embargo, esto todavía proporciona una imagen clara de qué imagen o volumen ocupa más espacio.
En realidad, lo hace. El docker system df
el comando tiene la opción detallada -v
que da todos estos detalles.
docker system df -v
Aquí está la salida detallada:
[email protected]:~$ docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
ghost 4.32.0 b40265427368 8 weeks ago 468.8MB 0B 468.8MB 1
jrcs/letsencrypt-nginx-proxy-companion latest 037cc4751b5a 13 months ago 24.35MB 0B 24.35MB 1
jwilder/nginx-proxy latest 509ff2fb81dd 15 months ago 165MB 0B 165MB 1
mariadb 10.5.3 f5d2bcaf057b 20 months ago 407MB 0B 407MB 1
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
899cc90e85d9 ghost:4.32.0 "docker-entrypoint.s…" 1 0B 8 weeks ago Up 8 weeks ghost_ghost_6
17b58fdafbce jrcs/letsencrypt-nginx-proxy-companion "/bin/bash /app/entr…" 4 571B 3 months ago Up 2 months letsencrypt-proxy-companion
58f99f46ee03 jwilder/nginx-proxy "/app/docker-entrypo…" 5 5.13kB 3 months ago Up 2 months jwilder-nginx-proxy
fb907286b60e mariadb:10.5.3 "docker-entrypoint.s…" 1 2B 3 months ago Up 2 months ghost_db_1
Local Volumes space usage:
VOLUME NAME LINKS SIZE
ghostdb 1 434.7MB
jwilder-nginx-with-ssl_acme 2 36.09kB
jwilder-nginx-with-ssl_certs 2 25.12kB
jwilder-nginx-with-ssl_dhparam 1 1.525kB
jwilder-nginx-with-ssl_html 2 1.106kB
jwilder-nginx-with-ssl_vhost 2 556B
ghost 1 674MB
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
Eso es bueno, ¿verdad? También hay otras formas.
Comprobación de los tamaños de imagen de la ventana acoplable
Si solo desea ver las imágenes de Docker y sus tamaños, también puede usar este comando:
docker image ls
Enumera todas las imágenes de Docker en su sistema con algunos detalles que incluyen el tamaño:
[email protected]:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest beae173ccac6 6 weeks ago 1.24MB
ubuntu latest fb52e22af1b0 5 months ago 72.8MB
alpine latest 49f356fa4513 10 months ago 5.61MB
hello-world latest d1165f221234 11 months ago 13.3kB
Comprobación de los tamaños de contenedores en ejecución
Del mismo modo, si desea conocer el tamaño de los contenedores Docker en ejecución, puede usar el comando docker ps:
docker ps --size
Debería ver una columna TAMAÑO agregada a la salida del comando:
[email protected]:~$ docker ps --size
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
1171dcfb7e06 alpine "sleep 10" 10 months ago Up 9 seconds always-policy 0B (virtual 5.61MB)
¿Notas cómo dice 0B y luego muestra 5.61 MB virtuales? El tamaño virtual incluye la imagen subyacente compartida.
Volvamos al enfoque de Linux de manera más específica, con la imagen y el contenedor de Alpine como ejemplo práctico.
Uso de comandos estándar de Linux para analizar el uso del espacio en disco de Docker
Siempre que use el docker pull
comando o ejecutar docker-compose up -d
para preparar el lanzamiento de aplicaciones, así es como busca el uso del espacio de la imagen, en realidad almacenado en un servidor Ubuntu 20.04:
sudo du -sh /var/lib/docker/overlay2/<hash-named-directory>/
Aquí, Overlay2 es el controlador de almacenamiento Docker predeterminado en Ubuntu. Puede confirmar esto ejecutando docker info
comando y buscando el controlador de almacenamiento:
Storage Driver: overlay2
Si esto es diferente al suyo, entonces está usando un controlador de almacenamiento diferente para Docker. Del mismo modo, la ubicación del directorio se nombraría según el mismo controlador de almacenamiento. La disponibilidad del controlador de almacenamiento depende del soporte del kernel.
Uso de disco de imagen específico
Si está buscando las ubicaciones de imágenes específicas, puede usar el comando de inspección de Docker para la imagen extraída. Digamos, por ejemplo, que saqué la imagen alpina con docker pull alpine
. Ejecute el siguiente comando para inspeccionarlo:
$ docker inspect alpine
Una vez que ejecute el comando, notará tres campos dentro de Data
subsección bajo GraphDriver
:
...
"GraphDriver": {
"Data": {
"MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
"UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
"WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
},
...
Según la información anterior, puede ver que (mencionado anteriormente en el du
sintaxis del comando) en este caso es 64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
.
Aquí, puede ejecutar el siguiente comando para revelar la cantidad de espacio que utiliza la imagen de Alpine:
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
6.0M /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
Del mismo modo, al igual que las imágenes, los contenedores también se almacenan dentro del mismo directorio basado en el controlador de almacenamiento.
/var/lib/docker/overlay2
Uso de disco de contenedor específico
Si está buscando las ubicaciones de contenedores específicos, puede volver a utilizar inspect
comando en Docker para el contenedor en ejecución. Digamos, por ejemplo, he ejecutado el contenedor alpino con docker run -ti -d alpine
. Cuando ejecutas docker ps
, verás que se está ejecutando:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb341d6a28fa alpine "/bin/sh" 6 seconds ago Up 5 seconds confident_banzai
Aquí, el contenedor ha sido nombrado aleatoriamente confident_banzai
. Así que vamos a inspeccionarlo:
$ docker inspect confident_banzai
Una vez que ejecute el comando anterior, notará los cuatro campos mencionados anteriormente dentro de Data
subsección bajo GraphDriver
. Estas ubicaciones son donde los datos del contenedor se almacenan físicamente en su sistema host tal como vio para las imágenes:
...
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3-init/diff:/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
"MergedDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/merged",
"UpperDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/diff",
"WorkDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/work"
},
"Name": "overlay2"
},
...
Ahora puedes usar el du
comando de nuevo:
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
32K /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
A diferencia de las imágenes y los contenedores de Docker, las ubicaciones físicas de los volúmenes son bastante sencillas. Los volúmenes se encuentran en:
/var/lib/docker/volumes/
Por lo tanto, puede ejecutar el siguiente comando para conocer el uso completo del espacio en disco del volumen Docker en su sistema:
avimanyu @iborg-desktop:~$ sudo du -sh /var/lib/docker/volumes/
60K /var/lib/docker/volumes/
Uso de disco de volumen específico
En este caso, hay dos tipos principalmente. Uno son los volúmenes normales de Docker y el otro son los montajes de enlace.
Volúmenes de Docker
Si está buscando las ubicaciones de volúmenes específicos, puede usar docker volume ls
Comando primero y verifique el nombre o ID del volumen. Digamos, por ejemplo, he ejecutado el contenedor alpino con el siguiente comando con un volumen:
docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine
Ahora, un volumen llamado test-data
se creará automáticamente. Ahora vamos a crear un archivo llamado test.md
dentro de esta ubicación:
$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"
Verifique que el archivo haya sido creado:
$ docker exec -ti alpine-container sh
/ # ls /var/lib/app/content/
test.md
/ # exit
Cuando ejecutas docker volume ls
, el volumen llamado test-data
estaría en la lista:
$ docker volume ls
DRIVER VOLUME NAME
local d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local test-data
Finalmente, puede confirmar la ubicación real del archivo en su sistema host:
$ sudo ls -l /var/lib/docker/volumes/test-data/_data
total 0
-rw-r--r-- 1 root root 0 Oct 6 23:20 test.md
Por lo tanto, la ruta del volumen montado siempre se encuentra dentro de un directorio llamado _data
dentro del directorio de volumen respectivo.
Entonces, puedes usar el du
¡comando aquí de nuevo para volúmenes específicos!:
[email protected]:~$ sudo du -sh /var/lib/docker/volumes/test-data/_data
4.0K /var/lib/docker/volumes/test-data/_data
Recuerde siempre anotar el nombre del volumen cada vez que desee averiguar cuánto espacio está usando su volumen.
Monturas enlazadas
Esta es la única excepción en Docker donde debe usar un enfoque de Linux para monitorear el uso del espacio en disco. Al mismo tiempo, siempre es preferible detener primero los contenedores en funcionamiento.
$ mkdir /home/avimanyu/test-data
$ docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine
En este caso, un volumen montado en enlace llamado test-data
estará disponible en el lado del contenedor como /var/lib/app/content
.
[email protected]:~$ sudo du -sh /home/avimanyu/test-data
4.0K /home/avimanyu/test-data
También puedes probar lo mismo dentro del contenedor:
[email protected]:~$ sudo docker exec -ti alpine-container sh
/ # du -sh /var/lib/app/content
4.0K /var/lib/app/content
Como puede ver, los dos tamaños informados anteriormente son iguales porque en realidad son monturas vinculantes.
Los registros de Docker en el host siempre se almacenan en volúmenes. Usando la forma descrita en esta sección, los usuarios también pueden navegar y averiguarlo observando el uso del espacio en disco de los volúmenes de la ventana acoplable. Esto varía según la aplicación y la ubicación de los archivos de registro en los volúmenes de la aplicación.
Consejos adicionales
Según lo que aprendió hasta ahora, obviamente, también puede usar el siguiente comando para obtener el uso del disco de imágenes y contenedores juntos:
sudo du -sh /var/lib/docker/overlay2
Los registros de Docker en el host siempre se almacenan en volúmenes. Un volumen de Docker generalmente grande probablemente indicaría que los registros se han estado acumulando y se están administrando de manera ineficiente.
Cómo verificar los registros de Docker [almacenados o en tiempo real]Explore y aprenda algunas formas interesantes de facilitar la administración de registros en Docker. Manual de LinuxAvimanyu BandyopadhyayUsando la forma descrita en la sección de volúmenes de este artículo, los usuarios también pueden navegar y mitigar esto observando el uso del espacio en disco de los volúmenes de Docker. Esto varía según la aplicación y la ubicación de los archivos de registro en los volúmenes de la aplicación.
Resumen
En este tutorial, adopté un enfoque genérico basado en Linux para mostrarle cómo averiguar la ocupación de espacio en disco de imágenes, contenedores y volúmenes de Docker que residen en su servidor Linux a nivel de host. También aprendió cómo hacerlo de la forma preferida (Docker).
Si desea compartir algún comentario, comentario o sugerencia sobre este enfoque, deje sus opiniones en la sección de comentarios a continuación