Docker Prune: Um Guia Completo com Exemplos Práticos

Se você trabalha diariamente com o Docker, sabe o quão rapidamente ele pode consumir espaço em disco.

Ao longo do tempo, seu sistema acumula imagens, contêineres, volumes e redes não utilizados. Estes geralmente ficam inativos, ocupando armazenamento valioso e potencialmente impedindo você de trabalhar em seu projeto atual. Felizmente, o Docker fornece comandos de limpeza integrados que removem facilmente recursos desnecessários.

Esses comandos de limpeza fazem parte da família docker prune e hoje você aprenderá tudo sobre eles. Eles rapidamente se tornarão sua solução principal para liberar espaço em disco.

Vamos começar com uma breve visão geral antes de mergulharmos em exemplos práticos.  

Você é novo no Docker? Confira nosso guia sobre aprendendo Docker do zero para profissionais de dados para se atualizar rapidamente.  

O que é o Docker Prune?  

O termo “Docker Prune” geralmente se refere a um conjunto de comandos projetados para ajudar você a remover recursos Docker não utilizados e desnecessários.  

Com o tempo, especialmente se você trabalhar em vários projetos, você criará inúmeras imagens, executará contêineres e configurará volumes e redes. Todos esses itens se acumulam em seu sistema, ocupando uma quantidade significativa de espaço em disco. O objetivo do docker prune é limpar essa bagunça e recuperar espaço de armazenamento.  

Dito isso, há mais no docker prune do que aparenta.

Não é apenas um único comando que você pode executar. Bem, você poderia, mas às vezes você precisa de controle granular sobre o que será removido. É aí que este artigo entra. Ele irá mostrar como gerenciar a poda de forma eficaz, garantindo que você delete apenas o que pretende, e como praticar em um ambiente seguro para evitar remover acidentalmente dados importantes.

Vale ressaltar que os comandos de podaremovem apenas recursos que não estão sendo usados ativamente. Imagens, volumes e redes referenciados por contêineres em execução não serão excluídos. Em outras palavras, a poda não interfere em cargas de trabalho ativas.

Na próxima seção, vamos guiá-lo pelos diferentes tipos de comandos de poda e explicar como eles se encaixam em seu fluxo de trabalho.

Quer adicionar o Docker ao seu currículo ou portfólio? Estas 10 ideias de projetos do Docker vão te deixar pronto para o mercado de trabalho.

Todos os Comandos de Poda do Docker com Exemplos Práticos

O Docker fornece vários comandos de prune que permitem limpar recursos não utilizados individualmente ou todos de uma só vez. Nesta seção, você aprenderá sobre eles—tanto através da teoria quanto de exemplos práticos.  

docker system prune  

Este é o comando mais abrangente para recuperar espaço em disco. Ele remove todos os containers, redes, imagens e cache de compilação não utilizados em uma única operação.  

Se você está procurando uma maneira rápida de liberar espaço em disco com um único comando, este é o ideal para usar.

Você pode passar opções para o comando docker system prune:

  • -a ou --all remove todas as imagens não utilizadas em vez de apenas as penduradas (imagens que não têm tags ou não são referenciadas por nenhum contêiner).
  • --filter permite que você especifique valores de filtro.
  • -f ou --force ignora a solicitação de confirmação.
  • --volumes também limpa volumes anônimos juntamente com containers, redes, imagens e cache de construção.  

Por padrão, docker system prune solicita confirmação, pois é potencialmente destrutivo:  

Imagem 1 – Prompt de confirmação do Docker system prune

Para ignorar o prompt e remover todas as imagens, containers, redes e volumes não utilizados com um único comando, execute:  

docker system prune -a -f --volumes

Imagem 2 – Remova tudo com um único comando de limpeza do sistema docker

Mas e se você precisar de um controle mais granular? Vamos cobrir isso a seguir.

docker container prune

Simplesmente, este comando remove todos os containers parados.

Contêineres parados permanecem em seu sistema até serem removidos manualmente. Eles podem ocupar espaço em disco e ser difíceis de encontrar, a menos que você use uma ferramenta como Docker Desktop Dashboard.

