Como usar o comando docker compose rm para remover containers parados

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker compose rm para remover containers parados. Começaremos preparando um projeto Docker Compose simples, que envolve a instalação do Docker Compose e a criação de um arquivo docker-compose.yml para definir um serviço web básico.

Após a configuração do projeto, você praticará a parada dos containers do serviço. O foco principal do laboratório é o uso de docker compose rm para remover esses containers parados, cobrindo cenários sem volumes, com volumes anônimos e, finalmente, demonstrando como forçar a remoção de containers.

Prepare um projeto Docker Compose simples

Nesta etapa, prepararemos um projeto Docker Compose simples. Como o Docker Compose não está pré-instalado no ambiente LabEx, primeiro o instalaremos. Docker Compose é uma ferramenta para definir e executar aplicações Docker com múltiplos containers. Com o Compose, você usa um arquivo YAML para configurar os serviços da sua aplicação. Em seguida, com um único comando, você cria e inicia todos os serviços a partir da sua configuração.

Primeiro, vamos instalar o Docker Compose. Faremos o download da versão estável mais recente e a tornaremos executável.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Após a instalação, verifique a instalação checando a versão.

docker-compose --version

Você deve ver o número da versão impresso na saída, confirmando que o Docker Compose está instalado corretamente.

Agora, vamos criar um projeto Docker Compose simples. Criaremos um diretório para nosso projeto e, em seguida, criaremos um arquivo docker-compose.yml dentro dele. Este arquivo definirá um serviço web simples usando a imagem nginx.

Navegue para o diretório do projeto.

cd ~/project

Crie um novo diretório para nosso projeto, por exemplo, my-web-app.

mkdir my-web-app
cd my-web-app

Agora, crie o arquivo docker-compose.yml usando o editor nano.

nano docker-compose.yml

Adicione o seguinte conteúdo ao arquivo docker-compose.yml:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Este arquivo docker-compose.yml define um serviço chamado web. Este serviço usa a imagem Docker nginx:latest e mapeia a porta 80 no host para a porta 80 no container.

Salve o arquivo pressionando Ctrl + X, depois Y e Enter.

Agora, podemos iniciar os serviços definidos no arquivo docker-compose.yml usando o comando docker-compose up. A flag -d executa os containers em modo detached (desconectado), o que significa que eles serão executados em segundo plano.

docker-compose up -d

Este comando irá baixar a imagem nginx:latest (se ainda não estiver presente) e iniciar um container para o serviço web.

Você pode verificar o status dos containers em execução usando o comando docker ps.

docker ps

Você deve ver um container chamado my-web-app_web_1 (ou similar, dependendo do nome do diretório) em execução e encaminhando a porta 80.

Para verificar se o servidor web está em execução, você pode usar curl para acessá-lo.

curl http://localhost

Você deve ver a página HTML de boas-vindas padrão do Nginx na saída. Isso confirma que nosso projeto Docker Compose simples está configurado e funcionando corretamente.

Parar os containers de serviço

Na etapa anterior, iniciamos nosso serviço web simples usando docker-compose up -d. O container agora está em execução em segundo plano. Nesta etapa, aprenderemos como parar os containers do serviço em execução usando o Docker Compose.

Para parar os containers em execução definidos no arquivo docker-compose.yml, usamos o comando docker-compose stop. Este comando enviará um sinal SIGTERM para os containers, permitindo que eles sejam desligados de forma adequada.

Certifique-se de estar no diretório ~/project/my-web-app onde seu arquivo docker-compose.yml está localizado.

cd ~/project/my-web-app

Agora, execute o comando docker-compose stop.

docker-compose stop

Você verá uma saída indicando que o container está sendo parado.

Após executar o comando stop, os containers serão parados, mas não removidos. Você pode verificar isso listando todos os containers, incluindo os parados, usando o comando docker ps -a.

docker ps -a

Você deve ver o container my-web-app_web_1 listado com o status Exited. Isso confirma que o container foi parado com sucesso.

Se você tentar acessar o servidor web usando curl novamente, ele deverá falhar porque o container foi parado.

curl http://localhost

Você deve ver um erro de conexão recusada, indicando que o serviço web não está mais em execução.

Parar containers é útil quando você precisa interromper temporariamente seus serviços sem remover sua configuração ou dados. Nas próximas etapas, exploraremos como remover esses containers parados.

Remover containers de serviço parados sem volumes

Na etapa anterior, paramos o container em execução usando docker-compose stop. O container agora está no estado Exited. Nesta etapa, aprenderemos como remover esses containers parados usando o Docker Compose.

Para remover os containers parados definidos no arquivo docker-compose.yml, usamos o comando docker-compose rm. Por padrão, este comando remove apenas os containers de serviço parados. Ele não remove volumes ou redes.

Certifique-se de estar no diretório ~/project/my-web-app onde seu arquivo docker-compose.yml está localizado.

cd ~/project/my-web-app

Agora, execute o comando docker-compose rm. Você será solicitado a confirmar a remoção. Digite y e pressione Enter.

