Se você usa o Docker diariamente para buildar imagens, rodar bancos de dados locais ou testar ferramentas de engenharia de dados, com certeza já passou por isso: do nada, o seu sistema operacional começa a reclamar de falta de espaço em disco, ou aquele build falha acusando que não há armazenamento disponível (“no space left on device”).
O Docker é uma ferramenta fantástica, mas ele é extremamente “acumulador”. Ele não deleta nada sozinho. Imagens antigas que você não usa mais, containers parados, volumes de testes esquecidos e caches de builds passados vão se acumulando silenciosamente no seu disco rígido. Em poucos meses, é comum ver o Docker engolir 30GB, 50GB ou até mais de 100GB da sua máquina.
Neste post, vamos conhecer o comando definitivo de faxina do DevOps: o docker system prune. Vamos entender o que ele apaga, como usá-lo com segurança e como recuperar o controle do seu armazenamento.
O que o ‘docker system prune’ realmente faz?
O comando prune significa, literalmente, “podar”. Ele foi desenhado para fazer uma varredura completa no seu ambiente Docker e remover tudo aquilo que está flutuando no sistema sem utilidade, os chamados objetos não utilizados (unused) ou órfãos (dangling).
Por padrão, quando você roda o comando básico, o Docker limpa quatro categorias:
- Containers parados: Todos os containers que você rodou, deram
exitou que você parou comdocker stop, mas não removeu comdocker rm. - Redes não utilizadas: Redes customizadas que foram criadas (por exemplo, por arquivos antigos do Docker Compose) e que nenhum container está usando no momento.
- Imagens órfãs (Dangling Images): Aquelas imagens que aparecem como
<none>:<none>quando você rodadocker images. Geralmente elas sobram quando você faz o build de uma nova versão de uma imagem com a mesma tag de antes. - Cache de Build: Arquivos temporários criados pelo motor de build (BuildKit) para acelerar as próximas compilações.
O Comando de Faxina na Prática
O comando seguro para o dia a dia
Execute o comando básico. O Docker listará o que será apagado e pedirá uma confirmação digitando y:
docker system prune
Nota: Este comando não apaga seus volumes (seus dados de bancos estão salvos) e nem imagens que tenham tags válidas.
A “Bomba Atômica” da liberação de espaço
Se a sua situação de espaço for crítica e você quiser apagar absolutamente tudo que não esteja rodando exatamente agora (incluindo imagens antigas com nome e volumes de dados órfãos), adicione as flags -a e --volumes:
docker system prune -a --volumes
⚠️ ATENÇÃO: Esse comando apagará todos os seus bancos de dados locais que não estejam com um container ativo anexado a eles. Use com extrema cautela!
Como ver quanto espaço você recuperou?
Antes de sair rodando a limpeza às cegas, o Docker nos fornece uma ferramenta fantástica para analisar a saúde do nosso armazenamento. É o equivalente ao comando df -h do Linux, mas focado puramente nos componentes do Docker.
Rode o comando de análise para ver o panorama do seu disco:
Ele vai gerar uma tabela limpa mostrando o tamanho total ocupado por Imagens, Containers, Volumes e Build Cache, detalhando inclusive a porcentagem exata de espaço que está sendo desperdiçada e pode ser recuperada imediatamente (Reclaimable).
💡 Dica de Automação para Ambientes de CI/CD: Se você gerencia servidores de integração contínua (como Runners do GitHub Actions ou instâncias Jenkins), o acúmulo de cache de imagens antigas pode derrubar o seu pipeline em poucas semanas. A boa prática de engenharia de infraestrutura é colocar uma tarefa agendada no Cron do Linux para rodar
docker system prune -f(a flag-fforça a execução sem pedir a confirmaçãoy/n) uma vez por semana durante a madrugada.
Manter o ambiente de desenvolvimento limpo e otimizado é tão importante quanto escrever um código eficiente. Evita travamentos inesperados na sua máquina e acelera o comportamento global do Docker Engine.
Limpeza Cirúrgica no Docker: Como Podar Componentes Isolados
No post anterior, conhecemos o poder do docker system prune, a famosa “vassourada geral” que limpa o ambiente Docker de uma só vez. No entanto, no dia a dia da engenharia de dados e do DevOps, nem sempre você quer uma limpeza total.
Imagine que você tem vários containers de bancos de dados parados que você pretende usar mais tarde, mas o seu disco está cheio por causa de imagens antigas de testes. Se você rodar o system prune, vai perder o histórico daqueles containers parados.
Para resolver isso, o Docker nos permite fazer uma limpeza cirúrgica, agindo especificamente em apenas um tipo de componente por vez: imagens, containers ou volumes. Vamos ver como usar cada um desses comandos isolados com segurança.
Comandos de Limpeza Individual
docker image prune
Por padrão, remove apenas as imagens órfãs (dangling), que são aquelas listadas como <none>:<none>:
docker image prune
O Pulo do Gato: Se quiser apagar todas as imagens que não possuem nenhum container ativo atrelado a elas (mesmo as que têm nome e tag válidos), adicione a flag -a:
docker image prune -a
docker container prune
Vai varrer o sistema e deletar permanentemente todos os containers que estão com o status de parados (exited ou created):
docker container prune
Excelente para limpar aquela lista gigante que polui o terminal quando você digita docker ps -a.
docker volume prune
Este comando remove todos os **volumes nomeados** que não estão associados a nenhum container ativo no momento:
docker volume prune
⚠️ Atenção máxima: Se você parou o container do seu banco de dados temporariamente, rodar este comando vai apagar o volume e levar todos os seus dados embora. Só execute se tiver certeza absoluta!
O Filtro Avançado: Limpando com regras de tempo
Uma das ferramentas mais subutilizadas (e incrivelmente úteis) do Docker Prune é a flag --filter. Com ela, você pode adicionar inteligência à faxina.
Por exemplo, em vez de apagar todos os containers parados, você pode dizer ao Docker para limpar apenas aqueles que foram abandonados há mais de uma semana (168 horas). Veja a sintaxe:
Esse mesmo filtro de tempo (until) funciona perfeitamente para docker image prune, poupando as imagens que você baixou ou compilou recentemente.
💡 Dica de Segurança Contínua: Se você estiver criando scripts automatizados ou aliases no seu terminal Linux para agilizar os comandos (ex: criar um comando
limpar-docker), adicione a flag-f(force). Ela pula a confirmação interativa do terminal, o que é essencial para automações de infraestrutura.
Dominar os comandos granulares de limpeza dá a você o controle fino do seu ambiente local, garantindo eficiência sem correr o risco de causar um desastre apagando dados de projetos importantes por acidente.