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:
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.
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
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
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
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
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)
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
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
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)
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)
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
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)
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
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
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
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.