Remova imagens, volumes e contêineres do Docker em segundos
Publicados: 2023-03-03Docker é uma tecnologia de conteinerização de software que ajuda os desenvolvedores a criar e implantar aplicativos em plataformas diferentes, desde o desktop até a nuvem.
Um instantâneo — ou blueprint — do código-fonte, dependências e ferramentas necessárias para criar um aplicativo em um contêiner do Docker é conhecido como imagem. Os aplicativos do Docker que requerem dados persistentes podem contar com volumes chamados de armazenamento que são independentes do sistema operacional subjacente.
A organização eficaz de imagens, volumes e contêineres é importante ao usar o Docker. Encarnações não utilizadas desses ativos podem se acumular, ocupando um valioso espaço em disco e eventualmente afetando o desempenho do sistema.
Este artigo explora diferentes maneiras de manter a organização do sistema limpando imagens (individualmente e todas de uma vez), volumes e contêineres. E usaremos a interface de linha de comando (CLI) docker
para concluir essas tarefas rapidamente.
Como remover imagens do Docker
A remoção de imagens desatualizadas ou desnecessárias do Docker é essencial para manter um sistema limpo e organizado. Vejamos como a CLI pode direcionar determinadas imagens para remoção.
Primeiro, vamos ver as imagens em um ambiente Docker com o comando docker image ls
:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 60 seconds ago 7.05MB <none> <none> 85b412789704 2 days ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
A listagem de imagens acima revelou imagens denominadas my_image e demo , ambas marcadas como mais recentes . Uma terceira imagem não tem nome ou tag. Nesse caso, é uma imagem “pendurada”: uma que não é usada atualmente por um contêiner. Essa imagem pendente resultou de uma reconstrução de my_image (um cenário comum). A versão anterior da imagem ainda está no sistema de arquivos, mas não está em uso agora.
A listagem também exibe os primeiros 12 caracteres do ID de 64 caracteres de cada imagem, as datas de criação e o espaço de armazenamento que as imagens estão consumindo.
Remover todas as imagens não utilizadas
No exemplo de listagem acima, temos uma imagem pendente. No entanto, é possível que uma imagem sem nome ou tag esteja ativa. Por exemplo, poderia ter sido usado para iniciar um contêiner referenciando seu ID.
Para excluir com segurança todas as imagens que estão realmente pendentes, você pode usar o comando docker image prune
:
$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Deleted Images: deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d Total reclaimed space: 7.05MB
Vamos listar nossas imagens novamente para ver o resultado do nosso trabalho:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 70 seconds ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
Após o processo de remoção, a imagem sem nome ou tag desapareceu.
Remover uma imagem específica por nome
Você pode direcionar uma imagem para remoção referenciando seu nome:
$ docker image rm <image_name>
Observação: você não pode remover facilmente as imagens ainda em uso. Você deve parar ou remover os contêineres em execução que estão usando as imagens. Embora geralmente não seja recomendado, você pode forçar a remoção de uma imagem ativa usando o sinalizador -f
:
$ docker image rm <image_name> -f
Usando a abreviação rmi para remover imagens
A CLI do Docker tem uma abordagem abreviada para remover imagens no alias rmi
. Usá-lo para remover uma imagem pelo nome é assim:
$ docker rmi demo Untagged: demo:latest Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
Usaremos rmi
para os seguintes exemplos de remoção de imagem.
Remover todas as imagens não marcadas
As imagens não marcadas ainda ocupam um valioso espaço em disco, o que torna o sistema cada vez mais lento com o passar do tempo.
Para eliminar todas as imagens não marcadas no Docker, use o comando docker rmi
com um filtro. Você pode fornecer filtros com base em critérios específicos usando a opção -f
(não confundir com o sinalizador -f
disponível para image rm
para forçar uma ação).
O filtro dangling=true
é usado para identificar imagens não marcadas:
$ docker rmi $(docker images -f "dangling=true" -q)
A opção -q
no comando acima exibe os IDs de imagem de todas as imagens não marcadas. Todos esses IDs são passados como argumentos para docker rmi
para removê-los.
Esse filtro usa a palavra-chave “pendurada”, mas, conforme observado acima, algumas imagens sem tags podem estar realmente ativas. Você será avisado se uma imagem selecionada por este filtro não estiver realmente oscilando.
Remover uma imagem específica por ID
Você pode usar o comando docker rmi
para remover qualquer imagem específica referenciando seu ID:
$ docker rmi <image_id>
Remover uma imagem específica por nome e tag
Você pode excluir uma imagem específica junto com seu nome e tag usando o comando docker rmi
.
Por exemplo, se você tiver várias imagens com o mesmo nome, mas tags diferentes, poderá excluir uma em particular usando este formato:
$ docker rmi <image_name>:<tag>
Este método é útil quando você deseja excluir uma versão específica de uma imagem em vez de excluir todas as imagens relacionadas a um repositório.
Remover todas as imagens com a tag mais recente
No Docker, a tag “latest” refere-se à versão mais recente de uma determinada imagem do Docker. A tag mais recente geralmente é usada como a tag padrão para imagens do Docker. Ele é atribuído automaticamente à construção mais recente de uma imagem, a menos que outra tag seja especificada explicitamente.
O Docker fornece um comando para remover todas as imagens com a tag “latest”:
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
O comando acima é dividido em 2 partes. Primeiro, ele obtém a lista de IDs de imagem e, em seguida, passa essa lista como um argumento para o comando docker rmi
.
Remover imagens de um repositório remoto
Para remover uma imagem de um repositório remoto, como o Docker Hub, primeiro você precisa fazer login na conta usando o Docker CLI.
Uma vez logado, você só precisa usar o comando docker rmi
para remover a imagem. O comando docker rmi
pode remover imagens locais e remotas:
docker rmi my_repo/my_image_tag
Notavelmente, você só pode remover imagens que foram enviadas para o repositório. Da mesma forma, você não pode remover imagens usadas por contêineres em execução.
Remover várias imagens de um repositório remoto
Para remover várias imagens de um repositório remoto, você pode usar o comando docker rmi
seguido pelos IDs ou tags da imagem. Por exemplo:
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
Isso removerá as três imagens com as tags image_tag_1
, image_tag_2
e image_tag_3
do repositório my_repo
.
Como remover volumes do Docker
Os volumes do Docker podem ocupar muito espaço em disco, especialmente se contiverem grandes quantidades de dados ou vários backups. Ao remover volumes que não são mais necessários, você reduz o risco de violações de dados e garante que dados confidenciais não sejam acessíveis a usuários não autorizados. A remoção regular de volumes também pode manter o ambiente do Docker atualizado e evitar problemas causados por dados desatualizados.
Esses comandos destroem permanentemente todos os dados armazenados em um volume, portanto, use-os com cuidado.
Remover todos os volumes não utilizados
No Docker, remover volumes não utilizados é tão crítico quanto remover imagens ou contêineres.
Para liberar armazenamento em disco, você pode usar o comando docker volume prune
.
Remover um Volume Específico por Nome
A remoção de um volume específico no Docker é útil para remover volumes não utilizados. Aqui está o comando para remover um volume:
docker volume rm my_volume_name
Com o comando acima, o volume my_volume_name será removido. O Docker produz um erro se você tentar remover um volume usado. Você pode verificar os volumes disponíveis usando o comando docker volume ls
.
Como remover contêineres do Docker
À medida que você trabalha mais com o Docker, pode acumular muitos contêineres não utilizados que ocupam os recursos do disco. Se você não excluí-los, eles podem se acumular ao longo do tempo e ocupar recursos valiosos de disco, tornando seu sistema lento e potencialmente colocando você em risco.
Remover todos os contêineres parados
O comando docker container prune
pode deletar todos os containers parados no Docker. Aqui, o comando cria uma lista de todos os containers parados que serão removidos e pede confirmação antes de prosseguir. Isso ajuda a recuperar espaço em disco e manter um ambiente Docker limpo e organizado, permitindo que você verifique novamente se não está perdendo nada importante:
$ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 4df4c47c4df4 d35bcec20bce
Observe que apenas contêineres parados podem ser removidos com este comando. Se você precisar remover contêineres em execução, precisará interrompê-los primeiro ou usar um comando diferente.
Remover um contêiner específico por ID
No Docker, você pode remover um contêiner específico por ID usando o docker rm command
junto com o ID do contêiner. Primeiro, obtenha todo o ID do contêiner usando o docker ps command
:
$ docker ps -a -q 1ce3cdeb4035 06b79541e25c fa98f1804e3e $ docker rm 1ce3cdeb4035
O comando acima funciona apenas se o contêiner estiver parado. Se o contêiner estiver em execução, você precisará removê-lo à força usando o sinalizador -f:
$ docker rm -f 1ce3cdeb4035
Remover um contêiner específico por nome
O Docker fornece um comando docker rm
de finalidade múltipla para remover os dois contêineres por nome e por ID.
Por exemplo, se você tiver um contêiner chamado web_server , poderá removê-lo usando o seguinte comando:
$ docker rm web_server
Primeiro, é importante parar o contêiner. O Docker fornece o comando docker stop
para interromper um contêiner específico.
Remover todos os contêineres em execução
Para excluir todos os contêineres em execução, você pode usar o comando docker rm
:
$ docker rm $(docker ps -q)
Usar docker ps -q
lista os IDs dos contêineres em execução. Depois disso, os IDs são passados para o comando docker rm
, que remove todos os contêineres.
Observe que este comando removerá apenas contêineres em execução. Se você deseja remover todos os contêineres, incluindo os parados, pode usar o seguinte comando:
$ docker rm $(docker ps -a -q)
Resumo
Este artigo explicou como remover imagens, volumes e contêineres do Docker. Você aprendeu vários métodos para manter um sistema limpo e organizado. Cobriu comandos para remover todas as imagens não utilizadas, não marcadas ou específicas por ID ou nome. Você também aprendeu comandos para excluir todos os contêineres parados ou um contêiner específico por ID ou nome.
A remoção de imagens, volumes e contêineres do Docker é um processo direto que pode ajudá-lo a gerenciar componentes não utilizados, recuperando espaço em disco valioso e geralmente melhorando o desempenho do sistema.
É essa simplicidade que atrai os desenvolvedores para o Docker, e não há maneira mais simples de implantar um aplicativo desenvolvido no Docker do que com a plataforma de hospedagem de aplicativos da Kinsta. Você pode experimentá-lo gratuitamente agora.