Assim como docker system prune, este comando suporta opções:

  • --filter permite que você especifique pares de chave-valor para controlar quais contêineres serão removidos.
  • -f ou --force ignora o aviso de confirmação.

Aqui está uma lista de contêineres parados:

Imagem 3 – Lista de contêineres parados

Para remover code-server (e qualquer outro contêiner parado), execute:

docker container prune -f

Isso não solicitará confirmação e, em segundos, você verá uma saída como esta:

Imagem 4 – Mensagem de saída da limpeza de contêineres

E assim, não há mais contêineres parados:

Imagem 5 – Lista de contêineres não em execução (2)

Agora, vamos cuidar das imagens não utilizadas.

docker image prune

Semelhante ao comando anterior, docker image prune remove imagens não utilizadas.

Por padrão, ele remove apenas imagens pendentes—imagens que não têm tag e não estão associadas a um contêiner. Você pode usar uma opção opcional para remover todas as imagens não utilizadas, não apenas as pendentes.

Aqui está uma lista de opções disponíveis

  • -a ou --all remove todas as imagens não utilizadas em vez de apenas as pendentes.
  • --filter permite que você especifique pares de chave-valor para controlar quais imagens serão removidas.
  • -f ou --force ignora o prompt de confirmação.

Agora, vamos ver isso em ação!

Aqui está uma lista de imagens atualmente no sistema:

Imagem 6 – Lista de imagens do Docker

Para removê-las todas com um único comando, execute:

docker image prune -a -f

Você verá uma saída como esta no terminal:

Imagem 7 – Mensagem de saída de poda de imagem

Depois, nenhuma imagem permanece no Docker Desktop:

Imagem 8 – Lista de imagens Docker (2)

Em seguida, vamos lidar com volumes não utilizados.

docker volume prune

Como o nome sugere, o comando docker volume prune remove todos os volumes locais não utilizados. Em outras palavras, ele exclui volumes que não estão referenciados por nenhum contêiner.

Por padrão, o comando remove apenas volumes anônimos – volumes sem nome criados pelo Docker quando um contêiner é iniciado. Para remover volumes nomeados explicitamente, você precisa passar uma opção adicional.

Estas são as opções disponíveis:

  • -a ou --all remove todos os volumes não utilizados em vez de apenas os anônimos.
  • --filter permite que você especifique pares de chave-valor para controlar quais volumes serão removidos.
  • -f ou --force ignora o prompt de confirmação.

No nosso sistema, temos um único volume criado pelo usuário a partir de um arquivo docker-compose.yml:

Imagem 9 – Lista de volumes do Docker

O seguinte comando remove todos os volumes locais:

docker volume prune -a -f

Depois de executá-lo, você verá uma saída semelhante a esta:

Imagem 10 – Mensagem de saída da poda de volumes

Agora, nenhum volume permanece:

Imagem 11 – Lista de volumes do Docker (2)

Finalmente, vamos ver como deletar redes não utilizadas.

docker network prune

Quando os contêineres Docker se comunicam entre si, eles geralmente usam redes definidas pelo usuário. No entanto, suas redes geralmente permanecem em seu sistema uma vez que esses contêineres são removidos.

O comando docker network prune remove redes que não estão mais em uso por nenhum contêiner.

Assim como os outros comandos prune, ele inclui algumas opções:

  • --filter permite que você especifique pares de chave-valor para controlar quais redes serão removidas.
  • -f ou --force ignora o prompt de confirmação.

Ao contrário de imagens, contêineres ou volumes,você não pode inspecionar visualmente as redes através do Docker Desktop, então você precisará trabalhar a partir da linha de comando. Aqui está uma lista de redes disponíveis:

Imagem 12 – Lista de redes Docker

Para remover todas as redes não associadas à instalação padrão do Docker, execute:

docker network prune -a -f

Após a execução do comando, você verá uma saída como esta:

Imagem 13 – Mensagem de saída de poda de rede

Todas as redes associadas a containers anteriormente em execução agora foram removidas:

Imagem 14 – Lista de redes Docker

No entanto, observe que as três redes restantes são essenciais para o Docker funcionar corretamente e não podem ser removidas.

