Docker é uma tecnologia de contêineres de software que ajuda os desenvolvedores a criar e implementar aplicativos em diferentes plataformas que vão desde o desktop até a nuvem.

Um snapshot — ou blueprint — do código-fonte, dependências e ferramentas necessárias para construir um aplicativo em um contêiner Docker é conhecido como uma imagem. Aplicativos Docker que requerem dados persistentes podem depender de armazenamento chamado volumes que são independentes do sistema operacional subjacente.

A organização eficiente de imagens, volumes e contêineres é fundamental ao usar o Docker. É importante gerenciar adequadamente esses recursos, uma vez que as versões não utilizadas podem se acumular e consumir espaço valioso em disco, impactando negativamente no desempenho do sistema em sua totalidade.

Este artigo explora diferentes maneiras de manter a organização do sistema através da limpeza de imagens (tanto individualmente quanto de uma só vez), volumes e contêineres. Estaremos usando a interface de linha de comando (CLI) docker para completar estas tarefas rapidamente.

Como remover imagens do Docker

Remover imagens desatualizadas ou desnecessárias do Docker é essencial para a manutenção de um sistema limpo e organizado. Veremos como o CLI pode direcionar certas imagens para remoção.

Primeiro, analisaremos 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

Ao listar as imagens acima, foram encontradas imagens com os nomes “my_image” e “demo“, ambas com a tag “latest“. Uma terceira imagem não possui nome ou tag. Nesse caso, trata-se de uma imagem “dangling” (pendurada): uma imagem que não está sendo atualmente utilizada por nenhum contêiner. Essa imagem pendurada foi criada como resultado da reconstrução da imagem “my_image” (cenário comum). A versão anterior da imagem ainda está presente no sistema de arquivos, mas não está sendo utilizada no momento.

A lista 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.

Removendo todas as imagens não utilizadas

No exemplo da lista acima, temos uma imagem pendurada. Entretanto, é possível que uma imagem sem nome ou tag esteja ativa. Por exemplo, ela poderia ter sido usada para iniciar um contêiner referenciando seu ID.

Para apagar com segurança todas as imagens que estão realmente penduradas, 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

Listaremos nossas imagens novamente para ver os resultados 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 limpeza, a imagem sem nome ou rótulo desapareceu.

Removendo uma imagem específica pelo nome

Você pode direcionar uma imagem para remoção, referenciando seu nome:

$ docker image rm <image_name>

Nota: Você não pode remover facilmente as imagens ainda em uso. Você deve parar ou remover os contêineres em funcionamento que estão usando as imagens. Embora normalmente não seja recomendado, você pode forçar a remoção de uma imagem ativa usando a flag -f:

$ docker image rm <image_name> -f

Usando o Shorthand rmi para remover imagens

O Docker CLI possui uma abordagem simplificada para remover imagens com o alias rmi. Para remover uma imagem pelo nome, basta utilizar o seguinte comando:

$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4

Usaremos rmi para os seguintes exemplos de remoção de imagens.

Remover todas as imagens sem tags:

Imagens sem tags ocupam espaço valioso em disco, tornando seu sistema cada vez mais lento ao longo do tempo.

Para eliminar todas as imagens sem tag 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 a flag -f disponível para image rm para forçar uma ação).

O filtro dangling=true é usado para identificar imagens sem tag:

$ docker rmi $(docker images -f "dangling=true" -q)

A opção -q no comando acima exibe os IDs de todas as imagens sem tags. Todos esses IDs são então passados como argumentos para docker rmi para removê-los.

Este filtro usa a palavra-chave “pendgling”, mas como observado acima, algumas imagens sem tags podem realmente estar ativas. Você será avisado se uma imagem selecionada por este filtro não estiver realmente pendurada.

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 pelo nome e rótulo

Você pode apagar uma imagem específica com seu nome e tag usando o comando docker rmi.

Por exemplo, se você tem várias imagens com o mesmo nome, mas tags diferentes, você pode apagar uma em particular, usando este formato:

