Como usar o comando docker network prune para remover redes não utilizadas

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar efetivamente suas redes Docker utilizando o comando docker network prune. Começaremos criando várias redes personalizadas para simular um cenário do mundo real com múltiplas redes.

Após a criação dessas redes, você aprenderá como listar e identificar quais redes estão atualmente não utilizadas. Finalmente, você praticará o uso do comando docker network prune para remover essas redes não utilizadas, incluindo como aplicar filtros para uma poda (pruning) mais direcionada. Essa experiência prática o equipará com as habilidades necessárias para manter seu ambiente Docker limpo e otimizado.

Criar algumas redes personalizadas

Nesta etapa, aprenderemos como criar redes personalizadas no Docker. Por padrão, o Docker fornece três redes: bridge, host e none. No entanto, você pode criar suas próprias redes personalizadas para isolar contêineres e controlar como eles se comunicam entre si.

Para criar uma rede personalizada, usamos o comando docker network create. Vamos criar uma rede bridge chamada my-network-1.

docker network create my-network-1

Você deve ver uma saída semelhante a esta, indicando que a rede foi criada com sucesso:

<network_id>

Agora, vamos criar outra rede bridge chamada my-network-2.

docker network create my-network-2

Novamente, você deve ver um ID de rede como saída.

Podemos verificar se as redes foram criadas listando todas as redes disponíveis usando o comando docker network ls.

docker network ls

A saída mostrará uma lista de redes, incluindo as redes padrão e as duas redes personalizadas que acabamos de criar (my-network-1 e my-network-2).

Listar redes para identificar as não utilizadas

Nesta etapa, aprenderemos como listar as redes Docker e identificar aquelas que não estão sendo usadas por nenhum contêiner no momento. Isso é útil para limpar seu ambiente Docker e liberar recursos.

Já usamos o comando docker network ls na etapa anterior para listar todas as redes. Vamos executá-lo novamente para ver o estado atual.

docker network ls

A saída mostra o ID da rede, o nome, o driver e o escopo para cada rede. Observe que as redes my-network-1 e my-network-2 que criamos estão listadas.

Para identificar redes não utilizadas, podemos usar o comando docker network prune com a flag --dry-run. Essa flag nos permite ver quais redes seriam removidas sem realmente removê-las.

docker network prune --dry-run

A saída deste comando listará as redes que não estão conectadas a nenhum contêiner em execução e seriam podadas (pruned). Como não anexamos nenhum contêiner a my-network-1 ou my-network-2, elas devem aparecer na saída da execução a seco (dry run).

Vamos executar um contêiner simples anexado a my-network-1 para ver como isso afeta a saída de docker network prune --dry-run. Usaremos a imagem hello-world, que é muito pequena. Primeiro, puxe a imagem:

docker pull hello-world

Agora, execute um contêiner usando esta imagem e anexe-o a my-network-1. A flag -d executa o contêiner em modo detached (em segundo plano).

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

Você verá um ID de contêiner como saída.

Agora, vamos executar o comando docker network prune --dry-run novamente.

docker network prune --dry-run

Desta vez, my-network-1 não deve aparecer na lista de redes a serem podadas porque está sendo usado pelo contêiner hello-world em execução. my-network-2, que não está sendo usado, ainda deve ser listado.

Para parar e remover o contêiner hello-world, primeiro encontre seu ID usando docker ps.

docker ps

Em seguida, pare o contêiner usando docker stop <container_id> e remova-o usando docker rm <container_id>. Substitua <container_id> pelo ID real da saída de docker ps.

docker stop <container_id>
docker rm <container_id>

Agora, se você executar docker network prune --dry-run novamente, tanto my-network-1 quanto my-network-2 devem ser listados como redes a serem podadas, pois não estão mais em uso.

Remover todas as redes não utilizadas

Nesta etapa, aprenderemos como remover todas as redes não utilizadas usando o comando docker network prune. Este comando é útil para limpar seu ambiente Docker e liberar recursos, removendo redes que não estão atualmente conectadas a nenhum contêiner.

Antes de podar, vamos listar as redes novamente para ver quais estão presentes no momento.

docker network ls

Você deve ver as redes padrão (bridge, host, none) e as redes personalizadas que criamos na primeira etapa (my-network-1 e my-network-2). Como paramos e removemos o contêiner hello-world na etapa anterior, tanto my-network-1 quanto my-network-2 agora devem estar não utilizados.

Para podar todas as redes não utilizadas, basta executar o comando docker network prune sem nenhuma flag. O Docker solicitará que você confirme a ação.

docker network prune

Você verá uma mensagem pedindo confirmação, como esta:

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

Digite y e pressione Enter para prosseguir com a poda.

A saída listará as redes que foram removidas e a quantidade total de espaço recuperado.

Agora, vamos listar as redes novamente para confirmar que my-network-1 e my-network-2 foram removidas.

docker network ls

Você agora deve ver apenas as redes padrão (bridge, host, none) na lista.

Remover redes não utilizadas com filtro

Nesta etapa, aprenderemos como podar redes não utilizadas usando filtros. Os filtros permitem que você remova seletivamente redes com base em certos critérios, como rótulos ou tempo de criação.

Primeiro, vamos criar algumas novas redes com rótulos para que possamos demonstrar a filtragem. Criaremos network-a com o rótulo env=dev e network-b com o rótulo env=test.

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

Você deve ver os IDs da rede como saída para ambos os comandos.

Agora, vamos listar as redes para ver as recém-criadas com seus rótulos.

docker network ls

Você deve ver network-a e network-b na lista.

Para podar redes com base em um filtro, usamos a flag --filter com o comando docker network prune. Por exemplo, para podar todas as redes não utilizadas com o rótulo env=dev, podemos usar o filtro label=env=dev.

Vamos realizar uma execução a seco (dry run) primeiro para ver quais redes seriam podadas com este filtro.

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

A saída deve mostrar network-a como a rede que seria podada, pois ela tem o rótulo env=dev e está atualmente não utilizada.

Agora, vamos realmente podar as redes não utilizadas com o rótulo env=dev.

docker network prune --filter label=env=dev

Você será solicitado a confirmar. Digite y e pressione Enter.

A saída mostrará que network-a foi removida.

Vamos listar as redes novamente para confirmar que network-a se foi, mas network-b (com o rótulo env=test) ainda está presente.

docker network ls

Você deve ver network-b na lista, mas não network-a.

Você também pode filtrar com base em outros critérios, como redes criadas antes de um determinado tempo. No entanto, a filtragem por rótulos é uma maneira comum e útil de gerenciar suas redes.

Resumo

Neste laboratório, aprendemos como gerenciar redes Docker, com foco específico na identificação e remoção daquelas não utilizadas. Começamos criando redes bridge personalizadas usando o comando docker network create, demonstrando como adicionar novas redes além das padrão. Em seguida, usamos o comando docker network ls para listar todas as redes disponíveis e verificar a criação de nossas redes personalizadas.

Posteriormente, exploramos como identificar redes não utilizadas. Aprendemos que o comando docker network prune, particularmente com a flag --dry-run, é uma ferramenta valiosa para visualizar quais redes não estão conectadas a nenhum contêiner e, portanto, são candidatas à remoção. Esta etapa é crucial para entender o impacto da poda antes de realmente excluir qualquer rede.