E é isso para o uso básico dos comandos docker prune! Em seguida, abordaremos tópicos avançados, como usar esses comandos com segurança e as melhores práticas para ambientes de produção e sensíveis.

Usando Docker Prune com Segurança

Os comandos docker prune ajudam a recuperar rapidamente espaço em disco, mas devem serusados com cautela, especialmente em ambientes de produção.

Excluir acidentalmente contêineres, imagens ou volumes importantes pode resultar em perda de dados e interromper fluxos de trabalho críticos. Para evitar isso, é melhor entender o que será removido antes de executar qualquer comando de limpeza.

Esta seção explica as precauções principais a serem tomadas ao executar docker prune com segurança.

Entendendo o que será removido

Os comandos de prune são projetados para remover apenas recursos que não estão sendo usados ativamente.

Por exemplo, docker image prune exclui apenas imagens penduradas, e docker volume prune remove apenas volumes não vinculados a nenhum contêiner. No entanto, adicionar opções como -a -f irá remover todas imagens ou volumes sem solicitar confirmação.  

Além disso, em ambientes complexos, as dependências podem ser fáceis de serem ignoradas, então sempre é uma boa prática verificar novamente antes de podar.  

Antes de executar qualquer comando prune, você deve inspecionar seu sistema para ver quais recursos estão atualmente em uso. Existem várias maneiras de fazer isso, e vamos explorar as mais comuns nesta seção. 

Use este comando para ver todos os containers, incluindo os parados: 

docker ps -a

Você deve ver uma saída semelhante a esta:

Imagem 15 – Lista de todos os containers do Docker

Da mesma forma, use este comando para listar todas as imagens, incluindo as não utilizadas:

docker images

A saída será estruturada de forma semelhante à acima:

Imagem 16 – Lista de todas as imagens do Docker

Para verificar os volumes, execute este comando para listar todos os volumes:

docker volume ls

Imagem 17 – Lista de todos os volumes do Docker

Revise essas saídas cuidadosamente para garantir que nenhum recurso crítico será excluído por engano.

Execução a seco para segurança

Infelizmente, o Docker ainda não possui uma opção integrada para uma execução a seco do comando de limpeza, mesmo que tenha sido solicitada anos atrás.

Por causa disso, você deve inspecionar recursos manualmente usando os comandos listados na seção anterior antes de executar um comando de poda.  

Se você estiver trabalhando em um ambiente sensível onde a persistência de dados é crítica, você deve sempre criar um backup antes de executar comandos de poda que afetam volumes.  

Claro, essas são apenas medidas de precaução, mas esperamos ver uma opção de execução simulada implementada em breve.

Melhores Práticas para Docker Prune  

Para manter seu ambiente Docker livre de bagunça desnecessária, é importante executar comandos prune regularmente—talvez até automatizá-los.  

Esta seção orienta você sobre as melhores práticas para executar comandos docker prune em ambientes de produção.  

Use docker prune regularmente  

Com o tempo, o Docker acumula imagens não utilizadas, contêineres parados e volumes desnecessários—todos os quais consomem um espaço significativo em disco.  

Executar comandos de poda regularmente mantém seu ambiente limpo e previne o uso excessivo de disco. Você deve incluí-los como parte do seu cronograma de manutenção.  

A cada algumas semanas é um bom ponto de partida, mas se sua configuração envolver a criação e remoção frequente de contêineres, considere um cronograma mais frequente.  

Tenha cautela em produção  

Qualquer trabalho em um ambiente de produção requer cuidado extra, e a poda do Docker não é exceção.  

Um momento de distração pode levar a tempo de inatividade ou perda de dados, e você não quer ser responsável por isso. Antes de executar comandos docker prune em um ambiente de produção, sempre inspecione os recursos do sistema usando docker ps -a, docker images e docker volume ls, conforme explicado na seção anterior.  

Além disso, é uma boa ideia usar comandos de limpeza específicos em vez do abrangente docker system prune, pois pode ser mais fácil se recuperar de exclusões não intencionais.  

Automatizar o docker prune  

Outra boa prática é simplificar os esforços de limpeza automatizando comandos docker prune usando tarefas agendadas.  

