Tutorial

Como Remover Imagens Docker, Contêineres e Volumes

Docker

Um Guia de Consulta Rápida do Docker

Introdução

O Docker facilita o agrupamento de suas aplicações e serviços em contêineres de forma que você possa executá-los em qualquer lugar. Ao trabalhar com o Docker, no entanto, também é fácil acumular um número excessivo de imagens, contêineres e volumes de dados não utilizados que atrapalham a saída e consomem espaço em disco.

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

Como Usar Este Guia:

  • Este guia está no formato de consulta rápida, com trechos de linha de comando independentes.
  • Vá para qualquer seção que seja relevante para a tarefa que você está tentando concluir.

A sintaxe de substituição de comando, comando $(comando), usada nos comandos está disponível em muitos shells populares, como o bash, zsh e Windows Powershell.

Limpando Todas as Imagens, Contêineres, Volumes e Redes não Utilizadas ou Pendentes

O Docker fornece um único comando que irá limpar quaisquer recursos — imagens, contêineres, volumes, e redes — que estão pendentes (não associados a um contêiner):

  • docker system prune

Para remover adicionalmente quaisquer contêineres e todas as imagens não utilizadas (não apenas imagens pendentes), adicione a flag -a ao comando:

  • docker system prune -a

Removendo Imagens Docker

Remover uma ou mais imagens específicas

Use o comando docker images com a flag -a para localizar o ID das imagens que você deseja remover. Isso lhe mostrará todas as imagens, incluindo camadas intermediárias de imagem. Quando você tiver localizado as imagens que deseja excluir, você pode passar o ID ou tag delas para o docker rmi:

Listar:

  • docker images -a

Remover:

  • docker rmi Image Image

Remover imagens pendentes

As imagens Docker consistem de várias camadas. As imagens pendentes são camadas que não têm relação com nenhuma imagem marcada. Elas não servem a um propósito e consomem espaço em disco. Elas podem ser localizadas adicionando a sinalização de filtro, -f com um valor de dangling=true ao comando docker images. Quando você tiver certeza de que deseja excluí-las, você pode usar o comando docker images purge:

Nota: se você construir uma imagem sem marcá-la, ela aparecerá na lista de imagens pendentes porque ela não possui nenhuma associação com uma imagem marcada. Você pode evitar esta situação fornecendo uma tag quando você for compilar, e você marcar retroativamente uma imagem com o comando docker tag.

Listar:

  • docker images -f dangling=true

Remover:

  • docker images purge

Removendo imagens de acordo com um padrão

Você pode encontrar todas as imagens que correspondem a um padrão usando uma combinação do docker images e grep. Assim que estiver satisfeito, você pode excluí-las usando o awk para passar os IDs para o docker rmi. 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 images -a | grep "pattern"

Remover:

  • docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

Remover todas as imagens

Todas as imagens Docker em um sistema podem ser listadas adicionando -a ao comando docker images. Assim que tiver certeza de que você deseja excluir todas elas, você pode adicionar a sinalização -q para passar o ID da Imagem para o docker rmi:

Listar:

  • docker images -a

Remover:

  • docker rmi $(docker images -a -q)

Removendo Contêineres

Remover um ou mais contêineres específicos

Use o comando docker ps com a sinalização -a para localizar o nome e o ID dos contêineres que você deseja remover.

Listar:

  • docker ps -a

Remover:

  • docker rm ID_or_Name ID_or_Name

Remover um contêiner ao sair

Se você sabe, ao criar um contêiner, que você não irá querer mantê-lo por perto assim que terminar, você pode executar docker run --rm para excluí-lo automaticamente quando ele for fechado.

Executar e Remover:

  • docker run --rm image_name

Remover todos os contêineres finalizados

Você pode localizar contêineres usando o docker ps -a e filtrá-los pelo seu status: created, restarting, running, paused, or exited. Para revisar a lista de contêineres finalizados, use a flag -f para filtrar com base no status. Quando você tiver verificado, você deseja remover esses contêineres, usando -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 sinalização de filtro com um valor adicional. Isso resulta em uma lista de contêineres que correspondem a qualquer das condições. Por exemplo, se você quiser excluir todos contêineres marcados como Created (um estado que pode resultar quando você executa um contêiner com um comando inválido) ou Exited, 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 você estiver satisfeito com a lista que deseja excluir, você pode usar o awk e o xargs para fornecer o ID para o docker rmi. 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 $3}' | xargs docker rmi

Parar e remover todos os contêineres

Você pode revisar os contêineres em seu sistema com o docker ps. Adicionando a flag -a mostrará todos os contêineres. Quando você tiver certeza 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

Remover um ou mais volumes específicos - Docker 1.9 e mais recentes

Use o comando docker volume ls para localizar o nome ou nomes de volume que você 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

Remover volumes pendentes - Docker 1.9 e acima

Como a ideia de volumes é existir independentemente dos contêineres, quando um contêiner é removido, um volume não é removido automaticamente ao mesmo tempo. Quando um volume existe e não está mais conectado a nenhum contêiner, ele é chamado de volume pendente, ou dangling volume. Para localizá-los para 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 você estiver satisfeito com a lista, você pode remover todos eles com docker volume prune:

Listar:

  • docker volume ls -f dangling=true

Remover:

  • docker volume prune

Remover um contêiner e seu volume

Se você criou um volume não nomeado, ele pode ser excluído ao mesmo tempo que o contêiner com a sinalização -v. Observe que isso funciona apenas com volumes não nomeados. Quando o contêiner for removido com sucesso, seu ID é exibido. Observe que nenhuma referência é feita à remoção do volume. Se ele está sem nome, ele é removido silenciosamente do sistema. Se ele está nomeado, ele permanece silenciosamente presente.

Remover:

  • docker rm -v container_name

Conclusão

Este guia cobre alguns dos comandos comuns usados para remover imagens, contêineres e volumes com o Docker. Há muitas outras combinações e flags que podem ser usadas com cada um deles. 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.

0 Comments

Creative Commons License