Como usar o comando docker container rm para remover contêineres

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar efetivamente contêineres Docker usando o comando docker container rm. Você praticará a criação e remoção de um contêiner básico, entenderá como forçar a remoção de um contêiner em execução, explorará a opção de remover um contêiner junto com seus volumes anônimos associados e, finalmente, aprenderá como remover eficientemente todos os contêineres parados.

Através de exercícios práticos, você obterá experiência prática com o gerenciamento essencial do ciclo de vida de contêineres Docker, permitindo que você limpe seu ambiente Docker e gerencie recursos de forma eficaz.

Criar e remover um contêiner

Nesta etapa, você aprenderá como criar e remover um contêiner Docker. Um contêiner é uma instância executável de uma imagem. Você pode criar, iniciar, parar, mover ou excluir um contêiner usando a API ou CLI do Docker.

Primeiro, vamos baixar uma imagem simples que podemos usar para criar um contêiner. Usaremos a imagem hello-world, que é uma imagem muito pequena que simplesmente imprime "Hello from Docker!" e sai.

docker pull hello-world

Você deve ver uma saída indicando que a imagem está sendo baixada.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Agora que temos a imagem, podemos criar e executar um contêiner a partir dela. Usaremos o comando docker run.

docker run hello-world

Este comando criará um novo contêiner a partir da imagem hello-world, executará o comando especificado na imagem (que é imprimir "Hello from Docker!"), e então o contêiner sairá. Você deve ver a mensagem "Hello from Docker!" no seu terminal.

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Depois que o contêiner terminar de ser executado, ele irá parar. Você pode ver todos os contêineres, incluindo os parados, usando o comando docker ps -a.

docker ps -a

Você deve ver uma saída semelhante a esta, mostrando o contêiner hello-world com o status "Exited" (Finalizado).

CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
<container_id>   hello-world   "/hello"   About a minute ago   Exited (0) About a minute ago             <container_name>

Agora, vamos remover o contêiner parado. Podemos usar o comando docker rm seguido pelo ID ou nome do contêiner. Você pode obter o ID ou nome do contêiner na saída de docker ps -a. Substitua <container_id> pelo ID real do seu contêiner.

docker rm <container_id>

Você deve ver o ID do contêiner impresso, indicando que o contêiner foi removido.

<container_id>

Para verificar se o contêiner foi removido, você pode executar docker ps -a novamente. O contêiner hello-world não deve mais ser listado.

docker ps -a

A saída não deve conter o contêiner hello-world que você acabou de remover.

Remover à força um contêiner em execução

Na etapa anterior, removemos um contêiner parado. No entanto, você não pode remover um contêiner em execução diretamente usando docker rm. Nesta etapa, você aprenderá como forçar a remoção de um contêiner em execução.

Primeiro, vamos criar um contêiner que continuará em execução. Usaremos a imagem ubuntu e executaremos um comando que mantém o contêiner ativo, como sleep infinity. Se você não tiver a imagem ubuntu, baixe-a primeiro.

docker pull ubuntu

Agora, execute um contêiner a partir da imagem ubuntu no modo detached (-d) para que ele seja executado em segundo plano.

docker run -d ubuntu sleep infinity

Você deve ver uma string longa que é o ID do contêiner.

<container_id>

Agora, vamos verificar se o contêiner está em execução usando docker ps.

docker ps

Você deve ver o contêiner ubuntu listado com o status "Up" (Ativo).

CONTAINER ID   IMAGE    COMMAND         CREATED          STATUS          PORTS     NAMES
<container_id>   ubuntu   "sleep infinity"   About a minute ago   Up About a minute ago             <container_name>

Agora, tente remover este contêiner em execução usando o comando docker rm com o ID do contêiner. Substitua <container_id> pelo ID real do seu contêiner em execução.

docker rm <container_id>

Você provavelmente verá uma mensagem de erro indicando que não é possível remover um contêiner em execução.

Error response from daemon: You cannot remove a running container <container_id>. Stop the container before attempting removal or use -f

Como a mensagem de erro sugere, você precisa parar o contêiner primeiro ou usar a flag -f (force - forçar). Parar um contêiner pode levar algum tempo, especialmente se o processo dentro do contêiner não responder rapidamente ao sinal de parada. A remoção forçada é uma maneira mais rápida de remover um contêiner em execução, embora geralmente seja recomendado parar os contêineres de forma adequada, se possível.

Vamos forçar a remoção do contêiner em execução usando a flag -f. Substitua <container_id> pelo ID real do seu contêiner em execução.

docker rm -f <container_id>

Você deve ver o ID do contêiner impresso, indicando que o contêiner foi removido à força.

<container_id>

Para verificar se o contêiner foi removido, execute docker ps novamente. O contêiner ubuntu não deve mais ser listado.

docker ps

A saída não deve conter o contêiner ubuntu que você acabou de remover.

Remover um contêiner e seus volumes anônimos

Nesta etapa, você aprenderá como remover um contêiner e seus volumes anônimos associados. Ao criar um contêiner, o Docker pode criar volumes para armazenar dados. Volumes anônimos são volumes que não são explicitamente nomeados quando criados. Eles são tipicamente criados quando uma instrução VOLUME está presente no Dockerfile da imagem.

Vamos executar um contêiner que cria um volume anônimo. Usaremos a imagem ubuntu novamente e especificaremos um ponto de montagem de volume usando a flag -v sem um nome antes dos dois pontos.

