Como remover imagens, contêineres e volumes do Docker

Introdução

O Docker facilita o empacotamento de seus aplicativos e serviços em contêineres para que você possa executá-los em qualquer lugar. No entanto, à medida que você trabalha com o Docker, também é fácil acumular um número excessivo de imagens, contêineres e volumes de dados não utilizados que poluem a saída e consomem espaço em disco.

O Docker fornece todas as ferramentas necessárias para limpar seu sistema a partir da linha de comando. Este guia no estilo de uma folha de truques fornece uma referência rápida para os comandos que são úteis para liberar espaço em disco e manter seu sistema organizado removendo imagens, contêineres e volumes Docker não utilizados.

Como Usar Este Guia:

  • Este guia está no formato de uma folha de truques com trechos de linha de comando autocontidos.
  • Pule para qualquer seção que seja relevante para a tarefa que você está tentando completar.

Observação: A sintaxe de substituição de comando, comando $(comando), usada nos comandos está disponível em muitos shells populares, como bash, zsh e Windows Powershell.Se você deseja uma maneira de implantar um aplicativo Docker em um servidor ao vivo com apenas um clique, dê uma olhada na Plataforma de Aplicativos DigitalOcean.

Se você deseja uma maneira de um clique para implantar um aplicativo Docker em um servidor ao vivo, dê uma olhada em Plataforma de Aplicativos DigitalOcean.

Limpar Todas as Imagens Inutilizadas ou Penduradas, Contêineres, Volumes e Redes

O Docker fornece um único comando que limpará quaisquer recursos – imagens, contêineres, volumes e redes – que estejam pendurados (não marcados ou associados a um contêiner):

docker system prune

Para remover adicionalmente quaisquer contêineres parados e todas as imagens inutilizadas (não apenas imagens penduradas), adicione a bandeira -a ao comando:

docker system prune -a

Removendo Imagens Docker

Remover uma ou mais imagens específicas

Use the comando docker images com a bandeira -a para localizar o ID das imagens que deseja remover. Isso mostrará todas as imagens, incluindo camadas de imagem intermediárias. Depois de localizar as imagens que deseja excluir, você pode passar seu ID ou tag para docker rmi:

Lista:

docker images -a

Remover:

docker rmi Image Image

Nota: A bandeira -a ou --all no comando docker images exibe todas as imagens do Docker, incluindo as intermediárias que não são referenciadas por nenhum rótulo. Por padrão, docker images mostra apenas as imagens com pelo menos um rótulo. No entanto, podem existir algumas imagens sem nenhum rótulo que ainda estejam ocupando espaço em disco no sistema. A bandeira -a pode ser útil para identificar imagens que podem ser pruned para economizar espaço em disco. Ao usar com o comando docker rmi, a bandeira -f ou --force também pode ser usada para remover imagens sem rótulos.

Remover Imagens Docker Danglings

As imagens do Docker consistem em várias camadas. As imagens danglings são camadas que não têm relação com nenhuma imagem rotulada. Eles não servem mais um propósito e consomem espaço em disco. Eles podem ser localizados adicionando a bandeira de filtro -f com um valor de dangling=true ao comando docker images. Quando você tiver certeza de que deseja excluí-los, poderá usar o comando docker image prune:

Nota: Se você construir uma imagem sem marcá-la, a imagem aparecerá na lista de imagens penduradas porque não está associada a uma imagem marcada. Você pode evitar essa situação fornecendo uma marcação ao construir, e pode marcar uma imagem retroativamente com o comando docker tag.

Lista:

docker images -f dangling=true

Remover:

docker image prune

Removendo imagens de acordo com um padrão

Você pode encontrar todas as imagens que correspondem a um padrão usando uma combinação de docker images e grep. Uma vez satisfeito, você pode excluí-las usando o awk para passar os IDs para o docker rmi. Note que esses utilitários não são fornecidos pelo Docker e não estão necessariamente disponíveis em todos os sistemas:

Lista:

docker images -a |  grep "pattern"

Remover:

docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi

Remova todas as imagens

Todas as imagens Docker em um sistema podem ser listadas adicionando -a ao comando docker images. Uma vez que você tenha certeza de que deseja excluí-las todas, você pode adicionar a sinalização -q para passar o ID da imagem para o comando docker rmi:

