Cómo usar el comando docker network prune para eliminar redes no utilizadas

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 gestionar eficazmente sus redes Docker utilizando el comando docker network prune. Comenzaremos creando varias redes personalizadas para simular un escenario del mundo real con múltiples redes.

Después de crear estas redes, aprenderá cómo enumerar e identificar qué redes no se están utilizando actualmente. Finalmente, practicarás el uso del comando docker network prune para eliminar estas redes no utilizadas, incluyendo cómo aplicar filtros para una eliminación más dirigida. Esta experiencia práctica le proporcionará las habilidades necesarias para mantener su entorno Docker limpio y optimizado.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ls -.-> lab-555178{{"Cómo usar el comando docker network prune para eliminar redes no utilizadas"}} docker/ps -.-> lab-555178{{"Cómo usar el comando docker network prune para eliminar redes no utilizadas"}} docker/rm -.-> lab-555178{{"Cómo usar el comando docker network prune para eliminar redes no utilizadas"}} docker/prune -.-> lab-555178{{"Cómo usar el comando docker network prune para eliminar redes no utilizadas"}} docker/network -.-> lab-555178{{"Cómo usar el comando docker network prune para eliminar redes no utilizadas"}} end

Crear algunas redes personalizadas

En este paso, aprenderemos cómo crear redes personalizadas en Docker. Por defecto, Docker proporciona tres redes: bridge, host y none. Sin embargo, puedes crear tus propias redes personalizadas para aislar contenedores y controlar cómo se comunican entre sí.

Para crear una red personalizada, utilizamos el comando docker network create. Vamos a crear una red bridge llamada my-network-1.

docker network create my-network-1

Deberías ver una salida similar a esta, lo que indica que la red se ha creado correctamente:

<network_id>

Ahora, vamos a crear otra red bridge llamada my-network-2.

docker network create my-network-2

Nuevamente, deberías ver un ID de red como salida.

Podemos verificar que las redes se han creado listando todas las redes disponibles utilizando el comando docker network ls.

docker network ls

La salida mostrará una lista de redes, incluyendo las redes predeterminadas y las dos redes personalizadas que acabamos de crear (my-network-1 y my-network-2).

Listar redes para identificar las no utilizadas

En este paso, aprenderemos cómo listar las redes Docker e identificar aquellas que actualmente no están siendo utilizadas por ningún contenedor. Esto es útil para limpiar tu entorno Docker y liberar recursos.

Ya utilizamos el comando docker network ls en el paso anterior para listar todas las redes. Vamos a ejecutarlo de nuevo para ver el estado actual.

docker network ls

La salida muestra el ID de la red, el nombre, el controlador (driver) y el alcance (scope) de cada red. Observa que las redes my-network-1 y my-network-2 que creamos se encuentran en la lista.

Para identificar las redes no utilizadas, podemos usar el comando docker network prune con la bandera --dry-run. Esta bandera nos permite ver qué redes se eliminarían sin eliminarlas realmente.

docker network prune --dry-run

La salida de este comando listará las redes que no están conectadas a ningún contenedor en ejecución y que se eliminarán. Dado que no hemos conectado ningún contenedor a my-network-1 o my-network-2, deben aparecer en la salida de la ejecución simulada (dry run).

Vamos a ejecutar un contenedor simple conectado a my-network-1 para ver cómo afecta a la salida de docker network prune --dry-run. Utilizaremos la imagen hello-world, que es muy pequeña. Primero, descarguemos la imagen:

docker pull hello-world

Ahora, ejecutemos un contenedor utilizando esta imagen y conectémoslo a my-network-1. La bandera -d ejecuta el contenedor en modo desatendido (en segundo plano).

docker run -d --network my-network-1 hello-world

Verás un ID de contenedor como salida.

Ahora, ejecutemos de nuevo el comando docker network prune --dry-run.

docker network prune --dry-run

Esta vez, my-network-1 no debe aparecer en la lista de redes a eliminar porque está siendo utilizada por el contenedor hello-world en ejecución. my-network-2, que no está siendo utilizada, debe seguir apareciendo en la lista.

Para detener y eliminar el contenedor hello-world, primero encuentra su ID utilizando docker ps.

docker ps