docker run -d -v /data ubuntu sleep infinity

Este comando cria um contêiner e um volume anônimo montado em /data dentro do contêiner. Você deve ver o ID do contêiner impresso.

<container_id>

Agora, vamos inspecionar o contêiner para ver o volume que foi criado. Substitua <container_id> pelo ID real do seu contêiner em execução.

docker inspect <container_id>

A saída de docker inspect é um grande objeto JSON. Procure a seção "Mounts". Você deve ver uma entrada para o volume montado em /data, e o campo "Name" será uma string longa, gerada aleatoriamente, indicando que é um volume anônimo.

...
"Mounts": [
    {
        "Type": "volume",
        "Source": "<volume_name>",
        "Target": "/data",
        "Consistency": "consistent",
        "BindOptions": null,
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],
...

Você também pode listar todos os volumes usando docker volume ls. Você deve ver o volume anônimo listado.

docker volume ls

A saída incluirá o volume anônimo com seu nome gerado aleatoriamente.

DRIVER    VOLUME NAME
local     <volume_name>

Por padrão, ao remover um contêiner, seus volumes anônimos não são removidos. Vamos parar o contêiner primeiro. Substitua <container_id> pelo ID real do seu contêiner em execução.

docker stop <container_id>

Você deve ver o ID do contêiner impresso.

<container_id>

Agora, remova o contêiner parado sem remover seus volumes. Substitua <container_id> pelo ID real do seu contêiner parado.

docker rm <container_id>

Você deve ver o ID do contêiner impresso.

<container_id>

Verifique os volumes novamente usando docker volume ls. O volume anônimo ainda deve estar presente.

docker volume ls

A saída ainda incluirá o volume anônimo.

Agora, vamos criar outro contêiner com um volume anônimo e, em seguida, remover o contêiner e seu volume juntos.

docker run -d -v /data ubuntu sleep infinity

Obtenha o novo ID do contêiner.

<new_container_id>

Pare o novo contêiner. Substitua <new_container_id> pelo ID real.

docker stop <new_container_id>

Você deve ver o ID do contêiner impresso.

<new_container_id>

Agora, remova o contêiner parado e seus volumes anônimos usando a flag -v com docker rm. Substitua <new_container_id> pelo ID real.

docker rm -v <new_container_id>

Você deve ver o ID do contêiner impresso.

<new_container_id>

Verifique os volumes novamente usando docker volume ls. O volume anônimo associado ao contêiner que você acabou de remover agora deve ter sumido. O primeiro volume anônimo que você criou ainda deve estar lá.

docker volume ls

A saída deve mostrar apenas o primeiro volume anônimo que você criou.

Remover todos os contêineres parados

Nesta etapa, você aprenderá como remover todos os contêineres parados de uma só vez. Ao trabalhar com o Docker, você pode acumular muitos contêineres parados, o que pode ocupar espaço em disco. O Docker fornece um comando conveniente para limpar esses contêineres parados.

Primeiro, vamos criar alguns contêineres parados. Podemos usar a imagem ubuntu e executar um comando que sai imediatamente.

docker run ubuntu echo "This container will stop immediately"

Você deve ver a saída "This container will stop immediately" e o contêiner sairá.

Execute o comando novamente para criar outro contêiner parado.

docker run ubuntu echo "Another stopped container"

Você deve ver a saída "Another stopped container" e este contêiner também sairá.

Agora, vamos listar todos os contêineres, incluindo os parados, usando docker ps -a.

docker ps -a

Você deve ver os dois contêineres que acabou de criar listados com o status "Exited" (Finalizado). Você também pode ver outros contêineres parados de etapas anteriores, se não os removeu.

CONTAINER ID   IMAGE    COMMAND                  CREATED          STATUS                      PORTS     NAMES
<container_id_1>   ubuntu   "echo 'This containe…"   About a minute ago   Exited (0) About a minute ago             <container_name_1>
<container_id_2>   ubuntu   "echo 'Another stopp…"   About a minute ago   Exited (0) About a minute ago             <container_name_2>
...

Para remover todos os contêineres parados, você pode usar o comando docker container prune. Este comando removerá todos os contêineres parados.

docker container prune

O Docker pedirá confirmação antes de remover os contêineres. Digite y e pressione Enter.

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Você deve ver uma lista dos IDs dos contêineres que foram removidos.

Deleted Containers:
<container_id_1>
<container_id_2>
...

Total reclaimed space: ...

Para verificar se todos os contêineres parados foram removidos, execute docker ps -a novamente.

docker ps -a

A saída deve mostrar apenas os contêineres em execução (se houver) e nenhum contêiner parado.

Resumo

Neste laboratório, você aprendeu o processo fundamental de gerenciamento de contêineres Docker usando o comando docker rm. Você começou criando e executando um contêiner simples hello-world, observando seu ciclo de vida desde a criação até a saída. Em seguida, você praticou a remoção deste contêiner parado usando seu ID ou nome.

Com base nisso, você explorou cenários de remoção mais avançados. Você aprendeu como remover à força um contêiner em execução usando a flag -f, compreendendo as implicações dessa ação. Além disso, você descobriu como remover um contêiner junto com seus volumes anônimos associados usando a flag -v, garantindo uma remoção limpa. Finalmente, você dominou a técnica eficiente de remover todos os contêineres parados simultaneamente, um comando útil para limpar seu ambiente Docker.