Como usar o comando docker restart para gerenciar contêineres

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar efetivamente contêineres Docker usando o comando docker restart. Começará compreendendo o processo básico de reinicialização de um contêiner em execução, uma operação fundamental para aplicar alterações ou resolver problemas.

Aprofundando-se nisso, você explorará opções de reinicialização mais avançadas. Isso inclui especificar um tempo limite (timeout) personalizado para o processo de reinicialização, permitindo que você controle quanto tempo o Docker espera para que um contêiner pare graciosamente antes de forçar a terminação. Finalmente, você aprenderá como reiniciar um contêiner usando um sinal específico, fornecendo controle granular sobre o comportamento de desligamento do contêiner durante uma reinicialização.

Reiniciar um contêiner em execução

Nesta etapa, você aprenderá como reiniciar um contêiner Docker em execução. Reiniciar um contêiner é uma operação comum quando você precisa aplicar alterações de configuração, corrigir problemas ou simplesmente atualizar o estado do contêiner.

Primeiro, vamos baixar uma imagem Nginx simples para usar em nossos exemplos. Usaremos a imagem nginx:latest.

docker pull nginx:latest

Você deve ver uma saída indicando que a imagem está sendo baixada e extraída.

Em seguida, executaremos um contêiner com base nesta imagem. Vamos executá-lo em modo detached (-d) para que ele seja executado em segundo plano e atribuir um nome (--name my-nginx).

docker run -d --name my-nginx nginx:latest

Este comando iniciará o contêiner Nginx e imprimirá seu ID do contêiner.

Para verificar se o contêiner está em execução, você pode usar o comando docker ps.

docker ps

Você deve ver o contêiner my-nginx listado com o status Up.

Agora, vamos reiniciar o contêiner em execução usando o comando docker restart seguido pelo nome do contêiner.

docker restart my-nginx

Este comando irá parar o contêiner e, em seguida, iniciá-lo novamente.

Para confirmar que o contêiner foi reiniciado e está em execução novamente, use docker ps mais uma vez.

docker ps

Você deve ver o contêiner my-nginx listado novamente, e a coluna STATUS deve mostrar Up com um tempo indicando que ele foi iniciado recentemente.

Reiniciar um contêiner com um tempo limite específico

Nesta etapa, você aprenderá como reiniciar um contêiner Docker com um tempo limite específico. Ao reiniciar um contêiner, o Docker envia um sinal de parada (por padrão, SIGTERM) para o processo principal no contêiner. Se o processo não sair dentro de um determinado período, o Docker envia um sinal de kill (SIGKILL) para forçá-lo a parar. O tempo limite padrão é de 10 segundos. Você pode ajustar este tempo limite usando a flag -t ou --time com o comando docker restart.

Vamos usar o contêiner my-nginx que criamos na etapa anterior. Primeiro, certifique-se de que ele está em execução.

docker ps

Se o contêiner não estiver em execução, inicie-o novamente:

docker start my-nginx

Agora, reiniciaremos o contêiner com um tempo limite de 5 segundos. Isso significa que o Docker esperará 5 segundos após enviar o sinal de parada antes de enviar o sinal de kill.

docker restart -t 5 my-nginx

Você deve ver o nome do contêiner impresso, indicando que o comando de reinicialização foi executado.

Para observar o efeito do tempo limite, você normalmente precisaria de um contêiner que levasse mais de 10 segundos (o padrão) para desligar graciosamente. No entanto, para este exercício, estamos focando na sintaxe do comando.

Vamos tentar reiniciar com um tempo limite maior, digamos 20 segundos.

docker restart --time 20 my-nginx

Novamente, você verá o nome do contêiner impresso.

A opção -t ou --time é útil quando você tem aplicativos em execução em contêineres que exigem mais tempo para realizar operações de limpeza antes de desligar.

Para confirmar que o contêiner ainda está em execução após a reinicialização, use docker ps.

docker ps

Você deve ver my-nginx listado com o status Up.

Reiniciar um contêiner com um sinal específico

Nesta etapa, você aprenderá como reiniciar um contêiner Docker enviando um sinal específico para o processo principal do contêiner. Embora docker restart envie um sinal de parada padrão (SIGTERM) seguido por um sinal de kill (SIGKILL) após um tempo limite, pode ser necessário enviar um sinal diferente dependendo do aplicativo em execução dentro do contêiner. Você pode conseguir isso primeiro parando o contêiner com um sinal específico usando docker stop e, em seguida, iniciando-o novamente com docker start.

Vamos usar o contêiner my-nginx novamente. Certifique-se de que ele está em execução.

docker ps

Se não estiver em execução, inicie-o:

docker start my-nginx

Agora, vamos parar o contêiner enviando o sinal SIGKILL. Este sinal encerra imediatamente o processo sem permitir que ele execute qualquer limpeza.

docker stop -s SIGKILL my-nginx

Você deve ver o nome do contêiner impresso e, se você executar docker ps, o contêiner não deverá mais ser listado.

docker ps

O contêiner agora está parado. Para reiniciá-lo, simplesmente o iniciamos novamente.

docker start my-nginx

O contêiner agora deve estar em execução novamente. Verifique com docker ps.

docker ps

Você deve ver my-nginx listado com o status Up.

Embora SIGKILL seja uma parada forçada, você também pode enviar outros sinais, como SIGHUP ou SIGINT, se seu aplicativo estiver configurado para tratá-los para desligamentos ou recarregamentos graciosos. No entanto, a configuração padrão do contêiner nginx lida com SIGTERM de forma graciosa.

Vamos parar o contêiner novamente, desta vez usando o sinal SIGTERM padrão (que é o padrão para docker stop se nenhum sinal for especificado).

docker stop my-nginx

Verifique se ele está parado:

docker ps

Agora, inicie-o pela última vez.

docker start my-nginx

Verifique se está em execução:

docker ps

Ao combinar docker stop -s <signal> e docker start, você tem um controle mais granular sobre como um contêiner é parado antes de ser reiniciado.

Resumo

Neste laboratório, você aprendeu o processo fundamental de reiniciar um contêiner Docker em execução usando o comando docker restart. Você praticou o pull de uma imagem Docker, a execução de um contêiner em modo detached, a verificação de seu status e, em seguida, a reinicialização bem-sucedida.

Além disso, você explorou como controlar o processo de reinicialização especificando um período de tempo limite usando a flag -t ou --time, permitindo que você ajuste o tempo que o Docker espera para que um contêiner pare graciosamente antes de terminá-lo à força.