No Linux, você pode configurar um trabalho cron para executar os comandos em intervalos regulares, enquanto no Windows, você pode usar o Agendador de Tarefas para uma automação semelhante. Isso ajuda a manter um sistema organizado sem a necessidade de intervenção manual. No entanto, em um ambiente de produção, certifique-se de que a poda automatizada não interfira em cargas de trabalho críticas.

Por exemplo, este trabalho cron no Linux executa um comando de poda abrangente todos os domingos à meia-noite:

0 0 * * 0 docker system prune -a -f

Resolvendo Problemas de Poda do Docker

Os comandos docker prune são uma solução comum para recuperar espaço em disco, mas podem não ser suficientes para garantir espaço adequado para baixar novas imagens ou executar novos contêineres.  

Além disso, você pode remover acidentalmente recursos importantes, por isso é crucial discutir estratégias de recuperação.  

Ambos os tópicos serão abordados nesta seção.  

Enfrentando problemas de espaço em disco  

As imagens do Docker podem ser grandes—recentemente tivemos uma com mais de 13GB—e temos certeza de que existem ainda maiores. Portanto, mesmo após executar docker prune, você pode descobrir que seu sistema ainda está com pouco espaço em disco.  

Para ver exatamente quanto espaço está sendo usado por imagens, containers e volumes, execute este comando:

docker system df

Imagem 18 – Espaço usado pelo Docker

Ao recuperar espaço em disco com comandos docker prune, adicione a sinalização -a para remover todas as imagens, volumes ou containers – não apenas os que estão pendurados ou anônimos. Claro, tenha em mente as possíveis desvantagens dessa abordagem.

Se o problema de espaço em disco persistir, sua única opção é aumentar o espaço em disco disponível.

Recuperando de remoções acidentais

A recuperação é mais fácil de ser dita do que feita, é por isso que recomendamos entender o que será removido ao podar antes de executar o comando real.

No entanto, se você se encontrar em uma situação em que acidentalmente podou contêineres, imagens ou volumes importantes, comece verificando os logs para identificar o que foi removido.

No macOS, isso pode ser feito executando os seguintes dois comandos (opções para Windows e Linux):  

pred='process matches ".*(ocker|vpnkit).*" || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")' /usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred" /usr/bin/log show --debug --info --style syslog --last 30m --predicate "$pred" >/tmp/logs.txt

Executar esses comandos salvará os últimos 30 minutos de logs relacionados ao Docker em /tmp/logs.txt. Você deve inspecionar esses logs para determinar quais contêineres ou imagens foram excluídos.  

Para imagens excluídas, você provavelmente pode puxá-las novamente de um registro como Docker Hub. Um comando como este deve funcionar:

docker pull <image_name>

E para contentores eliminados, você sempre pode recriá-los se forem baseados em imagens persistentes:

docker run --name <container_name> <image_name>

Alternativamente, você pode restaurar a partir de backups se estiverem disponíveis, o que pode ser usado para recuperar tanto os dados do volume quanto do contentor. No futuro, considere usar ferramentas para snapshots de volumes para prevenir a perda de dados.

No entanto, a melhor estratégia é inspecionar os recursos que serão excluídos antes de executar um comando de poda e prosseguir apenas se você tiver absoluta certeza de que não afetará seu fluxo de trabalho.  

Resumindo o Docker Prune  

Para concluir, a família de comandos docker prune é uma maneira poderosa de recuperar espaço em disco, mas vem com o risco de excluir acidentalmente recursos necessários, levando à perda de dados. Esse risco é ainda maior ao usar as opções opcionais -a -f, que removerão tudo de forma forçada.  

No entanto, a poda permanece um método essencial para manter seu sistema limpo e organizado.  

Você só precisa ter cautela, especialmente em ambientes de produção. Use comandos como docker ps -a, docker images e docker volume ls antes de fazer a limpeza para listar todos os contêineres, imagens e volumes. Execute o comando de limpeza somente depois de ter certeza de que está tudo bem excluir os recursos listados (assumindo que não estão sendo usados por um contêiner em execução).

Se você deseja aprender mais sobre Docker, containerização e orquestração de contêineres, confira estes cursos na DataCamp:

Source:
https://www.datacamp.com/tutorial/docker-prune