$ docker rmi <image_name>:<tag>

Este método é útil quando você quer apagar uma versão específica de uma imagem ao invés de apagar todas as imagens relacionadas a um repositório.

Remover todas as imagens com a tag latest

No Docker, a tag “latest” refere-se à versão mais recente de uma imagem particular do Docker. A tag latest é frequentemente usada como a tag padrão para as imagens do Docker. Ela é automaticamente atribuída à build mais recente de uma imagem, a menos que outra tag seja especificada explicitamente.

O Docker fornece um comando para remover todas às imagens com a tag “latest”:

$ docker rmi $(docker images | grep "latest" | awk '{print $3}')

O comando acima é dividido em 2 partes. Primeiro ele recebe a lista de IDs de imagens e depois passa essa lista como 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, você precisará primeiro entrar 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 tanto as imagens locais quanto as remotas:

docker rmi my_repo/my_image_tag

Notavelmente, você só pode remover imagens enviadas para o repositório. Da mesma forma, você não pode remover imagens usadas por contêineres em execução.

Remover múltiplas imagens de um repositório remoto

Para remover múltiplas imagens de um repositório remoto, você pode usar o comando docker rmi seguido pelos IDs ou tags das imagens. 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 sensíveis não estejam acessíveis a usuários não autorizados. A remoção regular de volumes também pode manter o ambiente do Docker atualizado e prevenir problemas causados por dados desatualizados.

Esses comandos destroem permanentemente todos os dados armazenados em um volume, portanto, use com cautela.

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 o 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 a remoção de 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

Conforme você trabalha mais com Docker, pode acumular muitos contêineres não utilizados que ocupam recursos de disco. Se você não os deletar, eles podem se acumular ao longo do tempo e ocupar recursos valiosos de disco, diminuindo o desempenho do sistema e potencialmente colocando você em risco.

Remova todos os contêineres parados

O comando docker container prune pode apagar todos os contêineres parados no Docker. Aqui, o comando cria uma lista de todos os contêineres 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 enquanto permite que você verifique novamente se você 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

Note que somente contêineres parados podem ser removidos com este comando. Se você precisar remover contêineres em execução, você precisará pará-los primeiro ou usar um comando diferente.

Remova um contêiner específico por ID

No Docker, você pode remover um contêiner específico por ID usando o docker rm command 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 mencionado anteriormente funciona somente se o contêiner estiver em estado parado. Caso o contêiner esteja em execução, você precisará removê-lo com força usando a opção -f:

$ docker rm -f 1ce3cdeb4035

Remova um contêiner específico pelo nome

O Docker fornece um comando de múltiplos propósitos docker rm para remover ambos os contêineres pelo nome e pela identificação.

Por exemplo, se você tem um contêiner chamado web_server, você pode removê-lo usando o seguinte comando:

$ docker rm web_server

Primeiro, é importante parar o contêiner. Docker fornece o comando docker stop para parar um contêiner específico.

Remover todos os contêineres em funcionamento

Para excluir todos os contêineres em execução, você pode usar o comando docker rm:

$ docker rm $(docker ps -q)

Usando docker ps -q lista as IDs dos contêineres em funcionamento. Depois disso, os IDs são passados para o comando docker rm, que remove todos os contêineres.

Note que este comando removerá apenas os contêineres em execução. Caso você queira remover todos os contêineres, incluindo os parados, você 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. Abordamos comandos para remover todas as imagens não utilizadas, sem tags 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.

Remover imagens, volumes e contêineres do Docker é um processo simples que pode ajudá-lo a gerenciar componentes não utilizados, recuperar espaço valioso em disco e muitas vezes melhorar o desempenho do sistema.

É esta simplicidade que atrai os desenvolvedores para o Docker, e não há maneira mais simples de implementar um aplicativo desenvolvida no Docker do que com a Hospedagem de Aplicativos da Kinsta. Você pode experimentá-lo gratuitamente agora mesmo.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.