Podar objetos de Docker no utilizados
Docker adopta un enfoque conservador para la limpieza de objetos no utilizados (a menudo denominado "recolección de basura"), como imágenes, contenedores, volúmenes y redes. Por lo general, estos objetos no se eliminan a menos que solicites explícitamente a Docker que lo haga. Esto puede hacer que Docker consuma espacio en disco adicional. Para cada tipo de objeto, Docker proporciona un comando prune (podar). Además, puedes utilizar docker system prune para limpiar varios tipos de objetos a la vez. Este tema muestra cómo utilizar estos comandos prune.
Podar imágenes
El comando docker image prune te permite limpiar las imágenes no utilizadas. De forma predeterminada, docker image prune solo limpia las imágenes huérfanas (dangling). Una imagen huérfana es aquella que no tiene etiqueta y a la que ningún contenedor hace referencia. Para eliminar imágenes huérfanas:
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Para eliminar todas las imágenes que no estén siendo utilizadas por contenedores existentes, utiliza el flag -a:
$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag -f o --force.
Puedes limitar qué imágenes se podan utilizando expresiones de filtrado con el flag --filter. Por ejemplo, para considerar únicamente las imágenes creadas hace más de 24 horas:
$ docker image prune -a --filter "until=24h"
Existen otras expresiones de filtrado disponibles. Consulta la
referencia de docker image prune para obtener más ejemplos.
Podar contenedores
Al detener un contenedor, este no se elimina automáticamente a menos que lo hayas iniciado con el flag --rm. Para ver todos los contenedores en el host de Docker, incluidos los contenedores detenidos, utiliza docker ps -a. ¡Te sorprenderá la cantidad de contenedores que existen, especialmente en un sistema de desarrollo! Las capas de escritura de un contenedor detenido siguen ocupando espacio en disco. Para limpiar esto, puedes utilizar el comando docker container prune.
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag -f o --force.
De forma predeterminada, se eliminan todos los contenedores detenidos. Puedes limitar el alcance utilizando el flag --filter. Por ejemplo, el siguiente comando solo elimina los contenedores detenidos de más de 24 horas de antigüedad:
$ docker container prune --filter "until=24h"
Existen otras expresiones de filtrado disponibles. Consulta la
referencia de docker container prune para obtener más ejemplos.
Podar volúmenes
Los volúmenes pueden ser utilizados por uno o más contenedores y ocupan espacio en el host de Docker. Los volúmenes nunca se eliminan automáticamente, ya que hacerlo podría destruir datos.
$ docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag -f o --force.
De forma predeterminada, se eliminan todos los volúmenes no utilizados. Puedes limitar el alcance utilizando el flag --filter. Por ejemplo, el siguiente comando solo elimina los volúmenes que no están etiquetados con la etiqueta keep:
$ docker volume prune --filter "label!=keep"
Existen otras expresiones de filtrado disponibles. Consulta la
referencia de docker volume prune para obtener más ejemplos.
Podar redes
Las redes de Docker no ocupan mucho espacio en disco, pero sí crean reglas de iptables, dispositivos de red bridge y entradas en la tabla de enrutamiento. Para limpiar estos elementos, puedes utilizar docker network prune para eliminar las redes que no estén siendo utilizadas por ningún contenedor.
$ docker network prune
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag -f o --force.
De forma predeterminada, se eliminan todas las redes no utilizadas. Puedes limitar el alcance utilizando el flag --filter. Por ejemplo, el siguiente comando solo elimina las redes de más de 24 horas de antigüedad:
$ docker network prune --filter "until=24h"
Existen otras expresiones de filtrado disponibles. Consulta la
referencia de docker network prune para obtener más ejemplos.
Podar la caché de construcción
docker buildx prune elimina la caché de construcción para el constructor seleccionado actualmente. Si utilizas varios constructores, cada constructor mantiene su propia caché; utiliza el flag --builder para apuntar a una instancia de constructor específica.
$ docker buildx prune
WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y
De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag -f o --force.
Consulta la
referencia de docker buildx prune para ver todas las opciones, incluyendo --all para eliminar también las imágenes internas y de frontend.
Podar todo
El comando docker system prune es un acceso directo que poda imágenes, contenedores y redes. Los volúmenes no se podan de forma predeterminada; debes especificar el flag --volumes para que docker system prune pode los volúmenes.
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- unused build cache
Are you sure you want to continue? [y/N] y
Para podar también los volúmenes, añade el flag --volumes:
$ docker system prune --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag -f o --force.
De forma predeterminada, se eliminan todos los contenedores, redes e imágenes no utilizados. Puedes limitar el alcance utilizando el flag --filter. Por ejemplo, el siguiente comando elimina los elementos de más de 24 horas de antigüedad:
$ docker system prune --filter "until=24h"
Existen otras expresiones de filtrado disponibles. Consulta la
referencia de docker system prune para obtener más ejemplos.