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:latestespecifica 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.



