Como remover os objetos do Docker

Com o passar dos dias e dos testes o docker vai ficando progressivamente mais bagunçado. Uma verificação simples já demonstra que há muitas imagens instaladas, muitos containers inúteis, muitos volumes mapeados gerando risco, redes e afins. Esse artigo te ajudará a manter melhor o seu ambiente Docker apagando aquilo que não presta.

Visão geral

Funções prune

O Docker possui diversas funções de prune (podemos traduzir para expurgo ou poda) que nos ajuda a eliminar estruturas que o sistema consegue facilmente saber onde está e como está sendo utilizado.

Funções de remoção

As funções de remoção são mais objetivas do que as funções prune. Nesse caso a estrutura definida para ser deletada será, se for possível. Mas mesmo quando não for possível talvez seja interessante se valer do parâmetro –force, que rodará o comando mesmo se, por exemplo, um container estiver em uso.

Removendo as estruturas gerais

Para remover tudo que não estiver em uso no docker ao mesmo tempo (Volumes, Containers, Imagens, Redes) utilize o seguinte comando

docker system prune

Ou também com um filtro de hora

docker system prune -a --filter "until = 24h"

Removendo imagens

Removendo uma imagem por id

docker rmi id_da_imagem

Removendo várias de uma só vez

docker rmi id_da_imagem1 id_da_imagem2

Removendo por tag name

docker rmi -f tag_name

Removendo imagens sem uso

docker image prune

Removendo todas as imagens

docker rmi $ (docker images -a -q)

Removendo containers

Para remover um container definido pode utilizar os comandos

docker rm meucontainer

docker rm 158fccd533c

Também é possível dar um prune apenas nos containers

docker container prune

Uma opção interessante pode ser definir que o container será removido automaticamente após o uso. Para tal utilize

docker run —rm nome_da_imagem

Com o seguinte comando você pode parar todos os container ao mesmo tempo

docker stop $ (docker ps -a -q)

E seguindo, pode remover todos ao mesmo tempo

docker rm $ (docker ps -a -q)

Removendo volumes

Remove um volume

docker volume rm nome_do_volume

Remove vários volumes

docker volume rm nome_do_volume1 nome_do_volume2

Remove volumes não utilizados

docker volume prune

Remove volumes com uma Label específica (ao criar volumes é possível passar o parâmetro –label para definir esse rótulo)

docker volume prune —filter "label = test"

Removendo Redes

Removendo uma rede por id ou nome

docker network rm nome_da_rede
docker network rm id_da_rede

Removendo várias redes

 docker network rm nome_da_rede1 nome_da_rede2 id_da_rede3 

Removendo todas as redes não utilizadas

docker network prune
docker network prune --filter "until = 24h"

Removendo objetos do docker compose

Removendo todos os containers, redes, volumes e imagens criadas via docker-compose

docker-compose down --rmi all -v --remove-orphans

Removendo tudo ao mesmo tempo (imagens, containers, redes e volumes)

# Para todos os containers
docker stop $(docker ps -a -q)

# Remove todos os containers
docker rm $(docker ps -a -q)

# Remove todas as imagens docker
docker rmi $(docker images -a -q) -f

# Remove todos os volumes existentes
docker volume rm $(docker volume ls -q)

# Remove todas as redes não utilizadas (com excessão das redes default)
docker network prune

# Remove todos ou outros resíduos (containers parados, redes sem associação, imagens sem container, cache de build)
docker system prune --all

Thiago Anselme
Thiago Anselme - Gerente de TI - Arquiteto de Soluções

Ele atua/atuou como Dev Full Stack C# .NET / Angular / Kubernetes e afins. Ele possui certificações Microsoft MCTS (6x), MCPD em Web, ITIL v3 e CKAD (Kubernetes) . Thiago é apaixonado por tecnologia, entusiasta de TI desde a infância bem como amante de aprendizado contínuo.

Deixe um comentário