Header Ads

Como podar recursos do Docker não usados

O Docker permite que você empacote rapidamente seus aplicativos como contêineres, tornando possível executá-los em qualquer lugar de seu laptop para uma nuvem pública. Depois de usar o Docker por um tempo, você pode acumular um grande número de contêineres redundantes, imagens e outros recursos. Veja como organizá-los.

O Docker normalmente não exclui nada, a menos que você diga para fazer isso. Isso significa que as imagens que você retirou e os contêineres que criou provavelmente ainda estão por aí em seu sistema, mesmo que não sejam mais usados.

Ter muitos recursos redundantes pode levar rapidamente ao uso excessivo do disco. Isso também resulta em uma saída muito mais longa ao listar os recursos na linha de comando, tornando mais difícil encontrar as informações que você está procurando.

Recursos pendentes de poda

A “ dangling ” resource é qualquer objeto Docker não associado atualmente a um contêiner. Isso inclui imagens, redes e volumes do Docker, bem como contêineres parados. No caso de imagens, uma imagem é “ pendente ” se não estiver marcado e não tiver referências.

O Docker fornece um único comando de manutenção para permitir que você limpe todos os recursos pendentes e contêineres interrompidos. A menos que um recurso seja usado por um contêiner em execução, ele será excluído.

 poda do sistema docker 

A execução do comando exibe um prompt de confirmação que lista os tipos de recursos a serem excluídos. Digite y e pressione Enter para continuar com a exclusão. Você pode desativar a confirmação passando o sinalizador -f ou --force.

Os volumes não são removidos por padrão. A exclusão de volumes traz o risco de perda de dados persistentes que você pode querer manter. Se você deseja remover os volumes que não estão associados a um contêiner, passe o sinalizador --volumes para incluí-los na operação.

Você pode excluir ainda mais dados de imagem passando o sinalizador -a (ou --all). Isso fará com que o Docker exclua todas as imagens não utilizadas, não apenas as pendentes sem referência. Cada imagem em seu sistema será excluída, a menos que haja pelo menos um contêiner em execução que exija isso.

Usando filtros ao podar

Os filtros podem ser usados ​​com o comando prune. A filtragem oferece mais controle sobre o que é excluído. Dois filtros são atualmente suportados, até e carimbo de data / hora.

  • até – O filtro até impede a exclusão de containers, imagens e redes criadas antes de um determinado momento. Você pode especificar a hora em vários formatos diferentes, como um carimbo de data / hora Unix em segundos (por exemplo, 1614890000) ou uma string de carimbo de data / hora formatada com data (por exemplo, 2021-03-04T20: 30: 00).
  • rótulo – O filtro de rótulo restringe a exclusão para que apenas os recursos com um determinado rótulo sejam excluídos. Os rótulos podem ser usados ​​com contêineres, imagens, redes e volumes. Você especifica rótulos como rótulo = chave = valor (chave igual a valor), rótulo! = Chave = valor (chave diferente de valor), rótulo = chave (tem o rótulo fornecido) ou rótulo! = Chave (não tem o determinado rótulo).

Para usar um filtro, passe-o para o sinalizador --filter:

 poda do sistema docker --filter até = 2021-03-04T20: 30: 00 --filter label = foo = bar 

Este comando excluiria recursos com o rótulo foo = bar que foram criados antes das 20h30 do dia 4 de março. Quaisquer recursos que não correspondam a esses critérios serão deixados intocados.

Remoção de tipos de recursos individuais

Você nem sempre precisará usar o dock do sistema de poda. O Docker também oferece comandos de poda mais granulares. Eles podem ser usados ​​quando você deseja remover apenas um tipo de recurso.

Os sinalizadores --force e --filter suportados pelo docker system prune também se aplicam aos comandos de prune individuais listados abaixo.

Recipientes de poda

Os comandos do Docker diários podem resultar rapidamente em um grande número de contêineres interrompidos. O problema é exasperado se você encaixar imagens de compilação sem o sinalizador --rm, pois isso faz com que as camadas de compilação intermediárias sejam retidas.

Execute o docker container prune para limpar os contêineres interrompidos. Os contêineres interrompidos não aparecem quando você executa docker ps; para vê-los, você precisará usar docker ps -a para mostrar todos os contêineres em seu sistema.

Se quiser remover um contêiner individual, use o comando docker rm passando o ID do contêiner. Você pode fazer isso executando docker ps. Se o contêiner estiver em execução, você precisará usar o sinalizador --force para excluí-lo.

Removendo imagens

Use a remoção de imagem docker para remover todas as imagens pendentes. Como a remoção do docker system, isso afetará as imagens que não estão marcadas ou não são referenciadas por nenhum contêiner.

Adicione o sinalizador -a para excluir todas as imagens não utilizadas. Isso limpará todas as imagens do seu sistema que não sejam exigidas por pelo menos um contêiner. Imagens marcadas também serão incluídas, permitindo que você elimine rapidamente antigos pulls do Docker Hub.

Você pode remover uma imagem específica com o comando docker rmi:

 docker rmi wordpress: mais recente 

Quando uma imagem tem várias tags, docker rmi remove a tag fornecida sem realmente excluir a imagem. Ele será excluído assim que a última tag for removida.

Redes de poda

As redes Docker não são limpas automaticamente. Com o tempo, você pode acabar com um grande número deles. Isso confunde seu sistema com dispositivos de ponte virtuais redundantes e entradas da tabela de roteamento. Execute docker network prune para destruir todas as redes não utilizadas e reverter as alterações na configuração do seu host.

Você pode excluir redes individuais executando docker rm my-network.

Volumes de poda

O Docker nunca excluirá um volume. Eles armazenam os dados persistentes criados por seus contêineres, portanto, a remoção não intencional pode ter consequências devastadoras. Os volumes também podem ser compartilhados por vários contêineres ou deixados inativos, prontos para serem anexados a outro contêiner no futuro.

Se você deseja podar volumes não usados, você deve executar o docker volume prune. Isso excluirá todos os volumes que não são usados ​​por pelo menos um contêiner. Volumes individuais podem ser removidos usando docker volume rm my-volume.

Evitando a acumulação futura

Você pode minimizar o risco de acumulação de recursos redundantes no futuro, tendo o cuidado de passar o sinalizador --rm para os comandos docker build e docker run.

Quando usado com a construção, causará a exclusão das camadas intermediárias de construção (marcadas como < nenhuma >: < nenhuma > em imagens do docker) de saída. Isso pode representar uma redução significativa no uso do disco. Uma nova camada intermediária é normalmente criada para cada instrução em seu Dockerfile. Normalmente, você pode removê-los, a menos que pretenda usá-los mais tarde como ponto de partida para uma nova imagem.

Usar --rm com docker run removerá o contêiner assim que seu comando terminar. Isso é ideal ao executar um binário em um contêiner de uso único. Não passe --rm para contêineres que você pretende executar perpetuamente ou que deseja iniciar e parar sob demanda. Os exemplos incluem servidores da web e de banco de dados que executam um serviço em vez de um comando fornecido pelo usuário.

Conclusão

Remover os recursos do Docker pode liberar espaço em disco e ajudá-lo a trabalhar com a CLI do Docker. Eliminar contêineres e imagens redundantes torna mais fácil identificar os recursos que você está procurando.

O Docker não excluirá nada, a menos que você solicite. Vale a pena executar o docker system prune periodicamente para manter o sistema limpo. Você pode criar uma tarefa Cron que a execute mensalmente, usando o filtro até para criar um período de retenção para os recursos adicionados recentemente.

Nenhum comentário