Como usar o comando docker desktop start para iniciar o Docker Desktop

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, exploraremos como usar o comando docker start para gerenciar o ciclo de vida de contêineres Docker. Começaremos entendendo o propósito fundamental de docker start e como ele difere de docker run.

Através de exercícios práticos, você aprenderá a iniciar contêineres parados de forma síncrona, iniciar contêineres em modo detached (destacado) e especificar um tempo limite (timeout) para a operação de inicialização. Ao final deste laboratório, você estará proficiente no uso de docker start para retomar seus contêineres Docker de forma eficiente.

Entenda o propósito do docker desktop start

Neste passo, entenderemos o propósito do comando docker start. O comando docker start é usado para iniciar um ou mais contêineres parados. Quando você para um contêiner usando docker stop, seu estado é salvo, e você pode retomá-lo mais tarde usando docker start. Isso é diferente de docker run, que cria um novo contêiner a partir de uma imagem e, em seguida, o inicia.

Primeiro, vamos criar um contêiner simples que podemos parar e, em seguida, iniciar. Usaremos a imagem ubuntu e executaremos um comando que mantém o contêiner em execução por um curto período.

docker run -d --name my-ubuntu ubuntu sleep 60

Este comando executa um contêiner Ubuntu em modo detached (-d), o nomeia como my-ubuntu e executa o comando sleep 60 dentro do contêiner. O comando sleep 60 manterá o contêiner em execução por 60 segundos.

Agora, vamos verificar o status do contêiner usando docker ps.

docker ps

Você deve ver o contêiner my-ubuntu listado com o status Up (Em execução).

Em seguida, pararemos o contêiner usando o comando docker stop.

docker stop my-ubuntu

Este comando envia um sinal de parada para o contêiner my-ubuntu.

Agora, vamos verificar o status do contêiner novamente usando docker ps.

docker ps

Você deve ver que o contêiner my-ubuntu não está mais listado na saída de docker ps (que mostra apenas contêineres em execução). Para ver todos os contêineres, incluindo os parados, você pode usar docker ps -a.

docker ps -a

Você deve agora ver my-ubuntu listado com o status Exited (Finalizado). Isso confirma que o contêiner foi parado.

Finalmente, usaremos o comando docker start para iniciar o contêiner parado.

docker start my-ubuntu

Este comando inicia o contêiner my-ubuntu.

Vamos verificar o status do contêiner mais uma vez usando docker ps.

docker ps

Você deve ver o contêiner my-ubuntu listado novamente com o status Up. Isso demonstra que docker start retomou com sucesso o contêiner previamente parado.

Em resumo, docker start é usado para retomar um contêiner parado, preservando seu estado, enquanto docker run cria e inicia um novo contêiner.

Iniciar o Docker Desktop de forma síncrona

Neste passo, exploraremos como iniciar um contêiner Docker de forma síncrona. Quando você inicia um contêiner de forma síncrona, o comando aguarda a conclusão da execução do contêiner antes de retornar o controle ao seu terminal. Este é o comportamento padrão quando você executa um comando diretamente em um contêiner sem a flag -d (detached - destacado).

Vamos usar um contêiner ubuntu simples para demonstrar a execução síncrona. Executaremos um comando que imprime uma mensagem e, em seguida, sai.

Primeiro, certifique-se de que a imagem ubuntu está disponível. Caso contrário, faça o pull:

docker pull ubuntu

Agora, execute um contêiner de forma síncrona que imprime "Hello from Ubuntu" e, em seguida, sai.

docker run --rm ubuntu echo "Hello from Ubuntu"

Vamos detalhar este comando:

  • docker run: Este é o comando para criar e executar um novo contêiner.
  • --rm: Esta flag remove automaticamente o contêiner quando ele sai. Isso é útil para contêineres temporários como este.
  • ubuntu: Este é o nome da imagem a ser usada.
  • echo "Hello from Ubuntu": Este é o comando que será executado dentro do contêiner.

Quando você executa este comando, você verá a saída "Hello from Ubuntu" diretamente em seu terminal. O prompt de comando não retornará até que o comando echo dentro do contêiner tenha terminado e o contêiner tenha saído. Esta é a execução síncrona.

Compare isso com o modo detached que vimos no passo anterior, onde o comando retornou imediatamente e o contêiner foi executado em segundo plano.

Para ilustrar ainda mais o comportamento síncrono, vamos executar um comando que leva um pouco mais de tempo.

docker run --rm ubuntu sleep 5

Este comando executará um contêiner Ubuntu e executará o comando sleep 5, que pausa a execução por 5 segundos. Você notará que seu terminal será bloqueado por 5 segundos antes que o comando seja concluído e o prompt retorne. Isso ocorre porque o comando docker run está esperando que o comando sleep 5 dentro do contêiner termine.

Este modo síncrono é útil quando você precisa executar um comando em um contêiner e aguardar sua saída ou conclusão antes de prosseguir com outras ações em seu script ou fluxo de trabalho.

Iniciar o Docker Desktop em modo detached (desacoplado)

Neste passo, aprenderemos como iniciar um contêiner Docker em modo detached (destacado). O modo detached significa que o contêiner é executado em segundo plano, e o comando Docker retorna imediatamente o controle ao seu terminal. Isso é útil para serviços ou aplicações de longa duração com os quais você não precisa interagir diretamente no terminal.

Para iniciar um contêiner em modo detached, você usa a flag -d ou --detach com o comando docker run ou docker start.

