Como usar o comando docker compose down para parar e remover recursos

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar efetivamente o comando docker compose down para parar e remover recursos definidos em um arquivo Docker Compose. Começaremos preparando um arquivo Compose simples com dois serviços e uma rede.

Após a configuração, você praticará a inicialização desses serviços usando docker compose up. O cerne do laboratório se concentrará então em usar docker compose down para parar e remover os recursos padrão e, subsequentemente, explorar as opções -v para remover volumes e --rmi all para remover imagens, demonstrando diferentes níveis de limpeza de recursos.

Prepare um arquivo Compose simples com serviços e uma rede

Nesta etapa, prepararemos um arquivo Compose simples para definir dois serviços e uma rede. Antes de começarmos, precisamos instalar o Docker Compose, pois ele não está pré-instalado no ambiente.

Primeiro, vamos baixar o binário do Docker Compose. Baixaremos a versão 1.29.2, que é compatível com a versão do Docker pré-instalada.

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

Este comando baixa o binário do Docker Compose da página oficial de lançamentos do GitHub e o salva em /usr/local/bin/docker-compose. As partes $(uname -s) e $(uname -m) detectam automaticamente seu sistema operacional e arquitetura para baixar o binário correto.

Em seguida, precisamos aplicar permissões executáveis ao binário baixado para que possamos executá-lo como um comando.

sudo chmod +x /usr/local/bin/docker-compose

Agora, vamos verificar a instalação verificando a versão do Docker Compose.

docker-compose --version

Você deve ver as informações da versão impressas no console, confirmando que o Docker Compose está instalado corretamente.

Agora que o Docker Compose está instalado, vamos criar um diretório para nosso projeto e navegar até ele. Criaremos um diretório chamado my-compose-app no diretório ~/project.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Dentro deste diretório, criaremos um arquivo chamado docker-compose.yml. Este arquivo definirá nossos serviços e rede. Usaremos o editor nano para criar e editar este arquivo.

nano docker-compose.yml

Agora, cole o seguinte conteúdo no arquivo docker-compose.yml. Este arquivo define dois serviços: web e redis, e uma rede chamada app-network.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - app-network
  redis:
    image: redis:latest
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

Vamos detalhar este arquivo docker-compose.yml:

  • version: '3.8' especifica a versão do formato do arquivo Docker Compose.
  • services: define os diferentes serviços que compõem sua aplicação.
    • web: define um serviço chamado web.
      • image: nginx:latest especifica que este serviço usará a imagem nginx mais recente. Faremos o pull desta imagem mais tarde.
      • ports: - "80:80" mapeia a porta 80 na máquina host para a porta 80 no container web.
      • networks: - app-network conecta o serviço web à app-network.
    • redis: define um serviço chamado redis.
      • image: redis:latest especifica que este serviço usará a imagem redis mais recente. Faremos o pull desta imagem mais tarde.
      • networks: - app-network conecta o serviço redis à app-network.
  • networks: define as redes usadas pelos serviços.
    • app-network: define uma rede chamada app-network.
      • driver: bridge especifica que esta rede usará o driver bridge padrão.

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

Antes de iniciar os serviços, precisamos fazer o pull das imagens Docker necessárias. Faremos o pull das imagens nginx:latest e redis:latest.

docker pull nginx:latest
docker pull redis:latest

Esses comandos baixam as imagens especificadas do Docker Hub para sua máquina local.

Iniciar os serviços usando docker compose up

Nesta etapa, iniciaremos os serviços definidos em nosso arquivo docker-compose.yml usando o comando docker compose up. Este comando constrói, (re)cria, inicia e anexa aos containers para um serviço.

Certifique-se de estar no diretório ~/project/my-compose-app onde você criou o arquivo docker-compose.yml.

cd ~/project/my-compose-app

Agora, execute o seguinte comando para iniciar os serviços. Usaremos a flag -d para executar os containers em modo detached (desanexado), o que significa que eles serão executados em segundo plano e não bloquearão seu terminal.

docker-compose up -d

Quando você executa este comando pela primeira vez, o Docker Compose irá:

  1. Criar a app-network conforme definido no arquivo docker-compose.yml.
  2. Criar um container para o serviço web usando a imagem nginx:latest.
  3. Criar um container para o serviço redis usando a imagem redis:latest.
  4. Conectar ambos os containers à app-network.
  5. Iniciar ambos os containers.

Você deve ver a saída indicando que a rede e os containers estão sendo criados e iniciados.

Para verificar se os containers estão em execução, você pode usar o comando docker ps.

docker ps

Este comando lista todos os containers em execução. Você deve ver dois containers listados, um para o serviço web (baseado na imagem nginx) e um para o serviço redis (baseado na imagem redis). Os nomes dos containers normalmente serão prefixados com o nome do diretório (my-compose-app neste caso) e o nome do serviço (por exemplo, my-compose-app_web_1, my-compose-app_redis_1).

Você também pode verificar as redes criadas pelo Docker Compose usando o comando docker network ls.

docker network ls

Você deve ver uma rede chamada my-compose-app_app-network listada, que foi criada com base na definição app-network em seu arquivo docker-compose.yml.

Finalmente, como mapeamos a porta 80 do serviço web para a porta 80 no host, você pode acessar a página de boas-vindas padrão do Nginx abrindo um navegador da web e navegando para o endereço IP da sua VM LabEx. Alternativamente, você pode usar curl do terminal.

curl localhost

Você deve ver o conteúdo HTML da página de boas-vindas padrão do Nginx na saída. Isso confirma que o serviço web está em execução e acessível.

Parar e remover recursos padrão usando docker compose down

Nesta etapa, pararemos e removeremos os containers e redes criados por docker compose up usando o comando docker compose down. Por padrão, docker compose down remove os containers e a rede padrão criada por up.

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

