⌘K

09 – Docker System Prune — Como Limpar sua Máquina e Liberar Gigabytes de Espaço em Segundos

Last updated

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:

  1. Containers parados: Todos os containers que você rodou, deram exit ou que você parou com docker stop, mas não removeu com docker rm.
  2. 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.
  3. Imagens órfãs (Dangling Images): Aquelas imagens que aparecem como <none>:<none> quando você roda docker images. Geralmente elas sobram quando você faz o build de uma nova versão de uma imagem com a mesma tag de antes.
  4. 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

1
Faxina Padrão

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.

2
Limpeza Profunda

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:

Analisando o consumo de espaço
$ docker system df

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 -f força a execução sem pedir a confirmação y/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

📦
Apenas Imagens

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
🚀
Apenas Containers

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.

💾
Apenas Volumes

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:

Limpando com filtro de tempo (until)
$ docker container prune –filter “until=168h”

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.

Still stuck? How can we help? Get Help