Vamos iniciar um contêiner simples do servidor web Nginx em modo detached. Primeiro, faça o pull da imagem nginx se você não a tiver localmente.

docker pull nginx

Agora, execute o contêiner Nginx em modo detached e mapeie a porta 80 do contêiner para a porta 8080 em sua máquina host.

docker run -d --name my-nginx -p 8080:80 nginx

Vamos detalhar este comando:

  • docker run: Cria e executa um novo contêiner.
  • -d: Executa o contêiner em modo detached (em segundo plano).
  • --name my-nginx: Dá ao contêiner o nome my-nginx.
  • -p 8080:80: Mapeia a porta 80 dentro do contêiner para a porta 8080 em seu host. Isso permite que você acesse o servidor web Nginx do navegador da sua máquina host em http://localhost:8080.
  • nginx: O nome da imagem a ser usada.

Após executar este comando, você verá uma longa sequência de caracteres impressa em seu terminal. Este é o ID do contêiner. O prompt de comando retornará imediatamente, indicando que o contêiner está sendo executado em segundo plano.

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

docker ps

Você deve ver o contêiner my-nginx listado com o status Up (Em execução).

Você também pode testar o acesso ao servidor web Nginx da sua máquina host usando curl.

curl http://localhost:8080

Você deve ver o conteúdo HTML da página de boas-vindas padrão do Nginx em seu terminal. Isso confirma que o contêiner está em execução e acessível através da porta mapeada.

Para parar o contêiner detached, você pode usar o comando docker stop com o nome ou ID do contêiner.

docker stop my-nginx

Após parar o contêiner, verifique se ele não está mais em execução usando docker ps.

docker ps

O contêiner my-nginx não deve ser listado na saída.

Iniciar contêineres em modo detached é essencial para executar serviços e aplicações que precisam operar continuamente sem bloquear seu terminal.

Iniciar o Docker Desktop com um tempo limite (timeout)

Neste passo, aprenderemos como iniciar um contêiner Docker com um timeout. O comando docker start possui uma flag --attach que permite que você se conecte ao STDOUT/STDERR do contêiner e encaminhe sinais. Quando usado com --attach, você também pode especificar uma flag --timeout para definir um timeout para o contêiner parar após o cliente se desconectar. Isso é particularmente útil para garantir que um contêiner não continue em execução indefinidamente se o cliente que o iniciou for terminado.

Primeiro, vamos criar um contêiner que podemos iniciar com um timeout. Usaremos a imagem ubuntu e executaremos um comando que mantém o contêiner em execução.

docker create --name my-timeout-ubuntu ubuntu sleep 60

Este comando cria um contêiner chamado my-timeout-ubuntu a partir da imagem ubuntu e define o comando para sleep 60. Observe que usamos docker create aqui, que cria o contêiner, mas não o inicia.

Agora, iniciaremos este contêiner usando docker start com as flags --attach e --timeout. Definiremos o timeout para 5 segundos.

docker start --attach --timeout 5 my-timeout-ubuntu

Vamos detalhar este comando:

  • docker start: Inicia um contêiner parado.
  • --attach: Conecta-se ao STDOUT/STDERR do contêiner e encaminha sinais.
  • --timeout 5: Define um timeout de 5 segundos. Se o cliente (seu terminal, neste caso) se desconectar, o Docker aguardará 5 segundos para que o contêiner pare graciosamente. Se ele não parar em 5 segundos, o Docker enviará um sinal SIGKILL para forçar a parada.
  • my-timeout-ubuntu: O nome do contêiner a ser iniciado.

Quando você executa este comando, você será conectado à saída do contêiner. Como o contêiner está apenas executando sleep 60, você não verá nenhuma saída imediatamente.

Agora, vamos simular uma desconexão do cliente. Você pode fazer isso pressionando Ctrl+C em seu terminal. Isso o desconectará do contêiner.

Após pressionar Ctrl+C, o Docker iniciará o processo de timeout. Ele aguardará 5 segundos para que o contêiner my-timeout-ubuntu pare. Como o contêiner está executando sleep 60, ele não parará em 5 segundos, e o Docker o forçará a parar.

Para verificar se o contêiner parou, use docker ps -a.

docker ps -a

Você deve ver my-timeout-ubuntu listado com o status Exited (Saiu). Isso confirma que o mecanismo de timeout funcionou e o contêiner foi parado após a desconexão do cliente.

Usar a flag --timeout com docker start --attach é uma boa prática para gerenciar o ciclo de vida de contêineres que são iniciados com uma conexão de cliente, garantindo que eles sejam limpos corretamente, mesmo que o cliente termine inesperadamente.

Resumo

Neste laboratório, aprendemos o propósito fundamental do comando docker start, que é retomar um contêiner parado, preservando seu estado. Diferenciamos-o de docker run, que cria e inicia um novo contêiner. Através de passos práticos, demonstramos como criar um contêiner, pará-lo usando docker stop, verificar seu estado parado usando docker ps -a e, finalmente, reiniciá-lo usando docker start, confirmando seu status de execução com docker ps.

Também exploramos diferentes maneiras de iniciar o Docker Desktop usando o comando docker desktop start, incluindo iniciá-lo de forma síncrona, em modo detached (destacado) e com um timeout especificado. Essas opções oferecem flexibilidade no controle do comportamento de inicialização do Docker Desktop com base em necessidades e fluxos de trabalho específicos.