cd ~/project/my-compose-app

Agora, execute o seguinte comando para parar e remover os serviços.

docker-compose down

Quando você executa este comando, o Docker Compose irá:

  1. Parar os containers em execução (web e redis).
  2. Remover os containers parados.
  3. Remover a rede (my-compose-app_app-network) que foi criada por docker compose up.

Você deve ver a saída indicando que os containers e a rede estão sendo parados e removidos.

Para verificar se os containers foram removidos, você pode usar o comando docker ps -a. A flag -a mostra todos os containers, incluindo os parados.

docker ps -a

Você não deve mais ver os containers my-compose-app_web_1 e my-compose-app_redis_1 na saída.

Você também pode verificar se a rede foi removida usando o comando docker network ls.

docker network ls

A my-compose-app_app-network não deve mais ser listada na saída.

Observe que docker compose down por padrão não remove volumes ou imagens. Exploraremos como remover esses no próximo passo.

Parar e remover volumes usando docker compose down -v

Na etapa anterior, vimos que docker compose down remove containers e redes, mas não volumes. Nesta etapa, aprenderemos como remover volumes junto com outros recursos usando a flag -v com docker compose down.

Primeiro, vamos iniciar os serviços novamente para que tenhamos recursos para remover. Certifique-se de estar no diretório ~/project/my-compose-app.

cd ~/project/my-compose-app

Execute o comando docker compose up -d para iniciar os serviços em modo detached.

docker-compose up -d

Isso irá recriar os containers e a rede.

Agora, vamos verificar se algum volume foi criado. Em nosso docker-compose.yml, não definimos explicitamente nenhum volume. No entanto, algumas imagens, como redis, podem criar volumes anônimos por padrão para persistir dados. Podemos verificar os volumes usando o comando docker volume ls.

docker volume ls

Você pode ver um volume listado com um nome como my-compose-app_redisdata (o nome exato pode variar ligeiramente dependendo da versão e configuração do Docker Compose, mas provavelmente será prefixado com o nome do projeto e o nome do serviço). Este é um volume anônimo criado pelo container redis.

Agora, vamos parar e remover os serviços, a rede e também os volumes usando docker compose down -v.

docker-compose down -v

A flag -v informa ao Docker Compose para remover todos os volumes declarados na seção volumes do arquivo docker-compose.yml e quaisquer volumes anônimos anexados aos containers.

Você deve ver a saída indicando que os containers, a rede e o volume estão sendo parados e removidos.

Para verificar se os containers foram removidos, use docker ps -a.

docker ps -a

Os containers web e redis não devem ser listados.

Para verificar se a rede foi removida, use docker network ls.

docker network ls

A my-compose-app_app-network não deve ser listada.

Finalmente, para verificar se o volume foi removido, use docker volume ls.

docker volume ls

O volume que foi listado anteriormente (por exemplo, my-compose-app_redisdata) não deve mais estar na saída.

Parar e remover imagens usando docker compose down --rmi all

Nas etapas anteriores, aprendemos como parar e remover containers, redes e volumes usando docker compose down. Por padrão, docker compose down não remove as imagens Docker que foram usadas para criar os containers. Nesta etapa, aprenderemos como remover imagens usando a flag --rmi all com docker compose down.

Primeiro, vamos iniciar os serviços novamente. Certifique-se de estar no diretório ~/project/my-compose-app.

cd ~/project/my-compose-app

Execute o comando docker compose up -d para iniciar os serviços em modo detached.

docker-compose up -d

Isso irá recriar os containers e a rede.

Agora, vamos verificar as imagens Docker em seu sistema usando o comando docker images.

docker images

Você deve ver as imagens nginx e redis listadas, juntamente com quaisquer outras imagens que você possa ter em seu sistema.

Agora, vamos parar e remover os serviços, a rede, os volumes e também as imagens usando docker compose down --rmi all.

docker-compose down --rmi all -v

Estamos incluindo a flag -v novamente para garantir que os volumes também sejam removidos. A flag --rmi all informa ao Docker Compose para remover todas as imagens usadas por qualquer serviço no arquivo docker-compose.yml, mesmo que não estejam marcadas (tagged).

Você deve ver a saída indicando que os containers, a rede, os volumes e as imagens estão sendo parados e removidos.

Para verificar se os containers foram removidos, use docker ps -a.

docker ps -a

Os containers web e redis não devem ser listados.

Para verificar se a rede foi removida, use docker network ls.

docker network ls

A my-compose-app_app-network não deve ser listada.

Para verificar se os volumes foram removidos, use docker volume ls.

docker volume ls

Quaisquer volumes relacionados a este projeto não devem ser listados.

Finalmente, para verificar se as imagens foram removidas, use docker images.

docker images

As imagens nginx e redis que foram usadas pelos serviços não devem mais ser listadas na saída, a menos que estejam sendo usadas por outros containers ou tenham outras tags. docker compose down --rmi all remove imagens que não são usadas por nenhum outro container.

Resumo

Neste laboratório, aprendemos como usar o comando docker compose down para parar e remover recursos definidos em um arquivo Docker Compose. Começamos preparando um arquivo Compose simples com dois serviços e uma rede, o que envolveu a instalação do Docker Compose e a criação do arquivo docker-compose.yml.

Após iniciar os serviços usando docker compose up, exploramos diferentes maneiras de usar docker compose down. Primeiro, usamos o comando básico para parar e remover os recursos padrão (containers e redes). Em seguida, aprendemos como remover volumes usando a flag -v e como remover imagens usando a flag --rmi all, demonstrando a flexibilidade do comando docker compose down no gerenciamento do ciclo de vida de nossas aplicações Docker Compose.