Cómo usar el comando docker system prune para recuperar espacio en disco

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo utilizar de manera efectiva el comando docker system prune para recuperar espacio en disco eliminando datos no utilizados de Docker. Comenzaremos entendiendo qué elimina docker system prune por defecto, lo que incluye contenedores finalizados, imágenes huérfanas (dangling images) y redes huérfanas (dangling networks), pero no volúmenes.

A continuación, explorará cómo purgar (prune) datos no utilizados de Docker excluyendo específicamente los volúmenes, y luego aprenderá cómo eliminar todos los datos no utilizados, incluyendo volúmenes anónimos. Finalmente, descubrirá cómo utilizar filtros con docker system prune para tener un control más detallado sobre qué datos se eliminan.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/SystemManagementGroup -.-> docker/system("Manage Docker") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") subgraph Lab Skills docker/ps -.-> lab-555250{{"Cómo usar el comando docker system prune para recuperar espacio en disco"}} docker/images -.-> lab-555250{{"Cómo usar el comando docker system prune para recuperar espacio en disco"}} docker/volume -.-> lab-555250{{"Cómo usar el comando docker system prune para recuperar espacio en disco"}} docker/system -.-> lab-555250{{"Cómo usar el comando docker system prune para recuperar espacio en disco"}} docker/prune -.-> lab-555250{{"Cómo usar el comando docker system prune para recuperar espacio en disco"}} end

Entender qué elimina docker system prune por defecto

En este paso, exploraremos el comando docker system prune y entenderemos qué tipos de datos no utilizados de Docker elimina por defecto. Este comando es útil para liberar espacio en disco eliminando objetos huérfanos (dangling) o no utilizados.

Primero, creemos algunos objetos no utilizados de Docker. Ejecutaremos un contenedor simple y luego lo detendremos. Esto dejará atrás un contenedor finalizado y, potencialmente, una imagen huérfana (dangling image) si la imagen no es utilizada por ningún otro contenedor.

Abra la terminal en el entorno LabEx. El directorio predeterminado es ~/project.

Ejecute un contenedor simple hello-world:

docker run hello-world

Debería ver una salida que indique que el demonio de Docker descargó la imagen hello-world y ejecutó el contenedor. El contenedor se detendrá inmediatamente después de imprimir su mensaje.

Ahora, liste todos los contenedores, incluyendo los finalizados:

docker ps -a

Verá el contenedor hello-world en la lista con un estado de "Exited".

A continuación, listemos las imágenes:

docker images

Debería ver la imagen hello-world.

Ahora, ejecutemos el comando docker system prune sin ninguna opción. Esto eliminará imágenes huérfanas (dangling images), contenedores huérfanos (dangling containers) y redes huérfanas (dangling networks). No eliminará volúmenes por defecto.

docker system prune -f

Utilizamos la bandera -f para forzar la eliminación sin un mensaje de confirmación.

Después de ejecutar el comando, verá una salida que indique qué se ha eliminado.

Ahora, comprobemos los contenedores de nuevo:

docker ps -a

El contenedor hello-world finalizado debería haber desaparecido.

Comprobemos las imágenes de nuevo:

docker images

La imagen hello-world podría seguir estando presente si no se considera "huérfana" (por ejemplo, si se descargó recientemente). Sin embargo, si tenía otras imágenes huérfanas, se habrían eliminado.

La principal conclusión aquí es que docker system prune por defecto limpia los contenedores finalizados, las imágenes huérfanas y las redes huérfanas. No elimina volúmenes a menos que se lo indique explícitamente.

Purgar (prune) datos no utilizados de Docker sin eliminar volúmenes

En el paso anterior, vimos que docker system prune por defecto no elimina volúmenes. Los volúmenes se utilizan para persistir los datos generados y utilizados por los contenedores de Docker. Eliminar volúmenes de forma no intencionada puede provocar pérdida de datos.