docker-compose rm

Você verá uma saída indicando que o container está sendo removido.

Após executar o comando rm, o container deve ser removido. Você pode verificar isso listando todos os containers, incluindo os parados, usando o comando docker ps -a.

docker ps -a

Você não deverá mais ver o container my-web-app_web_1 na lista. Isso confirma que o container foi removido com sucesso.

Remover containers parados ajuda a limpar seu sistema e liberar recursos. Nas próximas etapas, exploraremos como lidar com volumes ao remover containers.

Remover containers de serviço parados com volumes anônimos

Na etapa anterior, removemos o container parado. Agora, vamos explorar como remover containers juntamente com seus volumes anônimos associados. Volumes anônimos são volumes que não são explicitamente nomeados no arquivo docker-compose.yml. O Docker atribui automaticamente um nome aleatório a eles.

Primeiro, vamos modificar nosso arquivo docker-compose.yml para incluir um volume anônimo. Adicionaremos um volume ao serviço web.

Certifique-se de estar no diretório ~/project/my-web-app.

cd ~/project/my-web-app

Edite o arquivo docker-compose.yml.

nano docker-compose.yml

Adicione a seção volumes à definição do serviço web. Montaremos um volume anônimo em /usr/share/nginx/html dentro do container. É aqui que o Nginx serve seu conteúdo padrão.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - /usr/share/nginx/html

Salve o arquivo pressionando Ctrl + X, depois Y e Enter.

Agora, vamos iniciar o serviço novamente. Isso criará um novo container e um volume anônimo.

docker-compose up -d

Você pode listar os volumes criados pelo Docker usando o comando docker volume ls. Você deve ver um volume com um nome longo e gerado aleatoriamente associado ao seu projeto.

docker volume ls

Agora, pare os containers do serviço novamente.

docker-compose stop

Verifique se o container foi parado usando docker ps -a.

docker ps -a

Você deve ver o container my-web-app_web_1 no estado Exited.

Para remover os containers parados e seus volumes anônimos associados, usamos o comando docker-compose rm com a flag -v.

docker-compose rm -v

Você será solicitado a confirmar a remoção. Digite y e pressione Enter.

Após executar o comando, verifique se o container foi removido usando docker ps -a.

docker ps -a

O container my-web-app_web_1 não deve mais ser listado.

Agora, verifique os volumes novamente usando docker volume ls.

docker volume ls

O volume anônimo que foi criado para o serviço web também deve ser removido. Isso demonstra como a flag -v remove volumes anônimos juntamente com os containers.

Remover à força containers de serviço parados

Nas etapas anteriores, paramos e removemos containers. Às vezes, pode ser necessário remover containers mesmo que ainda estejam em execução. É aqui que a opção de remoção forçada é útil.

Primeiro, vamos iniciar nosso serviço novamente.

Certifique-se de estar no diretório ~/project/my-web-app.

cd ~/project/my-web-app

Inicie o serviço em modo detached.

docker-compose up -d

Verifique se o container está em execução usando docker ps.

docker ps

Você deve ver o container my-web-app_web_1 listado com o status Up.

Agora, vamos tentar remover o container em execução sem pará-lo primeiro. Se você tentar usar docker-compose rm em um container em execução, ele falhará.

docker-compose rm

Você verá uma mensagem de erro indicando que o container está em execução e não pode ser removido.

Para forçar a remoção de containers em execução, usamos o comando docker-compose rm com a flag -f. Essa flag força a remoção sem exigir confirmação e sem parar os containers de forma adequada.

docker-compose rm -f

Você verá uma saída indicando que o container está sendo removido. Observe que você não foi solicitado a confirmar desta vez.

Após executar o comando, verifique se o container foi removido usando docker ps -a.

docker ps -a

O container my-web-app_web_1 não deve mais ser listado. Isso confirma que o container foi removido à força, mesmo que estivesse em execução.

Usar a opção de remoção forçada deve ser feito com cautela, pois pode levar à perda de dados se o container estiver gravando dados em um volume que não é explicitamente gerenciado.

Isso conclui nossa exploração da remoção de containers de serviço do Docker Compose. Você aprendeu como parar containers, remover containers parados sem volumes, remover containers parados com volumes anônimos e forçar a remoção de containers em execução.

Resumo

Neste laboratório, aprendemos como usar o comando docker compose rm para remover containers parados. Começamos preparando um projeto Docker Compose simples, que envolveu a instalação do Docker Compose e a criação de um arquivo docker-compose.yml para definir um serviço web básico usando a imagem Nginx.

Em seguida, praticamos a parada dos containers de serviço e, subsequentemente, a remoção deles usando docker compose rm. Exploramos diferentes cenários, incluindo a remoção de containers parados sem volumes, a remoção de containers parados com volumes anônimos e o uso da opção de força para remover containers. Essa experiência prática demonstrou a aplicação prática do comando docker compose rm para gerenciar o ciclo de vida dos containers dentro de um projeto Docker Compose.