Luego, detén el contenedor utilizando docker stop <container_id> y elimínalo utilizando docker rm <container_id>. Reemplaza <container_id> con el ID real de la salida de docker ps.

docker stop <container_id>
docker rm <container_id>

Ahora, si ejecutas docker network prune --dry-run de nuevo, tanto my-network-1 como my-network-2 deben aparecer en la lista de redes a eliminar, ya que ya no están en uso.

Eliminar todas las redes no utilizadas

En este paso, aprenderemos cómo eliminar todas las redes no utilizadas utilizando el comando docker network prune. Este comando es útil para limpiar tu entorno Docker y liberar recursos eliminando las redes que actualmente no están conectadas a ningún contenedor.

Antes de eliminar las redes, listemos las redes de nuevo para ver cuáles están presentes actualmente.

docker network ls

Deberías ver las redes predeterminadas (bridge, host, none) y las redes personalizadas que creamos en el primer paso (my-network-1 y my-network-2). Dado que detenimos y eliminamos el contenedor hello-world en el paso anterior, tanto my-network-1 como my-network-2 ahora deben estar sin usar.

Para eliminar todas las redes no utilizadas, simplemente ejecuta el comando docker network prune sin ninguna bandera. Docker te pedirá que confirmes la acción.

docker network prune

Verás un mensaje solicitando confirmación, como este:

WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N]

Escribe y y presiona Enter para continuar con la eliminación.

La salida listará las redes que se han eliminado y la cantidad total de espacio recuperado.

Ahora, listemos las redes de nuevo para confirmar que my-network-1 y my-network-2 se han eliminado.

docker network ls

Ahora solo deberías ver las redes predeterminadas (bridge, host, none) en la lista.

Eliminar redes no utilizadas con filtros

En este paso, aprenderemos cómo eliminar redes no utilizadas utilizando filtros. Los filtros te permiten eliminar selectivamente redes basadas en ciertos criterios, como etiquetas (labels) o tiempo de creación.

Primero, creemos un par de nuevas redes con etiquetas para demostrar el filtrado. Crearemos network-a con la etiqueta env=dev y network-b con la etiqueta env=test.

docker network create --label env=dev network-a
docker network create --label env=test network-b

Deberías ver los IDs de las redes como salida de ambos comandos.

Ahora, listemos las redes para ver las recién creadas con sus etiquetas.

docker network ls

Deberías ver network-a y network-b en la lista.

Para eliminar redes basadas en un filtro, usamos la bandera --filter con el comando docker network prune. Por ejemplo, para eliminar todas las redes no utilizadas con la etiqueta env=dev, podemos usar el filtro label=env=dev.

Hagamos primero una ejecución simulada (dry run) para ver qué redes se eliminarían con este filtro.

docker network prune --filter label=env=dev --dry-run

La salida debería mostrar network-a como la red que se eliminaría, ya que tiene la etiqueta env=dev y actualmente no está en uso.

Ahora, eliminemos realmente las redes no utilizadas con la etiqueta env=dev.

docker network prune --filter label=env=dev

Se te pedirá confirmación. Escribe y y presiona Enter.

La salida mostrará que network-a ha sido eliminada.

Listemos las redes de nuevo para confirmar que network-a se ha ido, pero network-b (con la etiqueta env=test) todavía está presente.

docker network ls

Deberías ver network-b en la lista, pero no network-a.

También puedes filtrar basado en otros criterios, como redes creadas antes de un cierto tiempo. Sin embargo, filtrar por etiquetas es una forma común y útil de administrar tus redes.

Resumen

En este laboratorio, aprendimos cómo administrar redes Docker, centrándonos específicamente en identificar y eliminar las no utilizadas. Comenzamos creando redes puente (bridge) personalizadas utilizando el comando docker network create, demostrando cómo agregar nuevas redes más allá de las predeterminadas. Luego, usamos el comando docker network ls para listar todas las redes disponibles y verificar la creación de nuestras redes personalizadas.

Posteriormente, exploramos cómo identificar las redes no utilizadas. Aprendimos que el comando docker network prune, especialmente con la bandera --dry-run, es una herramienta valiosa para previsualizar qué redes no están conectadas a ningún contenedor y, por lo tanto, son candidatas para ser eliminadas. Este paso es crucial para entender el impacto de la eliminación antes de borrar realmente cualquier red.