Docker prune se emplea para eliminar objetos in­ne­ce­sa­rios, como co­n­te­ne­do­res detenidos, volúmenes en desuso, redes antiguas o imágenes. De esta manera, es posible optimizar el uso del disco y liberar espacio de al­ma­ce­na­mie­n­to.

¿Qué es Docker prune?

Los comandos Docker prune y system prune se utilizan para limpiar si­s­te­má­ti­ca­me­n­te los recursos de Docker que ya no necesitas y liberar espacio de al­ma­ce­na­mie­n­to. Cuando las imágenes, redes, volúmenes y co­n­te­ne­do­res Docker pe­r­ma­ne­cen sin uso durante un tiempo, pueden ocupar una gran cantidad de espacio. El comando prune te permite eliminar rá­pi­da­me­n­te estos recursos que están sin utilizar para que mantengas tu sistema or­ga­ni­za­do y fu­n­cio­na­n­do con efi­cie­n­cia.

En entornos de de­sa­rro­llo en los que se suelen crear y probar co­n­te­ne­do­res es muy habitual que se acumulen muchos objetos obsoletos. Docker prune no solo limpia co­n­te­ne­do­res e imágenes, sino también redes y volúmenes que ya no necesitas, lo que facilita co­n­si­de­ra­ble­me­n­te la gestión de los recursos de Docker y evita que el sistema quede des­or­de­na­do y so­bre­ca­r­ga­do.

¿Para qué sirve Docker prune?

El comando prune se puede emplear en distintas si­tua­cio­nes en el entorno de Docker. Te pre­se­n­ta­mos a co­n­ti­nua­ción cuatro es­ce­na­rios típicos en los que se usa:

Para optimizar procesos de trabajo: los entornos Docker suelen uti­li­zar­se mucho para de­sa­rro­llo, pruebas y pro­du­c­ción. Si no se limpian con fre­cue­n­cia, se van acu­mu­la­n­do recursos que so­bre­ca­r­gan el espacio de al­ma­ce­na­mie­n­to y afectan al re­n­di­mie­n­to del sistema. Al emplear Docker prune para eliminar esos recursos sin usar, se optimiza el sistema, lo cual es muy be­ne­fi­cio­so en entornos basados en la nube, en los que los costes aumentan a medida que se requiere más al­ma­ce­na­mie­n­to y potencia de pro­ce­sa­mie­n­to.

Para mejorar la seguridad: los recursos de Docker obsoletos o in­ne­ce­sa­rios pueden suponer riesgos de seguridad. Docker prune elimina co­n­te­ne­do­res, imágenes, redes y volúmenes que no se utilizan, lo que reduce el riesgo de que co­m­po­ne­n­tes des­ac­tua­li­za­dos y po­te­n­cia­l­me­n­te inseguros queden expuestos. Mantener un eco­si­s­te­ma Docker or­ga­ni­za­do ayuda a minimizar la su­pe­r­fi­cie de ataque y mejora la seguridad de toda la in­frae­s­tru­c­tu­ra in­fo­r­má­ti­ca.

Para mejorar el re­n­di­mie­n­to: cuando el entorno Docker se encuentra so­bre­ca­r­ga­do, se consumen recursos como la CPU y la memoria de manera in­ne­ce­sa­ria, lo que afecta al re­n­di­mie­n­to del sistema. Al hacer limpiezas fre­cue­n­tes con Docker prune, se libera espacio y se mejora la efi­cie­n­cia en la gestión y ejecución de co­n­te­ne­do­res, lo que se traduce en menores tiempos de carga, de­s­plie­gues más rápidos de apli­ca­cio­nes y, en general, una mayor capacidad de respuesta del sistema.

Para un ma­n­te­ni­mie­n­to más fácil: ejecutar Docker prune con fre­cue­n­cia facilita de forma co­n­si­de­ra­ble el ma­n­te­ni­mie­n­to del entorno Docker. Al eliminar recursos no uti­li­za­dos, las tareas de gestión son menos co­m­pli­ca­das para los de­sa­rro­lla­do­res. Además, resulta más sencillo mantener un control sobre los co­m­po­ne­n­tes Docker activos y re­le­va­n­tes, por lo que es posible detectar y so­lu­cio­nar problemas con mayor rapidez. De esta manera, los equipos pueden centrarse en de­sa­rro­llar y mejorar sus apli­ca­cio­nes en lugar de tener que lidiar con recursos in­ne­ce­sa­rios.

