Como usar o comando docker compose pause para pausar serviços

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker compose pause para suspender temporariamente os serviços em execução definidos em um arquivo docker-compose.yml. Começaremos criando um arquivo docker-compose.yml simples que define um serviço web usando a imagem Nginx.

Após a criação do arquivo docker-compose.yml, você aprenderá como iniciar os serviços usando docker compose up, pausar um serviço em execução específico usando docker compose pause, verificar se o serviço foi realmente pausado e, finalmente, reativar o serviço usando docker compose unpause. Este exercício prático fornecerá experiência prática no gerenciamento do ciclo de vida dos serviços Docker Compose.

Criar um arquivo docker-compose.yml simples

Nesta etapa, criaremos um arquivo docker-compose.yml simples. Antes de começarmos, precisamos instalar o Docker Compose. Docker Compose é uma ferramenta para definir e executar aplicações Docker com múltiplos contêineres. 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 do binário do Docker Compose e o 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, você pode verificar a instalação verificando a versão do Docker Compose.

docker-compose --version

Você deve ver uma saída semelhante a Docker Compose version v2.20.2.

Agora, vamos criar um diretório para nosso projeto e navegar até ele.

mkdir my-docker-app
cd my-docker-app

Dentro do diretório my-docker-app, criaremos um arquivo chamado docker-compose.yml. Este arquivo definirá os serviços para nossa aplicação. Usaremos o editor nano para criar e editar este arquivo.

nano docker-compose.yml

No editor nano, cole o seguinte conteúdo. Este arquivo docker-compose.yml define um único serviço chamado web que usa a imagem nginx:latest.

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

Vamos detalhar este arquivo:

  • version: '3.8' especifica a versão do formato do arquivo Docker Compose.
  • services: define os serviços que compõem sua aplicação.
  • web: é o nome do nosso serviço.
  • image: nginx:latest especifica a imagem Docker a ser usada para este serviço. Neste caso, estamos usando a versão mais recente da imagem Nginx.
  • ports: mapeia as portas entre o host e o contêiner. "80:80" mapeia a porta 80 no host para a porta 80 no contêiner.

Após colar o conteúdo, salve o arquivo pressionando Ctrl + X, depois Y e, finalmente, Enter.

Antes de iniciar o serviço, precisamos garantir que a imagem nginx:latest esteja disponível localmente. Se não estiver, o Docker Compose fará o download automaticamente quando você iniciar o serviço. No entanto, você também pode baixar a imagem manualmente usando o comando docker pull.

docker pull nginx:latest

Este comando baixa a imagem nginx:latest do Docker Hub.

Iniciar os serviços definidos em docker-compose.yml

Nesta etapa, iniciaremos os serviços definidos em nosso arquivo docker-compose.yml. Usaremos o comando docker-compose up para construir, criar e iniciar os serviços.

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

cd ~/project/my-docker-app

Agora, execute o seguinte comando para iniciar os serviços. A flag -d executa os contêineres em modo detached (desanexado), o que significa que eles serão executados em segundo plano.

docker-compose up -d

Este comando lerá o arquivo docker-compose.yml, criará os contêineres necessários com base nas definições de serviço e os iniciará. Se a imagem nginx:latest ainda não estiver presente em seu sistema, o Docker Compose fará o download automaticamente antes de iniciar o contêiner.

Você deve ver uma saída indicando que a rede, o volume (se houver) e o contêiner do serviço estão sendo criados e iniciados. Por exemplo:

[+] Running 1/1
 ⠿ Container my-docker-app-web-1  Started

Para verificar se o serviço está em execução, você pode usar o comando docker-compose ps. Este comando lista os contêineres gerenciados pelo Docker Compose no diretório atual.

docker-compose ps

Você deve ver uma saída semelhante a esta, mostrando o contêiner do serviço web com o estado running:

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       2 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

Você também pode verificar se o servidor web Nginx está acessível usando o comando curl para acessar localhost na porta 80.

curl localhost:80

Você deve ver a saída HTML da página de boas-vindas padrão do Nginx, indicando que o servidor web está em execução e acessível.

Pausar um serviço em execução

Nesta etapa, pausaremos o contêiner do serviço web em execução. Pausar um contêiner suspende todos os processos no contêiner. Isso é diferente de parar um contêiner, que encerra os processos do contêiner. Quando um contêiner é pausado, seu estado é congelado e ele consome recursos mínimos de CPU.

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

