Programa
Você usa o Docker e frequentemente fica sem espaço em disco? Você não está sozinho.
As imagens do Docker são os blocos de construção dos contêineres do Docker, mas elas podem se acumular e consumir espaço em disco rapidamente. Essas imagens variam em tamanho de alguns megabytes a vários gigabytes, portanto, um procedimento de limpeza regular é essencial para o desempenho ideal do sistema.
Aqui está o lado bom: o Docker fornece alguns comandos para ajudar você a remover imagens desnecessárias e recuperar espaço em disco. Se você entender esses comandos e quando usá-los, esperamos que todos os avisos de falta de armazenamento sejam removidos.
Neste tutorial, mostrarei a você diferentes métodos para remover imagens do Docker, mostrarei como lidar com erros comuns durante o processo de remoção e compartilharei as práticas recomendadas para manter um ambiente limpo do Docker.
>Você é completamente novo no Docker? Este guia prático sobre contêineres fará com que você comece a trabalhar em pouco tempo.
O que é uma imagem do Docker?
Uma imagem do Docker é um pacote de software leve, autônomo e executável que contém tudo o que é necessário para executar um aplicativo: código, tempo de execução, bibliotecas, variáveis de ambiente e arquivos de configuração.
Pense nele como um instantâneo ou modelo usado para criar contêineres.
>O Docker não é usado apenas por engenheiros de software - Ele também é amado pelos cientistas de dados!
As imagens do Docker são criadas em camadas, sendo que cada camada representa um conjunto de alterações no sistema de arquivos. Quando você extrai uma imagem do Docker Hub ou constrói umausando um Dockerfile
, na verdade, você está baixando ou criando uma pilha dessas camadas que funcionam juntas. Essas camadas são armazenadas em cache, o que torna a criação e o compartilhamento de imagens mais eficientes, mas também significa que elas consomem espaço de armazenamento em seu computador.
As imagens tornam-se particularmente problemáticas quando você está desenvolvendo aplicativos ativamente. Com frequência, você reconstruirá imagens repetidamente com pequenas alterações, criará várias versões para testes e extrairá dependências que talvez nunca sejam limpas automaticamente.
Antes que você perceba, você tem dezenas ou até centenas de imagens consumindo gigabytes do precioso - e limitado - espaço do SSD.
>Se você gosta de ciência de dados e aprendizado de máquinang, você precisa conhecer essas 12 imagens do Docker.
Por que remover imagens do Docker?
Em termos simples, as imagens do Docker podem consumir muito espaço, e você não pode poupar muito espaço em disco.
A remoção de imagens do Docker desnecessárias tem várias finalidades importantes:
- Em primeiro lugar, ele recupera espaço de armazenamento, o que é especialmente importante se você estiver trabalhando em um laptop com capacidade limitada ou em um ambiente de CI/CD com restrições de armazenamento. De alguma forma, esses erros "Não há espaço restante no dispositivo" sempre parecem aparecer no pior momento possível.
- A limpeza das imagens também remove versões desatualizadas que podem confundir os desenvolvedores ou os processos de implementação. Não há nada pior do que usar acidentalmente uma imagem antiga porque a tag
latest
estava apontando para algo inesperado. - Além disso, uma lista de imagens desordenada torna mais difícil identificar o que você realmente precisa. Quando você executa o
docker images
e vê uma tela cheia de repositórios, tags e IDs, encontrar a imagem específica que você está procurando se torna um processo demorado. A limpeza regular mantém seu ambiente de trabalho gerenciável e as saídas de comando legíveis. É uma pequena melhora na qualidade de vida que se acumula com o tempo.
A seguir, mostrarei a você algumas maneiras de remover imagens do Docker.
Domine o Docker e o Kubernetes
Remoção de imagens do Docker
Agora que você já sabe o que são imagens do Docker e por que é importante mantê-las sob controle, vamos nos aprofundar no processo de remoção propriamente dito.
O Docker fornece alguns comandos para ajudá-lo a gerenciar suas imagens, desde listar o que você tem até remover o que não precisa.
Verificação de imagens do Docker existentes
Antes de começar a excluir imagens, você precisa saber o que realmente está ocupando espaço no seu sistema. O comando docker images
é a primeira etapa desse processo de limpeza.
docker images
Esse comando lista todas as suas imagens do Docker, juntamente com informações valiosas, como:
- Nome do repositório
- Etiqueta
- ID da imagem
- Data de criação
- Tamanho
Imagem 1 - Imagens do Docker disponíveis
Observar a coluna de tamanho pode ser uma boa maneira de abrir os olhos. Como você pode ver em Image 1, a imagem do banco de dados Oracle ocupa mais de 15 GB!
Se você quiser classificar suas imagens por tamanho para identificar as que ocupam mais espaço:
docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -h
Imagem 2 - Imagens do Docker disponíveis classificadas por tamanho
Essa é uma visão geral mais compacta, pois não inclui todas as propriedades da imagem.
Remoção de uma imagem específica do Docker
Depois de identificar as imagens desnecessárias, você pode removê-las uma de cada vez usando o comando docker rmi
(onde rmi
significa "remove image").
Você pode remover uma imagem por seu ID ou por sua combinação repositório:tag:
# Remove by image ID
docker rmi 4e7024df2f20
# Remove by repository:tag
docker rmi nginx:latest
Imagem 3 - Duas maneiras de remover imagens individuais do Docker
Também vale a pena mencionar que o Docker não permitirá que você remova imagens que estejam sendo usadas por contêineres. Você encontrará uma mensagem de erro como:
Imagem 4 - Tentativa de remover imagens do Docker que estão em uso
Se isso ocorrer, você precisará parar e remover todos os contêineres dependentes antes de remover a imagem ou usar o comando force (sobre a qual falarei mais tarde).
Remoção de várias imagens do Docker
A remoção de imagens uma a uma pode ser entediante, especialmente durante uma grande limpeza. Felizmente, o Docker permite que você remova várias imagens com um único comando.
Você pode fornecer uma lista de IDs de imagem separada por espaços:
docker rmi postgres:latest mariadb:latest
Imagem 5 - Remoção de várias imagens do Docker
Ou, para cenários mais avançados, você combina docker images
com filtragem e tubulação. Por exemplo, este removerá todas as imagens com a tag latest
:
docker rmi $(docker images --filter=reference="*:latest" -q)
Imagem 6 - Remoção de todas as imagens do Docker com uma tag específica
Bem, tudo, exceto as imagens atualmente em uso pelos contêineres em execução.
Tenha cuidado com esses comandos de remoção em massa,, pois eles não pedem confirmação. Você deve sempre verificar novamente os critérios de filtragem antes de pressionar Enter.
Remoção de imagens pendentes e não utilizadas
Quando você reconstrói uma imagem, o Docker cria novas camadas para tudo o que foi alterado e reutiliza camadas em cache para as partes inalteradas. As camadas exclusivas da versão anterior tornam-se "pendentes" - elas existem no disco, mas não fazem parte de nenhuma imagem nomeada.
Você pode identificar imagens suspensas com:
docker images -f "dangling=true"
Imagem 7 - Listando imagens do Docker pendentes
Agora, execute o comando prune
para removê-los todos de uma vez:
docker image prune
Imagem 8 - Poda de imagem do Docker
Esse comando solicitará que você confirme antes de continuar. Se você tiver certeza de que deseja remover todos eles:
docker image prune -f
Para uma limpeza mais agressiva, você pode remover imagens pendentes e imagens não utilizadas (aquelas que não são usadas por nenhum contêiner):
docker image prune -a
Figura 9 - Remoção de todas as imagens não utilizadas
Esse último comando pode liberar um espaço significativo, mas você deve usá-lo com cautela, pois ele removerá todas as imagens não referenciadas por contêineres em execução ou parados.
>O que é exatamente o comando Docker Prune? Dedicamos um artigo inteiro a isso, repleto de exemplos.
Agora que você sabe como remover imagens do Docker, vamos examinar alguns erros comuns que você pode encontrar e como lidar com eles.
Tratamento de erros ao remover imagens do Docker
Como em tudo no desenvolvimento de software, às vezes você se depara com erros ao tentar remover imagens do Docker.
A maioria desses erros ocorre por bons motivos - as proteções do Docker são projetadas para evitar que você acidentalmente quebre algo importante. Vamos explorar esses erros comuns e como você pode resolvê-los.
Erro: A imagem está sendo usada por um contêiner
O erro mais comum que você encontrará ao remover imagens do Docker é mais ou menos assim:
Error response from daemon: conflict: unable to delete 64ba095c0f0e (cannot be forced) - image is being used by running container 0284660ca006
Isso acontece porque a arquitetura do Docker tem uma relação de dependência estrita entre contêineres e imagens. Um contêiner é essencialmente uma instância em execução de uma imagem com sua própria camada gravável na parte superior.
Por que o Docker impede a exclusão? É simples: se você removesse uma imagem enquanto um contêiner baseado nela ainda estivesse em execução, esse contêiner travaria imediatamente. Até mesmo os contêineres parados mantêm referências às suas imagens pai, pois podem ser reiniciados posteriormente.
Para remover essa imagem, primeiro comece listando todos os contêineres (inclusive os parados) que usam a imagem:
docker ps -a --filter ancestor=64ba095c0f0e
Imagem 10 - Todos os contêineres que usam a imagem
Você pode então parar todos os contêineres:
docker stop 0284660ca006
Figura 11 - Contêineres de parada
Em seguida, você pode remover os contêineres parados:
docker rm 0284660ca006
Imagem 12 - Remoção de contêineres
E, por fim, use o conhecido comando rmi
para remover a imagem:
docker rmi 64ba095c0f0e
Imagem 13 - Removendo a imagem do Docker
Ou, se você preferir um único comando do shell, use este:
docker ps -a --filter ancestor=090040f97aa1 -q | xargs docker rm -f && docker rmi 090040f97aa1
Figura 14 - Fazendo tudo em um único comando do shell
É muito mais fácil, não é?
Forçar a remoção de imagens do Docker
Se você tiver certeza absoluta de que deseja remover uma imagem independentemente das dependências, o Docker oferece o sinalizador -f
ou --force
:
docker rmi -f 64ba095c0f0e
Imagem 15 - Forçar a exclusão de imagens do Docker
A opção force diz ao Docker para remover a imagem mesmo que ela seja referenciada por contêineres ou outras imagens.
No entanto, ele não removerá imagens referenciadas por contêineres em execução.
A remoção forçada deve ser seu último recurso, como na depuração do próprio Docker ou quando você tiver certeza absoluta de que as dependências podem ser quebradas com segurança. Em ambientes de produção, essa quase nunca é a escolha certa.
Lembre-se de que os controles de dependência do Docker existem por um motivo. Trabalhar com eles, e não contra eles, resultará em uma experiência mais estável e previsível com o Docker.
Práticas recomendadas para gerenciar imagens do Docker
O gerenciamento de imagens do Docker não é uma tarefa única - é uma responsabilidade contínua.
Estabelecer bons hábitos e seguir as práticas recomendadas evitará que você faça limpezas de emergência quando o espaço em disco chegar a zero. Nesta seção, mostrarei algumas estratégias para ajudar você a manter um ambiente Docker limpo.
>Você está procurando um guia completo para aprender a usar o Docker? Nosso guia para profissionais de dados é um bom ponto de partida.
Limpeza regular
Da mesma forma que você não deixaria a louça acumulada na pia por semanas, não deveria deixar imagens do Docker não utilizadas se acumularem indefinidamente no seu sistema.
Um cronograma de manutenção regular é a maneira mais simples de evitar o inchaço da imagem. Dependendo de quão ativamente você usa o Docker, isso pode ser semanal, mensal ou trimestral.
Durante essas sessões de limpeza, você deve:
- Revise as imagens com
docker images
e identifique os candidatos à remoção. - Verifique se há imagens que você não reconhece ou que não tenha usado recentemente.
- Procure por versões duplicadas do mesmo aplicativo.
- Remova as imagens desnecessárias usando os comandos abordados anteriormente.
Muitas equipes de desenvolvimento também incorporam a limpeza de imagens em seus pipelines de CI/CD. Por exemplo, você podeconfigurar o Jenkins ou o GitHub Actions paralimpar automaticamente as imagens de compilação mais antigas do que uma determinada idade.
Esse comando mostrará apenas as imagens com mais de 30 dias:
docker images --format "{{.ID}}\t{{.CreatedAt}}" | awk '$2 < "'$(date -d '30 days ago' +'%Y-%m-%d')'"' | cut -f1
Usando a poda de imagens do Docker
O Docker fornece comandos de poda incorporados que podem automatizar grande parte do trabalho de limpeza manual.
O comando docker system prune
remove todos os contêineres parados, imagens pendentes e redes não utilizadas de uma só vez:
docker system prune
Para uma limpeza mais agressiva que também remove imagens não utilizadas:
docker system prune -a
Você pode até mesmo recuperar espaço dos caches de compilação:
docker builder prune
Esses comandos são perfeitos para a criação de scripts em. Aqui está um exemplo simples de um script de limpeza que você pode executar periodicamente:
#!/bin/bash
# Stop all containers
docker stop $(docker ps -q)
# Remove all stopped containers
docker container prune -f
# Remove all unused images
docker image prune -a -f
# Show remaining disk usage
docker system df
Imagem 16 - Script automatizado para limpeza do Docker
Lembre-se apenas de usar o sinalizador -f
com cuidado em scripts automatizados, pois ele ignora as solicitações de confirmação.
Manter as versões das imagens organizadas
Uma boa estratégia de marcação ajudará você a minimizar o acúmulo de imagens do Docker desnecessárias.
Em vez de usar sempre a tag latest
(que pode se tornar ambígua com o tempo), considere estas abordagens:
- Use o controle de versão semântico para suas imagens:
myapp:1.0.0
myapp:1.0.1
myapp:1.1.0
- Incluir informações de compilação em tags:
myapp:build-2025-04-06
myapp:commit-a7f3d9e
- Adicionar qualificadores de ambiente ou de finalidade:
myapp:1.0.0-dev
myapp:1.0.0-test
myapp:1.0.0-prod
Para equipes maiores, considere implementar uma política de registro de imagens do Docker que colete automaticamente as imagens antigas após um determinado período. Tanto o Docker Hub quanto os registros privados, como o Harbor, oferecem recursos para gerenciar os ciclos de vida das imagens.
Ao combinar essas práticas recomendadas - limpeza regular, poda automatizada e marcação organizada -, você manterá um ambiente Docker muito mais saudável e evitará os temidos erros de "não há espaço restante no dispositivo".
Resumindo a remoção de imagens do Docker
Se você é um desenvolvedor que trabalha com contêineres, o gerenciamento adequado de imagens do Docker é uma habilidade imprescindível.
Lembre-se de que o poder do Docker vem de sua capacidade de isolar e empacotar aplicativos com eficiência, mas esse benefício pode rapidamente se tornar uma desvantagem se você não fizer a manutenção adequada.
Você aprendeu por que as imagens do Docker podem se tornar problemáticas com o passar do tempo, consumindo espaço valioso em disco e criando confusão em seu ambiente de desenvolvimento. Você já viu vários comandos para verificar e remover imagens, desde a segmentação de imagens específicas com docker rmi
até a limpeza em massa com comandos de poda. Você também viu os erros comuns durante o processo de remoção e aprendeu a superá-los.
Se você quiser saber mais sobre o Docker e a conteinerização, esses cursos devem ser sua próxima parada:
Domine o Docker e o Kubernetes
Perguntas frequentes
Posso recuperar uma imagem do Docker depois de excluí-la?
Não, depois que você exclui uma imagem do Docker com docker rmi
, ela não pode ser recuperada, a menos que você tenha um backup ou possa extraí-la novamente de um registro. Certifique-se sempre de que você está removendo as imagens corretas, especialmente em ambientes de produção. Para imagens criadas localmente, talvez você precise reconstruí-las a partir do Dockerfile.
O que são imagens pendentes do Docker e como posso removê-las?
Imagens pendentes são camadas que não pertencem a nenhuma imagem marcada, geralmente criadas quando você reconstrói imagens várias vezes. Identifique-os com docker images -f "dangling=true"
e remova-os todos de uma vez com docker image prune
.
Como posso liberar espaço do Docker rapidamente?
A maneira mais rápida de recuperar espaço é usar docker system prune -a
, que remove todos os contêineres parados, redes não utilizadas, imagens pendentes e imagens não utilizadas. Tenha cuidado, pois isso remove todas as imagens não usadas por nenhum contêiner.
Com que frequência devo limpar minhas imagens do Docker?
A frequência depende de quão ativamente você usa o Docker. Para ambientes de desenvolvimento com compilações frequentes de imagens, recomenda-se que você faça limpezas semanais. Para sistemas menos ativos, a manutenção mensal ou trimestral deve ser suficiente. Considere a possibilidade de configurar scripts de limpeza automatizados para manter a consistência.
Qual é a diferença entre remover e podar imagens do Docker?
A remoção visa imagens específicas que você escolhe, enquanto a poda limpa automaticamente todas as imagens não utilizadas ou pendentes com base em determinados critérios.