Sintaxis: ¿cómo se utiliza Docker prune?

¿Tienes un entorno Docker y quieres eliminar recursos para liberar espacio y si­m­pli­fi­car la gestión? En ese caso, basta con que accedas a los servicios de prune eje­cu­ta­n­do este comando:

docker system prune
bash

Por defecto, Docker ide­n­ti­fi­ca los co­n­te­ne­do­res detenidos, las imágenes no uti­li­za­das, las redes y los volúmenes sin uso, y solicita co­n­fi­r­ma­ción para eli­mi­nar­los. Escribe y y presiona Enter para hacerlo. Si no, puedes usar la opción -f para saltarte la co­n­fi­r­ma­ción y comenzar con la limpieza di­re­c­ta­me­n­te:

docker system prune -f
bash

Re­co­me­n­da­ción: antes de usar Docker prune, te aco­n­se­ja­mos revisar qué recursos de Docker están ac­tua­l­me­n­te en el sistema. Utiliza los si­guie­n­tes comandos para obtener una lista de todos los co­n­te­ne­do­res, imágenes, redes y volúmenes:

docker ps -a
docker images
docker volume ls
docker network ls
bash

Opciones de Docker prune

Pre­se­n­ta­mos a co­n­ti­nua­ción una tabla con las opciones di­s­po­ni­bles para el comando docker system prune:

Opción De­s­cri­p­ción
--all, -a Elimina todos los recursos Docker sin utilizar.
--force, -f Realiza la limpieza sin co­n­fi­r­ma­ción del usuario.
--volumes Elimina volúmenes sin utilizar.
--filter, -f Permite filtrar por criterios los recursos que se van a eliminar.
--help Pro­po­r­cio­na ayuda para utilizar el comando.

Docker prune: tutorial para utilizar el comando

En Docker pueden emplearse di­fe­re­n­tes comandos para realizar una limpieza es­pe­cí­fi­ca de tipos de recursos es­pe­cí­fi­cos. De esta manera, puedes controlar exac­ta­me­n­te qué recursos vas a eliminar.

Docker prune --filter

Se pueden utilizar filtros para controlar qué recursos se eli­mi­na­rán, ya sean co­n­te­ne­do­res, imágenes, redes o volúmenes. Esta función es es­pe­cia­l­me­n­te útil en entornos de de­sa­rro­llo en los que se suelen crear y olvidar con rapidez muchos recursos te­m­po­ra­les.

En general, se utiliza esta sintaxis:

docker <command> prune --filter "filter=<value>"
bash

A co­n­ti­nua­ción, se enumeran algunos de los posibles filtros:

  • until: sirve para filtrar recursos por fecha de creación. <duration> puede ser un valor numérico seguido de una unidad como h (horas), m (minutos) o s (segundos).
docker <command> prune --filter "until=<duration>"
bash

Ejemplo: eliminar todos los co­n­te­ne­do­res detenidos que tengan más de 24 horas.

docker container prune --filter "until=24h"
bash
  • label: filtra recursos en función de sus etiquetas de Docker.
docker <command> prune --filter "label=<label>"
bash

Ejemplo: limpiar todos los volúmenes sin utilizar que tengan la etiqueta mylabel.

docker volume prune --filter "label=mylabel"
bash
  • dangling: filtra recursos que ya no están asociados con ningún co­n­te­ne­dor.
docker <command> prune --filter "dangling=true"
bash

Ejemplo: eliminar todas las imágenes que ya no están en uso (dangling).

docker image prune --filter "dangling=true"
bash

Además de los filtros me­n­cio­na­dos, también existen opciones de filtros más es­pe­cí­fi­cos según el tipo de recurso:

  • before y since para imágenes: filtran imágenes según su fecha de creación, ya sea antes o desde un momento es­pe­cí­fi­co.
  • exited para co­n­te­ne­do­res: filtra los co­n­te­ne­do­res según su estado de salida (por ejemplo, exited=0 para co­n­te­ne­do­res que han terminado co­rre­c­ta­me­n­te).

Eliminar recursos Docker

Paso 1: abre un terminal o una línea de comandos en tu sistema.

Paso 2: ejecuta Docker prune para limpiar el sistema:

