Introdução
Neste laboratório, você aprenderá como usar o comando docker compose kill para parar à força os serviços definidos em um arquivo Docker Compose. Começaremos preparando um arquivo Compose simples com múltiplos serviços e iniciando-os usando docker compose up.
Posteriormente, você explorará diferentes maneiras de usar o comando docker compose kill: para parar à força todos os serviços, para parar à força um serviço específico e para parar à força serviços usando um sinal diferente. Essa experiência prática fornecerá conhecimento prático sobre como gerenciar serviços Docker Compose usando o comando kill.
Prepare um arquivo Compose simples com múltiplos serviços
Nesta etapa, prepararemos um arquivo Docker Compose simples que define múltiplos serviços. Docker Compose é uma ferramenta que permite definir e executar aplicações Docker com múltiplos contêineres. Embora o Docker esteja pré-instalado nesta VM, o Docker Compose não está. Vamos instalá-lo primeiro.
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
Agora, vamos verificar a instalação checando a versão.
docker-compose --version
Você deve ver as informações da versão impressas no console, confirmando que o Docker Compose está instalado corretamente.
Em seguida, criaremos um diretório para nosso projeto e navegaremos até ele.
mkdir ~/project/my-compose-app
cd ~/project/my-compose-app
Agora, criaremos um arquivo docker-compose.yml neste diretório. Este arquivo definirá nossos serviços. Usaremos o editor nano para criar e editar o arquivo.
nano docker-compose.yml
Dentro do editor nano, cole o seguinte conteúdo. Este arquivo define dois serviços: web e redis. O serviço web usa a imagem nginx e mapeia a porta 80 do contêiner para a porta 8080 no host. O serviço redis usa a imagem redis.
version: "3.8"
services:
web:
image: nginx
ports:
- "8080:80"
redis:
image: redis
Após colar o conteúdo, salve o arquivo pressionando Ctrl + X, depois Y e, finalmente, Enter.
Antes de podermos iniciar os serviços, precisamos baixar as imagens definidas no arquivo docker-compose.yml. Podemos fazer isso usando o comando docker pull.
docker pull nginx
docker pull redis
Esses comandos baixarão as imagens nginx e redis do Docker Hub.
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 contêineres 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. A flag -d executa os contêineres em modo detached (desacoplado), o que significa que eles serão executados em segundo plano e não ocuparão seu terminal.
docker-compose up -d
Você deve ver uma saída indicando que as redes, volumes (se houver) e contêineres estão sendo criados e iniciados.
Para verificar se os contêineres estão em execução, você pode usar o comando docker ps.
docker ps
Este comando lista todos os contêineres em execução. Você deve ver entradas para os contêineres web (nginx) e redis.
Você também pode verificar os logs dos serviços usando o comando docker-compose logs.
docker-compose logs
Isso exibirá os logs de todos os serviços. Você também pode visualizar os logs de um serviço específico adicionando o nome do serviço, por exemplo, docker-compose logs web.
Finalmente, como mapeamos a porta 80 do contêiner nginx para a porta 8080 no host, você pode acessar a página de boas-vindas padrão do Nginx usando curl para acessar localhost na porta 8080.
curl localhost:8080
Você deve ver o conteúdo HTML da página de boas-vindas do Nginx na saída.
Forçar a parada de todos os serviços usando docker compose kill
Nesta etapa, aprenderemos como forçar a parada de todos os serviços em execução definidos em nosso arquivo docker-compose.yml usando o comando docker compose kill. Diferente de docker compose down, que para os contêineres de forma graciosa e remove recursos, docker compose kill envia um sinal especificado aos contêineres para forçá-los a parar imediatamente.
Certifique-se de estar no diretório ~/project/my-compose-app.
cd ~/project/my-compose-app
Para forçar a parada de todos os serviços, basta executar o comando docker compose kill sem especificar nenhum nome de serviço. Por padrão, este comando envia um sinal SIGKILL aos contêineres.
docker-compose kill
Você deve ver uma saída indicando que os contêineres estão sendo interrompidos.
Para verificar se os contêineres foram interrompidos, você pode usar o comando docker ps novamente.
docker ps
Desta vez, você não deve ver os contêineres web (nginx) e redis listados, pois eles foram interrompidos.
Você também pode usar docker ps -a para ver todos os contêineres, incluindo aqueles que foram interrompidos. Você deve ver os contêineres my-compose-app-web-1 e my-compose-app-redis-1 com o status "Exited" (Encerrado).
docker ps -a
Forçar a parada de um serviço específico usando docker compose kill
Nesta etapa, aprenderemos como forçar a parada de um serviço específico definido em nosso arquivo docker-compose.yml usando o comando docker compose kill seguido pelo nome do serviço.
Primeiro, vamos iniciar nossos serviços novamente para que tenhamos contêineres para parar. Certifique-se de estar no diretório ~/project/my-compose-app.
cd ~/project/my-compose-app
docker-compose up -d
Verifique se ambos os contêineres estão em execução usando docker ps.
docker ps
Agora, vamos forçar a parada apenas do serviço web. Fazemos isso adicionando o nome do serviço web após o comando docker compose kill.
docker-compose kill web
Você deve ver uma saída indicando que o contêiner web está sendo interrompido.
Para verificar se apenas o contêiner web foi interrompido, use o comando docker ps novamente.
docker ps
Você agora deve ver apenas o contêiner redis listado como em execução. O contêiner web não deve estar na lista de contêineres em execução.
Você também pode usar docker ps -a para ver todos os contêineres, incluindo os interrompidos. O contêiner my-compose-app-web-1 deve ter o status "Exited" (Encerrado), enquanto o contêiner my-compose-app-redis-1 ainda deve estar "Up" (Em execução).
docker ps -a
Forçar a parada de serviços com um sinal diferente usando docker compose kill -s
Nesta etapa, exploraremos como usar o comando docker compose kill com a flag -s para enviar um sinal específico aos contêineres. Por padrão, docker compose kill envia um sinal SIGKILL, que encerra imediatamente o processo. No entanto, você pode querer enviar um sinal diferente, como SIGTERM, que é um pedido para encerrar o processo de forma graciosa.
Primeiro, vamos garantir que nossos serviços estejam em execução. Navegue até o diretório do projeto e inicie os serviços em modo detached (destacado).
cd ~/project/my-compose-app
docker-compose up -d
Verifique se ambos os contêineres estão em execução usando docker ps.
docker ps
Agora, vamos forçar a parada de todos os serviços usando o sinal SIGTERM. Usamos a flag -s seguida pelo nome do sinal.
docker-compose kill -s SIGTERM
Você deve ver uma saída indicando que os contêineres estão sendo interrompidos com o sinal especificado.
Para confirmar que os contêineres foram interrompidos, use o comando docker ps.
docker ps
Nem o contêiner web nem o redis devem ser listados como em execução.
Usar docker ps -a mostrará que os contêineres foram encerrados.
docker ps -a
A capacidade de enviar diferentes sinais é útil para desligamentos mais controlados, permitindo que aplicativos dentro dos contêineres executem tarefas de limpeza antes de sair, se estiverem configurados para lidar com esses sinais.
Finalmente, para limpar os contêineres interrompidos e a rede criada pelo Docker Compose, você pode usar o comando docker compose down.
docker-compose down
Este comando irá parar e remover os contêineres, redes e volumes definidos no arquivo docker-compose.yml.
Resumo
Neste laboratório, aprendemos como preparar um simples arquivo Docker Compose definindo múltiplos serviços (web e redis) e instalamos o Docker Compose. Em seguida, iniciamos esses serviços usando o comando docker compose up. Posteriormente, exploramos como parar à força todos os serviços em execução definidos no arquivo Compose usando docker compose kill, e como direcionar um serviço específico para terminação forçada com docker compose kill <service_name>. Finalmente, aprendemos como enviar um sinal diferente aos serviços durante o processo de parada usando a flag -s, como docker compose kill -s SIGKILL.



