Como Remover Imagens, Contêineres e Volumes do Docker

Introdução

O Docker facilita o envolvimento de suas aplicações e serviços em containers para que você possa executá-los em qualquer lugar. No entanto, ao trabalhar com o Docker, também é fácil acumular um número excessivo de imagens, containers 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 o seu sistema a partir da linha de comando. Este guia em formato de folha de dicas fornece uma referência rápida para comandos úteis para liberar espaço em disco e manter seu sistema organizado removendo imagens, containers e volumes Docker não utilizados.

Como Usar Este Guia:

  • Este guia está no formato de folha de dicas com trechos de linha de comando autocontidos.
  • Salte 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 1 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 no 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 estão 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 pendentes), adicione a bandeira -a ao comando:

docker system prune -a

Removendo Imagens Docker

Remover uma ou mais imagens específicas

Use o 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:

Listar:

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 na identificação de imagens que podem ser limpas para economizar espaço em disco. Ao ser usado 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ê tem certeza de que deseja excluí-los, pode usar o comando docker image prune:

Nota: Se construir uma imagem sem marcá-la, a imagem aparecerá na lista de imagens penduradas porque não tem associação com uma imagem marcada. Você pode evitar esta situação fornecendo uma marcação ao construir e pode marcar retroativamente uma imagem 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 awk para passar os IDs para docker rmi. Note que essas utilidades não são fornecidas 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 flag -q para passar o ID da imagem para 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 flag -a para localizar o nome ou ID dos containers que deseja remover:

Listar:

docker ps -a

Remover:

docker rm ID_or_Name ID_or_Name

Remover um container ao sair

Se você souber que não deseja manter um contêiner depois de concluído, você pode executar docker run --rm para excluí-lo automaticamente quando ele sair:

Executar e Remover:

docker run --rm image_name

Remover todos os contêineres encerrados

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 bandeira -f para filtrar com base no status. Quando você tiver verificado que deseja remover esses contêineres, use -q para passar os IDs para o comando docker rm:

Lista:

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 sinalização do filtro com um valor adicional. Isso resulta em uma lista de contêineres que atendem a qualquer condição. Por exemplo, se você deseja excluir todos os contêineres marcados como criado (um estado que pode ocorrer quando você executa um contêiner com um comando inválido) ou saído, você pode usar dois filtros:

Listar:

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 de ter 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:

Listar:

docker ps -a |  grep "pattern

Remover:

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

Parar e remover todos os containers

Você pode revisar os containers no seu sistema com docker ps. Adicionando a bandeira -a mostrará todos os containers. Quando tiver certeza de que deseja excluí-los, você pode adicionar a bandeira -q para fornecer os IDs aos 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

Remover um ou mais volumes específicos

Use o comando docker volume ls para localizar o nome ou nomes do volume que deseja excluir. Então, 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

Remover volumes pendentes

Uma vez que o objetivo dos volumes é existir independentemente dos contentores, quando um contentor é removido, um volume não é automaticamente removido ao mesmo tempo. Quando um volume existe e não está mais conectado a nenhum contentor, é chamado de volume pendente. Para localizá-los e confirmar que 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 contentor e seu volume

Se você criar um volume sem nome, ele pode ser excluído ao mesmo tempo que o contentor com a bandeira -v. Note que isso só funciona com volumes sem nome. Quando o contentor 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 análise 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