cd ~/project/my-docker-app

Para pausar o serviço web, use o comando docker-compose pause seguido pelo nome do serviço.

docker-compose pause web

Você deve ver uma saída indicando que o serviço está sendo pausado:

[+] Paused 1/1
 ⠿ Container my-docker-app-web-1  Paused

Agora, vamos verificar o status do serviço usando docker-compose ps.

docker-compose ps

A saída deve mostrar o contêiner do serviço web com o estado paused:

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       5 minutes ago  paused        0.0.0.0:80->80/tcp, :::80->80/tcp

Quando um contêiner é pausado, ele não deve ser capaz de responder a solicitações. Vamos tentar acessar o servidor web Nginx novamente usando curl.

curl localhost:80

Este comando pode travar ou retornar um erro, indicando que o serviço não está respondendo porque está pausado. Isso confirma que os processos do contêiner estão suspensos.

Verificar se o serviço está pausado

Nesta etapa, verificaremos explicitamente se o contêiner do serviço web está em um estado pausado. Embora tenhamos verificado o status usando docker-compose ps na etapa anterior, é uma boa prática confirmar o estado também usando comandos Docker diretamente.

Primeiro, certifique-se de estar no diretório ~/project/my-docker-app.

cd ~/project/my-docker-app

Podemos usar o comando docker ps para listar todos os contêineres em execução (incluindo os pausados). Vamos filtrar a saída para encontrar nosso contêiner do serviço web e verificar seu status.

docker ps --filter "name=my-docker-app-web-1"

A saída deste comando deve mostrar o contêiner com a coluna STATUS indicando Paused.

Alternativamente, você pode usar o comando docker inspect para obter informações detalhadas sobre o contêiner, incluindo seu estado. Usaremos grep para procurar especificamente o estado "Paused" na saída.

docker inspect my-docker-app-web-1 | grep Paused

Este comando deve gerar uma linha semelhante a "Paused": true,, confirmando que o contêiner está realmente pausado.

Como demonstrado na etapa anterior, tentar acessar o serviço via curl deve falhar ou travar, indicando ainda mais que o contêiner não está processando ativamente as solicitações.

curl localhost:80

Este comando não deve retornar a página de boas-vindas do Nginx.

Retomar o serviço

Nesta etapa, despausaremos o contêiner do serviço web que pausamos na etapa anterior. Despausar um contêiner retoma todos os processos que foram suspensos quando o contêiner foi pausado.

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

cd ~/project/my-docker-app

Para despausar o serviço web, use o comando docker-compose unpause seguido pelo nome do serviço.

docker-compose unpause web

Você deve ver uma saída indicando que o serviço está sendo despausado:

[+] Unpaused 1/1
 ⠿ Container my-docker-app-web-1  Unpaused

Agora, vamos verificar o status do serviço novamente usando docker-compose ps.

docker-compose ps

A saída agora deve mostrar o contêiner do serviço web com o estado running:

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       8 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

Como o contêiner agora está em execução, ele deve ser capaz de responder às solicitações novamente. Vamos tentar acessar o servidor web Nginx usando curl.

curl localhost:80

Você deve agora ver a saída HTML da página de boas-vindas padrão do Nginx, confirmando que o serviço está em execução e acessível novamente.

Finalmente, para limpar os recursos criados durante este laboratório, você pode parar e remover os contêineres, redes e volumes definidos no arquivo docker-compose.yml usando o comando docker-compose down.

docker-compose down

Este comando irá parar os contêineres em execução e remover os contêineres, redes e volumes.

Resumo

Neste laboratório, aprendemos como usar o comando docker compose pause para gerenciar o estado dos serviços definidos em um arquivo docker-compose.yml. Começamos instalando o Docker Compose e criando um arquivo docker-compose.yml simples que define um serviço web usando a imagem Nginx.

Após a configuração, iniciamos o serviço usando docker compose up -d, pausamos o serviço em execução com docker compose pause web, verificamos seu estado pausado e, finalmente, o despausamos usando docker compose unpause web. Essa experiência prática demonstrou a aplicação prática dos comandos pause e unpause para suspender e retomar temporariamente os serviços do Docker Compose.