docker {resource} prune
bash

Sustituye {resource} por el tipo de recursos que quieras eliminar. Son valores válidos container, image, volume y network.

Eliminar co­n­te­ne­do­res Docker

Por defecto, Docker no libera au­to­má­ti­ca­me­n­te los co­n­te­ne­do­res cuando estos han terminado su ciclo de vida. Por ello, es im­po­r­ta­n­te revisar con fre­cue­n­cia los co­n­te­ne­do­res detenidos y eli­mi­nar­los si es necesario, ya que así se liberan los recursos blo­quea­dos y quedan di­s­po­ni­bles para los co­n­te­ne­do­res en ejecución. A co­n­ti­nua­ción, de­s­cri­bi­mos dos métodos para hacerlo:

  • docker rm: este comando está diseñado para eliminar ma­nua­l­me­n­te uno o varios co­n­te­ne­do­res Docker, por lo que es la opción más adecuada si sabes qué co­n­te­ne­do­res quieres eliminar. Debes es­pe­ci­fi­car las ID o los nombres de los co­n­te­ne­do­res que quieres eliminar, de forma que puedas eliminar solo ciertos co­n­te­ne­do­res sin afectar a otros.

Aquí tienes un ejemplo para eliminar los co­n­te­ne­do­res con los nombres container1 y container2:

docker rm container1 container2
bash
  • docker container prune: este comando está diseñado para eliminar de una sola vez varios co­n­te­ne­do­res detenidos. Esta opción es ideal para liberar espacio de manera rápida y eficiente al eliminar todos los co­n­te­ne­do­res que están detenidos que no tengan procesos en ejecución.
docker container prune
bash

Este comando enumera todos los co­n­te­ne­do­res detenidos y pide tu co­n­fi­r­ma­ción antes de eli­mi­nar­los, lo que resulta es­pe­cia­l­me­n­te útil en entornos donde se crean muchos co­n­te­ne­do­res te­m­po­ra­les que luego ya no se necesitan.

Para la gestión y el ma­n­te­ni­mie­n­to diarios de tu entorno Docker, te re­co­me­n­da­mos usar docker container prune con fre­cue­n­cia para que los co­n­te­ne­do­res detenidos se limpien au­to­má­ti­ca­me­n­te. Esto te ayudará a ahorrar tiempo y asegurará que no haya recursos in­ne­ce­sa­rios que puedan empeorar el re­n­di­mie­n­to del sistema. En cambio, docker rm es perfecto cuando hay que eliminar solo de­te­r­mi­na­dos co­n­te­ne­do­res, ya sea para pruebas, de­sa­rro­llo u otros re­qui­si­tos.

Eliminar imágenes Docker

Las imágenes de Docker son la base de los co­n­te­ne­do­res. Con el tiempo, pueden acu­mu­lar­se muchas versiones y etiquetas. Al crear o ac­tua­li­zar nuevas imágenes, suelen quedar imágenes antiguas o sin utilizar (las de­no­mi­na­das “dangling”), que ocupan espacio en tu sistema y pueden afectar al re­n­di­mie­n­to, sobre todo si se trata de una gran cantidad.

Docker prune permite ide­n­ti­fi­car y eliminar imágenes que ya no se utilizan de la siguiente forma:

docker image prune [Options]
bash

A co­n­ti­nua­ción, se describen algunas de las posibles opciones.

  • -a, --all: sirve para eliminar no solo las imágenes dangling, sino también las imágenes sin utilizar. Las imágenes no usadas son las que ya no tienen etiquetas y, por tanto, no pueden ser re­fe­re­n­cia­das di­re­c­ta­me­n­te por etiquetas.
docker image prune -a
bash
  • -f, --force: por defecto, Docker pide una co­n­fi­r­ma­ción antes de eliminar las imágenes. Mediante -f o --force puedes omitir ese paso de co­n­fi­r­ma­ción y realizar la eli­mi­na­ción di­re­c­ta­me­n­te.
docker image prune -f
bash

Eliminar todas las imágenes Docker

También puedes limpiar rá­pi­da­me­n­te todas las Docker Images que ya no necesites. Para utilizar Docker prune co­rre­c­ta­me­n­te, abre primero el terminal o la línea de comandos y escribe lo siguiente:

docker image prune -a --force
bash