En este paso, demostraremos cómo funciona docker system prune sin eliminar volúmenes. Crearemos un volumen, ejecutaremos un contenedor que lo utilice, detendremos el contenedor y luego purgaremos (prune) el sistema. Observaremos que el volumen permanece después de la purga.

Primero, creemos un volumen con nombre. Los volúmenes con nombre son creados y gestionados explícitamente por Docker.

docker volume create myvolume

Debería ver el nombre del volumen creado como salida.

Ahora, ejecutemos un contenedor simple que utilice este volumen. Utilizaremos la imagen ubuntu. Si no la tiene localmente, Docker la descargará.

docker run -d --name mycontainer -v myvolume:/app ubuntu sleep 60

Este comando ejecuta un contenedor ubuntu en modo desatendido (-d), lo nombra mycontainer, monta el myvolume en el directorio /app dentro del contenedor y mantiene el contenedor en ejecución durante 60 segundos utilizando el comando sleep 60.

Compruebe que el contenedor está en ejecución:

docker ps

Debería ver mycontainer en la lista.

Ahora, detenga el contenedor:

docker stop mycontainer

El contenedor se detendrá, pero seguirá existiendo en un estado finalizado.

Verifique que el contenedor está detenido:

docker ps -a

Debería ver mycontainer con un estado de "Exited".

Ahora, listemos los volúmenes:

docker volume ls

Debería ver myvolume en la lista.

Ahora, ejecute docker system prune de nuevo. Recuerde, por defecto, no elimina volúmenes.

docker system prune -f

Observe la salida. Debería indicar que el contenedor finalizado fue eliminado, pero no debería mencionar la eliminación del volumen.

Verifique que el contenedor ha desaparecido:

docker ps -a

mycontainer ya no debería estar en la lista.

Finalmente, verifique que el volumen todavía existe:

docker volume ls

Todavía debería ver myvolume en la lista. Esto confirma que docker system prune por defecto conserva los volúmenes.

Purgar (prune) todos los datos no utilizados de Docker, incluyendo volúmenes anónimos

En los pasos anteriores, aprendimos que docker system prune por defecto no elimina volúmenes. Sin embargo, hay situaciones en las que es posible que desee eliminar todos los datos no utilizados de Docker, incluyendo volúmenes que ya no están asociados a ningún contenedor. Esto es especialmente útil para limpiar volúmenes anónimos, que se crean cuando se monta un directorio dentro de un contenedor sin nombrar explícitamente un volumen.

Para eliminar todos los datos no utilizados de Docker, incluyendo volúmenes, puede utilizar la bandera -a con docker system prune. La bandera -a significa "todos" e incluye los volúmenes en el proceso de purga.

Creemos un volumen anónimo ejecutando un contenedor y montando un directorio sin especificar un nombre de volumen.

docker run -d --name anothercontainer -v /data ubuntu sleep 60

Este comando ejecuta un contenedor ubuntu llamado anothercontainer y monta un volumen anónimo en el directorio /data dentro del contenedor.

Compruebe que el contenedor está en ejecución:

docker ps

Debería ver anothercontainer en la lista.

Ahora, detenga el contenedor:

docker stop anothercontainer

El contenedor se detendrá y se convertirá en un contenedor finalizado.

Verifique que el contenedor está detenido:

docker ps -a

Debería ver anothercontainer con un estado de "Exited".

Ahora, listemos los volúmenes:

docker volume ls

Verá el myvolume del paso anterior y un nuevo volumen con un nombre largo y generado aleatoriamente. Este es el volumen anónimo.

Ahora, ejecute docker system prune con la bandera -a para eliminar todos los datos no utilizados, incluyendo volúmenes.

docker system prune -a -f

Utilizamos -a para incluir los volúmenes y -f para forzar la eliminación sin un mensaje de confirmación.

