Introdução
Neste laboratório, você aprenderá como parar graciosamente os contêineres Docker usando o comando docker container stop. Começaremos criando e executando um contêiner simples. Em seguida, você explorará como parar contêineres usando o sinal e o tempo limite (timeout) padrão e, subsequentemente, aprenderá como personalizar o tempo limite e o sinal usado para parar os contêineres. Essa experiência prática fornecerá habilidades práticas para gerenciar o ciclo de vida de seus contêineres Docker de forma eficaz.
Criar e executar um contêiner simples
Nesta etapa, você aprenderá como criar e executar um contêiner Docker simples. Um contêiner é uma unidade padrão de software que empacota o código e todas as suas dependências para que o aplicativo seja executado de forma rápida e confiável de um ambiente de computação para outro.
Primeiro, vamos baixar uma imagem simples do Docker Hub. Usaremos a imagem hello-world, que é uma imagem muito pequena que simplesmente imprime uma mensagem e sai.
docker pull hello-world
Você deve ver uma saída indicando que a imagem está sendo baixada.
Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
Agora que temos a imagem, podemos executar um contêiner com base nessa imagem. Use o comando docker run:
docker run hello-world
Quando você executa este comando, o Docker criará um novo contêiner a partir da imagem hello-world. O contêiner executará o comando definido na imagem, que, neste caso, é imprimir uma mensagem no console.
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Esta saída confirma que sua instalação do Docker está funcionando e que você executou com sucesso seu primeiro contêiner. O contêiner executou o programa hello-world e depois saiu.
Para ver os contêineres que foram executados, incluindo aqueles que saíram, você pode usar o comando docker ps -a:
docker ps -a
Você deve ver o contêiner hello-world listado com o status Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> hello-world "/hello" About a minute ago Exited (0) About a minute ago <container_name>
A saída mostra o ID do contêiner, a imagem na qual ele foi baseado, o comando que ele executou, quando foi criado, seu status atual e seu nome atribuído.
Parar o contêiner usando o sinal e o tempo limite padrão
Nesta etapa, você aprenderá como parar um contêiner Docker em execução usando o sinal e o tempo limite padrão. Quando você para um contêiner, o Docker envia um sinal para o processo principal em execução dentro do contêiner. Por padrão, o Docker envia o sinal SIGTERM, que informa ao processo para desligar graciosamente. Se o processo não sair dentro de um período de tempo limite padrão (geralmente 10 segundos), o Docker envia um sinal SIGKILL para forçar o processo a ser encerrado.
Primeiro, vamos executar um contêiner que permanecerá em execução. Usaremos a imagem ubuntu e executaremos um comando simples que mantém o contêiner ativo.
docker pull ubuntu
Você deve ver uma saída indicando que a imagem ubuntu está sendo baixada.
Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
Agora, execute o contêiner ubuntu no modo detached (-d) para que ele seja executado em segundo plano e execute um comando que o manterá em execução indefinidamente (por exemplo, tail -f /dev/null).
docker run -d ubuntu tail -f /dev/null
Este comando exibirá o ID do contêiner.
<container_id>
Você pode verificar se o contêiner está em execução usando o comando docker ps:
docker ps
Você deve ver o contêiner ubuntu listado com o status Up.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Up About a minute ago <container_name>
Agora, vamos parar este contêiner em execução usando o comando docker stop. Você pode usar o ID do contêiner ou o nome do contêiner. Substitua <container_id> pelo ID real do seu contêiner em execução.
docker stop <container_id>
O comando exibirá o ID do contêiner que foi parado.
<container_id>
Após executar o comando docker stop, o contêiner receberá o sinal SIGTERM. O Docker aguardará o tempo limite padrão (10 segundos) para que o contêiner pare graciosamente. Se ele não parar dentro desse tempo, ele enviará SIGKILL.
Você pode verificar se o contêiner foi parado executando docker ps novamente.
docker ps
O contêiner ubuntu não deve mais ser listado na saída de docker ps (que mostra apenas contêineres em execução). Para ver todos os contêineres, incluindo os parados, use docker ps -a.
docker ps -a
Você deve ver o contêiner ubuntu listado com o status Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Exited (0) About a minute ago <container_name>
Isso confirma que o contêiner foi parado com sucesso usando o sinal e o tempo limite padrão.
Parar o contêiner com um tempo limite personalizado
Nesta etapa, você aprenderá como parar um contêiner Docker em execução e especificar um tempo limite personalizado para o período de desligamento gracioso. Isso é útil quando você precisa dar ao seu aplicativo mais ou menos tempo para desligar de forma limpa antes que o Docker o encerre à força.
Usaremos a mesma imagem ubuntu e o mesmo comando da etapa anterior para executar um contêiner que permanece ativo.
Primeiro, execute o contêiner ubuntu no modo detached (-d) com o comando tail -f /dev/null:
docker run -d ubuntu tail -f /dev/null
Este comando exibirá o ID do contêiner.
<container_id>
Verifique se o contêiner está em execução usando docker ps:
docker ps
Você deve ver o contêiner ubuntu listado com o status Up.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Up About a minute ago <container_name>
Agora, pare o contêiner usando o comando docker stop, mas desta vez, especifique um tempo limite usando a flag -t ou --time. Vamos definir o tempo limite para 5 segundos. Substitua <container_id> pelo ID real do seu contêiner em execução.
docker stop -t 5 <container_id>
O comando exibirá o ID do contêiner que foi parado.
<container_id>
Quando você usa docker stop -t 5, o Docker envia o sinal SIGTERM e aguarda 5 segundos para que o contêiner pare. Se o contêiner ainda estiver em execução após 5 segundos, o Docker enviará o sinal SIGKILL.
Verifique se o contêiner foi parado executando docker ps -a:
docker ps -a
Você deve ver o contêiner ubuntu listado com o status Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Exited (0) About a minute ago <container_name>
Você parou com sucesso o contêiner com um tempo limite personalizado de 5 segundos.
Parar o contêiner com um sinal personalizado
Nesta etapa, você aprenderá como parar um contêiner Docker em execução enviando um sinal específico diferente do SIGTERM padrão. Isso pode ser útil para aplicativos que são configurados para responder a diferentes sinais para desligamento gracioso ou outras ações.
Usaremos novamente a imagem ubuntu e o comando tail -f /dev/null para manter um contêiner em execução.
Execute o contêiner ubuntu no modo detached (-d):
docker run -d ubuntu tail -f /dev/null
Este comando exibirá o ID do contêiner.
<container_id>
Verifique se o contêiner está em execução usando docker ps:
docker ps
Você deve ver o contêiner ubuntu listado com o status Up.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Up About a minute ago <container_name>
Agora, pare o contêiner usando o comando docker stop e especifique um sinal personalizado usando a flag --signal. Por exemplo, vamos enviar o sinal SIGKILL diretamente. Substitua <container_id> pelo ID real do seu contêiner em execução.
docker stop --signal SIGKILL <container_id>
O comando exibirá o ID do contêiner que foi parado.
<container_id>
Quando você usa docker stop --signal SIGKILL, o Docker envia o sinal SIGKILL imediatamente para o processo principal no contêiner. Este sinal não pode ser capturado ou ignorado pelo processo, portanto, ele será encerrado à força sem qualquer período de desligamento gracioso.
Verifique se o contêiner foi parado executando docker ps -a:
docker ps -a
Você deve ver o contêiner ubuntu listado com o status Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "tail -f /dev/null" About a minute ago Exited (137) About a minute ago <container_name>
Observe que o código de saída pode ser diferente (por exemplo, 137) quando um contêiner é parado com SIGKILL, pois isso indica uma terminação não graciosa.
Você parou com sucesso o contêiner enviando um sinal personalizado.
Resumo
Neste laboratório, você aprendeu as etapas fundamentais de como trabalhar com contêineres Docker. Você começou puxando uma imagem simples (hello-world) do Docker Hub e, em seguida, executando um contêiner com base nessa imagem. Isso demonstrou o processo básico de criação e execução de um contêiner, e você verificou sua conclusão bem-sucedida verificando o status do contêiner usando docker ps -a.
As etapas subsequentes, embora não totalmente detalhadas no conteúdo fornecido, teriam guiado você pelo processo de parada de contêineres em execução usando o comando docker container stop. Isso teria incluído a compreensão do sinal e tempo limite padrão usados para parar e, em seguida, explorar como personalizar tanto a duração do tempo limite quanto o sinal enviado ao contêiner para obter um desligamento gracioso.