Asegúrate de ide­n­ti­fi­car qué imágenes se eli­mi­na­rán antes de realizar la limpieza. La opción -a también puede eliminar imágenes sin usar que aún podrías necesitar.

Eliminar volúmenes Docker

Los volúmenes son pe­r­si­s­te­n­tes y mantienen los datos más allá de la vida útil del co­n­te­ne­dor. Con el tiempo, estos volúmenes pueden aumentar y ocupar recursos in­ne­ce­sa­rios.

docker volume prune
bash

Este comando busca todos los volúmenes en los que ya no hay co­n­te­ne­do­res activos. Se te mostrará una lista de volúmenes que se sugiere eliminar y se pedirá una co­n­fi­r­ma­ción antes de proceder con la limpieza.

En cambio, el comando docker volume rm elimina volúmenes de Docker es­pe­cí­fi­cos de manera directa, una opción útil cuando sabes exac­ta­me­n­te qué volumen quieres borrar in­de­pe­n­die­n­te­me­n­te de si lo está uti­li­za­n­do un co­n­te­ne­dor o no. Para eliminar un Docker Volume es­pe­cí­fi­co, utiliza el comando docker volume rm seguido del nombre o ID del volumen:

docker volume rm volume_name
bash

Este comando elimina los datos de forma pe­r­ma­ne­n­te, por lo que debes ase­gu­rar­te de que conoces el nombre o ID exacto del volumen que quieres eliminar.

Eliminar redes Docker

Las redes de Docker son un co­m­po­ne­n­te fu­n­da­me­n­tal para la co­mu­ni­ca­ción entre co­n­te­ne­do­res, ya sea que se en­cue­n­tren en el mismo host o di­s­tri­bui­dos entre varios. Estas redes pe­r­ma­ne­cen activas incluso después de que los co­n­te­ne­do­res se detengan o eliminen. Con el tiempo, pueden acu­mu­lar­se redes que ya no se utilizan y que ocupan recursos in­ne­ce­sa­rios. El comando docker prune network es una manera sencilla de ide­n­ti­fi­car y eliminar estas redes que ya no están en uso.

Este es el comando:

docker network prune [OPTIONS]
bash

Docker genera una lista de todas las redes que ya no son uti­li­za­das por co­n­te­ne­do­res activos o que ya no están re­fe­re­n­cia­das. Después, pide una co­n­fi­r­ma­ción antes de eli­mi­nar­las.

Mejores prácticas de Docker prune

  • Au­to­ma­ti­za­ción de la limpieza: im­ple­me­n­ta scripts o he­rra­mie­n­tas au­to­ma­ti­za­das para eliminar con fre­cue­n­cia imágenes, co­n­te­ne­do­res y volúmenes Docker no usados. Así ma­n­te­n­drás limpio el entorno y op­ti­mi­za­rás el re­n­di­mie­n­to.
  • Parches de seguridad y ac­tua­li­za­cio­nes: asegúrate de que los motores Docker, los sistemas ope­ra­ti­vos del host y todas las imágenes Docker se co­m­prue­ben y ac­tua­li­cen con re­gu­la­ri­dad para minimizar las vu­l­ne­ra­bi­li­da­des.
  • Monitoreo y registro: utiliza he­rra­mie­n­tas de monitoreo y registro para su­pe­r­vi­sar el re­n­di­mie­n­to de los co­n­te­ne­do­res, detectar eventos ine­s­pe­ra­dos y fomentar la proac­ti­vi­dad en el ma­n­te­ni­mie­n­to.
  • Copias de seguridad externas: establece rutinas para realizar copias de seguridad externas de datos im­po­r­ta­n­tes de los co­n­te­ne­do­res Docker, por ejemplo, rea­li­za­n­do de vez en cuando copias de seguridad de co­n­te­ni­dos de bases de datos o archivos de co­n­fi­gu­ra­ción.
  • Co­m­pro­ba­ción manual antes de la eli­mi­na­ción: comprueba con cuidado si realmente no necesitas ciertos recursos antes de eli­mi­nar­los. De esta manera, habrá menos riesgo de perder datos que no querías borrar o de que se produzcan in­te­rru­p­cio­nes en procesos en curso.
Consejo

Si acabas de empezar a trabajar con Docker y necesitas aprender lo básico, te re­co­me­n­da­mos nuestro tutorial de Docker.

Ir al menú principal