Observe detenidamente la salida. Debería indicar que el contenedor finalizado fue eliminado y también debería enumerar el volumen anónimo que se eliminó. El volumen con nombre myvolume del paso anterior también debería ser eliminado porque ya no es utilizado por ningún contenedor.

Verifique que todos los contenedores se han eliminado:

docker ps -a

No debería haber contenedores en la lista.

Finalmente, verifique que todos los volúmenes se han eliminado:

docker volume ls

No debería haber volúmenes en la lista. Esto confirma que docker system prune -a elimina todos los datos no utilizados de Docker, incluyendo tanto volúmenes con nombre como anónimos.

Purgar (prune) datos de Docker utilizando filtros

Además de eliminar todos los datos no utilizados, docker system prune le permite utilizar filtros para eliminar selectivamente objetos de Docker. Esto le da un control más detallado sobre lo que se purga.

Los filtros se pueden aplicar a diferentes tipos de objetos. Para docker system prune, puede filtrar en función de criterios como la antigüedad de los objetos.

Creemos algunos objetos de Docker más para demostrar el filtrado. Ejecutaremos un par de contenedores y luego los detendremos.

Ejecute el primer contenedor:

docker run -d --name oldcontainer ubuntu sleep 10

Este contenedor se ejecutará durante 10 segundos y luego finalizará.

Ejecute el segundo contenedor:

docker run -d --name newcontainer ubuntu sleep 20

Este contenedor se ejecutará durante 20 segundos y luego finalizará.

Espere a que ambos contenedores finalicen. Puede verificar su estado con docker ps -a.

docker ps -a

Debería ver tanto oldcontainer como newcontainer con estado "Exited".

Ahora, utilicemos un filtro para eliminar solo los objetos que tienen más de un cierto tiempo. Podemos utilizar el filtro until con una duración. Por ejemplo, para eliminar objetos con más de 5 segundos de antigüedad, puede utilizar until=5s.

Intentemos purgar objetos con más de 15 segundos de antigüedad. Esto debería eliminar oldcontainer pero mantener newcontainer (suponiendo que haya esperado suficiente tiempo para que oldcontainer finalice pero no newcontainer).

docker system prune -f --filter "until=15s"

Observe la salida. Debería indicar que oldcontainer fue eliminado, pero newcontainer debería permanecer.

Verifique los contenedores:

docker ps -a

Debería ver newcontainer en la lista, pero oldcontainer debería haber desaparecido.

Ahora, purguemos de nuevo, esta vez eliminando objetos con más de 30 segundos de antigüedad. Esto también debería eliminar newcontainer.

docker system prune -f --filter "until=30s"

Observe la salida. Debería indicar que newcontainer fue eliminado.

Verifique los contenedores de nuevo:

docker ps -a

No debería haber contenedores en la lista.

Los filtros proporcionan una forma poderosa de personalizar el proceso de purga. Puede utilizar diferentes claves de filtro dependiendo del tipo de objeto que esté purgando (contenedores, imágenes, volúmenes, redes). El filtro until se utiliza comúnmente para limpiar objetos que no se han utilizado durante una duración específica.

Resumen

En este laboratorio, aprendimos cómo utilizar el comando docker system prune para recuperar espacio en disco eliminando datos no utilizados de Docker. Comenzamos por entender el comportamiento predeterminado de docker system prune, que elimina contenedores finalizados, imágenes huérfanas (dangling images) y redes huérfanas (dangling networks). Demostramos esto creando y luego eliminando un contenedor finalizado.

Luego exploramos cómo utilizar docker system prune con opciones para controlar qué datos se eliminan. Aprendimos cómo purgar datos no utilizados sin eliminar volúmenes y cómo incluir volúmenes anónimos en el proceso de purga. Finalmente, abordamos el uso de filtros para purgar selectivamente datos de Docker en función de criterios específicos. Este laboratorio proporcionó experiencia práctica en el uso de docker system prune para administrar eficazmente el espacio en disco en un entorno de Docker.