Listar:

docker images -a

Remover:

docker rmi $(docker images -a -q)

Removendo Containers

Remova um ou mais containers específicos

Use o comando docker ps com a sinalização -a para localizar o nome ou ID dos containers que você deseja remover:

Listar:

docker ps -a

Remover:

docker rm ID_or_Name ID_or_Name

Remover um container ao sair

Se você souber que ao criar um contêiner você não o manterá após sua utilização, você pode executar docker run --rm para deletá-lo automaticamente quando sair:

Executar e Remover:

docker run --rm image_name

Remover todos os contêineres finalizados

Você pode localizar os contêineres usando docker ps -a e filtrá-los pelo seu status: created, restarting, running, paused ou exited. Para revisar a lista de contêineres exited, use a sinalização -f para filtrar com base no status. Quando você verificar que deseja remover esses contêineres, use -q para passar os IDs para o comando docker rm:

Listar:

docker ps -a -f status=exited

Remover:

docker rm $(docker ps -a -f status=exited -q)

Remover contêineres usando mais de um filtro

Os filtros do Docker podem ser combinados repetindo a bandeira do filtro com um valor adicional. Isso resulta em uma lista de contêineres que atendem a qualquer uma das condições. Por exemplo, se você deseja excluir todos os contêineres marcados como created (um estado que pode ocorrer quando você executa um contêiner com um comando inválido) ou exited, você pode usar dois filtros:

Lista:

docker ps -a -f status=exited -f status=created

Remover:

docker rm $(docker ps -a -f status=exited -f status=created -q)

Remover contêineres de acordo com um padrão

Você pode encontrar todos os contêineres que correspondem a um padrão usando uma combinação de docker ps e grep. Quando estiver satisfeito com a lista que deseja excluir, você pode usar awk e xargs para fornecer o ID para docker rm. Observe que esses utilitários não são fornecidos pelo Docker e não estão necessariamente disponíveis em todos os sistemas:

Lista:

docker ps -a |  grep "pattern

Remover:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

Pare e remova todos os containers

Você pode revisar os containers no seu sistema com o comando docker ps. Adicionar a flag -a mostrará todos os containers. Quando estiver certo de que deseja excluí-los, você pode adicionar a flag -q para fornecer os IDs para os comandos docker stop e docker rm:

Listar:

docker ps -a

Remover:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Removendo Volumes

Remova um ou mais volumes específicos

Use o comando docker volume ls para localizar o nome ou nomes do volume que deseja excluir. Em seguida, você pode remover um ou mais volumes com o comando docker volume rm:

Listar:

docker volume ls

Remover:

docker volume rm volume_name volume_name

Remova volumes pendentes

Uma vez que o objetivo dos volumes é existir independentemente dos containers, quando um container é removido, um volume não é automaticamente removido ao mesmo tempo. Quando um volume existe e não está mais conectado a nenhum container, ele é chamado de volume pendente. Para localizá-los e confirmar que você deseja removê-los, você pode usar o comando docker volume ls com um filtro para limitar os resultados aos volumes pendentes. Quando estiver satisfeito com a lista, você pode removê-los todos com docker volume prune:

Lista:

docker volume ls -f dangling=true

Remover:

docker volume prune

Remover um container e seu volume

Se você criar um volume sem nome, ele pode ser excluído ao mesmo tempo que o container com a flag -v. Note que isso só funciona com volumes sem nome. Quando o container for removido com sucesso, seu ID será exibido. Note que nenhuma referência é feita à remoção do volume. Se ele não tiver nome, será silenciosamente removido do sistema. Se ele tiver nome, permanecerá silenciosamente presente.

Remover:

docker rm -v container_name

Conclusão

Este guia abrange alguns dos comandos comuns usados para remover imagens, containers e volumes com o Docker. Existem muitas outras combinações e flags que podem ser usadas com cada um. Para um guia abrangente sobre o que está disponível, consulte a documentação do Docker para docker system prune, docker rmi, docker rm e docker volume rm. Se houver tarefas comuns de limpeza que você gostaria de ver no guia, por favor, pergunte ou faça sugestões nos comentários.

Para uma visão detalhada dos diferentes componentes de um container Docker, confira O Ecossistema Docker: Uma Introdução aos Componentes Comuns.

Source:
https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes