Marcio Cunha

Deploy falhou por falta de espaço? Como limpar o Docker prune

Aprenda a automatizar a limpeza de containers parados e imagens órfãs com docker system prune para evitar falhas de disco em servidores de CI/CD.

Marcio Cunha•4 min
Também disponível em:EnglishEspañol
Resumo
  • A falta de espaço em servidores de automação ocorre porque o Docker acumula camadas antigas de build e cache.
  • O comando docker system prune remove com segurança todos os recursos parados que não estão em uso ativo.
  • A rotina de limpeza automatizada pode ser configurada via cron jobs para rodar em horários de baixo tráfego.
  • O uso correto de flags e volumes persistentes evita a perda acidental de dados críticos durante a faxina.
  • Ferramentas de monitoramento de disco complementam a estratégia ao alertar sobre gargalos antes do travamento.

Por que o disco do seu servidor de CI/CD enche tão rápido?

Quem gerencia servidores de integração contínua (CI/CD) sabe que o espaço em disco é um recurso finito e frequentemente ameaçado. Cada vez que uma aplicação é compilada e empacotada, a ferramenta de containers cria camadas temporárias para acelerar o processo. Na prática, isso significa que o sistema operacional armazena dezenas de megabytes ou gigabytes de dados obsoletos todos os dias. Quando a equipe percebe, o servidor está com o armazenamento esgotado e o próximo deploy falha abruptamente no meio da madrugada.

Para entender esse comportamento, vale lembrar que o Docker trata tudo como uma grande pilha de blocos reutilizáveis. Se uma imagem base é atualizada no repositório remoto, a versão anterior continua ocupando espaço físico no disco rígido caso nenhum comando de faxina seja executado. Esse acúmulo silencioso afeta diretamente a estabilidade operacional, exigindo intervenções manuais constantes ou uma estratégia robusta de limpeza automatizada, como aquela que discutimos em nosso guia sobre otimização de builds e cache no pipeline de CI/CD.

O que faz o comando docker system prune na prática?

O comando docker system prune funciona como uma faxina profunda em toda a infraestrutura local de containers. Na prática, ele varre o sistema operacional em busca de tudo o que está parado e sem uso: containers que já terminaram de rodar, redes que não conectam mais nenhum serviço ativo e imagens órfãs que não estão associadas a nenhum container existente. O sistema executa essa varredura para liberar espaço de forma rápida e indolor.

No entanto, é preciso ter cautela antes de rodar o comando de olhos fechados. Por padrão, o prune simples preserva as imagens que possuem pelo menos um container associado, mesmo que esse container esteja desligado. Para eliminar absolutamente tudo o que não está em execução no exato segundo da limpeza, os engenheiros costumam adicionar a flag -a. Essa operação profunda elimina qualquer resíduo obsoleto, garantindo que o servidor recupere dezenas de gigabytes de armazenamento desperdiçado.

Como automatizar rotinas de limpeza sem riscos

A melhor forma de evitar que o disco fique vermelho é tirar o fator humano da rotina de manutenção. Em vez de lembrar de acessar o servidor toda sexta-feira para rodar comandos manuais, você pode programar o sistema operacional para fazer isso sozinho durante a madrugada. O agendador de tarefas do Linux, conhecido como cron, é a ferramenta perfeita para essa missão, executando scripts de limpeza em horários de baixíssimo tráfego na rede.

Para colocar isso em prática com segurança, crie uma tarefa agendada que execute a limpeza com filtros de tempo, evitando apagar arquivos que acabaram de ser criados por um deploy em andamento. O comando abaixo ilustra como remover recursos parados que foram criados há mais de vinte e quatro horas, protegendo o ambiente contra deleções precipitadas:

0 3 * * * /usr/bin/docker system prune -f --filter "until=24h" >> /var/log/docker-prune.log 2>&1

Essa linha no arquivo de configuração do cron executa a faxina todos os dias às três horas da manhã. A flag -f força a execução sem pedir confirmação interativa, enquanto o redirecionamento salva o histórico em um arquivo de log para auditoria posterior. Essa mesma disciplina de automação e controle preventivo é vital para manter a resiliência em arquiteturas complexas, conceito que abordamos ao discutir estratégias avançadas de resiliência e controle de tráfego em ambientes de alta demanda.

Cuidados essenciais com volumes e dados persistentes

Um erro clássico cometido por administradores iniciantes é rodar comandos de limpeza agressivos sem verificar o destino dos volumes de dados. Volumes Docker são diretórios especiais projetados para guardar informações importantes que precisam sobreviver à morte de um container, como bancos de dados e arquivos enviados por usuários. Se você executar o comando padrão de prune incluindo a limpeza de volumes, todo o conteúdo armazenado em volumes não vinculados a containers ativos será sumariamente apagado.

Para proteger os dados da aplicação contra desastres operacionais, a regra de ouro é nunca utilizar a flag --volumes em rotinas totalmente automatizadas sem antes garantir que os dados vitais estão salvos em locais externos ou backups redundantes. Se um container de banco de dados for recriado e o volume órfão anterior for apagado por engano, a recuperação pode se tornar uma tarefa árdua e estressante para toda a equipe de engenharia.

Conclusão e boas práticas para servidores estáveis

Manter um servidor de CI/CD saudável exige mais do que apenas hardware potente; exige disciplina na gestão do armazenamento e automação inteligente dos recursos locais. O uso consciente do comando docker system prune aliado a rotinas agendadas no cron elimina o risco de falhas surpresa causadas por falta de espaço em disco, liberando os engenheiros para focarem no desenvolvimento de novas funcionalidades. Ao adotar essas práticas de limpeza preventiva e monitoramento contínuo, sua infraestrutura ganha estabilidade, previsibilidade e fôlego de sobra para suportar dezenas de deploys diários.