Como usar o comando docker container start para reiniciar containers

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker container start para reiniciar containers parados. Você começará criando e parando containers usando as imagens hello-world e ubuntu.

Em seguida, você explorará diferentes maneiras de iniciar um container parado, incluindo simplesmente iniciá-lo, iniciá-lo e anexar à sua saída, e iniciá-lo interativamente. Isso demonstrará a flexibilidade do comando docker container start para gerenciar o ciclo de vida do container.

Criar e parar um container

Nesta etapa, você aprenderá como criar e parar um container Docker. Um container é uma instância executável de uma imagem. Você pode criar, iniciar, parar, mover ou excluir um container usando a API ou CLI do Docker.

Primeiro, vamos baixar a imagem hello-world do Docker Hub. Esta é uma imagem muito pequena que é útil para testes.

docker pull hello-world

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

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, vamos criar e executar um container a partir da imagem hello-world. Quando você executa este comando, o Docker criará um novo container e executará o comando especificado na imagem. No caso do hello-world, o comando simplesmente imprime uma mensagem e depois sai.

docker run hello-world

Você deve ver uma saída semelhante a esta:

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Esta saída confirma que o container foi executado com sucesso e imprimiu sua mensagem. Como o comando no container foi concluído, o container foi parado.

Para ver os containers no seu sistema, incluindo aqueles que foram parados, você pode usar o comando docker ps -a.

docker ps -a

Você verá uma lista de containers. O container hello-world deve estar na lista, e seu status deve ser Exited.

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                      PORTS    NAMES
...            hello-world   "/hello"   About a minute ago   Exited (0) 58 seconds ago            ...

Agora, vamos criar outro container, mas desta vez usaremos a imagem ubuntu e executaremos um comando que mantém o container em execução por um curto período. Usaremos o comando sleep para manter o container ativo por 10 segundos.

Primeiro, baixe a imagem ubuntu:

docker pull ubuntu

Você deve ver uma saída indicando que a imagem 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 um container a partir da imagem ubuntu e execute o comando sleep 10. Executaremos isso no modo detached (-d) para que o container seja executado em segundo plano e não bloqueie nosso terminal.

docker run -d ubuntu sleep 10

Este comando exibirá o ID do container.

[container_id]

Use docker ps para ver os containers em execução.

docker ps

Você deve ver o container ubuntu listado com o status Up.

CONTAINER ID   IMAGE    COMMAND       CREATED         STATUS         PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About a minute ago   Up 5 seconds            ...

Após cerca de 10 segundos, o comando sleep 10 será concluído e o container será parado. Use docker ps -a novamente para ver todos os containers, incluindo o que foi parado.

docker ps -a

O container ubuntu agora deve ter o status Exited.

CONTAINER ID   IMAGE    COMMAND       CREATED         STATUS                      PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About a minute ago   Exited (0) 5 seconds ago             ...
...

Finalmente, vamos parar o container ubuntu manualmente usando o comando docker stop. Você pode parar um container em execução por seu ID ou nome. Usaremos o ID do container que foi exibido quando executamos o container. Substitua [container_id] pelo ID real do seu container ubuntu.

docker stop [container_id]

Este comando exibirá o ID do container que foi parado.

[container_id]

Use docker ps novamente para confirmar que o container não está mais em execução.

docker ps

O container ubuntu não deve aparecer na lista de containers em execução.

Iniciar o container parado

Na etapa anterior, criamos e paramos um container baseado na imagem ubuntu. Nesta etapa, você aprenderá como iniciar um container parado.

Primeiro, vamos listar todos os containers, incluindo os parados, para encontrar o ID do container ubuntu que criamos.

docker ps -a

Procure o container com a imagem ubuntu e o status Exited. Anote seu CONTAINER ID.

CONTAINER ID   IMAGE    COMMAND       CREATED          STATUS                      PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About 5 minutes ago   Exited (0) 4 minutes ago             ...
...

Agora, podemos iniciar este container parado usando o comando docker start seguido pelo ID do container. Substitua [container_id] pelo ID real do seu container ubuntu.

docker start [container_id]

Este comando exibirá o ID do container que foi iniciado.

[container_id]

Use docker ps para verificar se o container está agora em execução.

docker ps

Você deve ver o container ubuntu listado com o status Up.

CONTAINER ID   IMAGE    COMMAND       CREATED          STATUS         PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About 5 minutes ago   Up 5 seconds            ...

Como o comando original para este container era sleep 10, o container será executado por 10 segundos e, em seguida, parará novamente. Após alguns segundos, execute docker ps -a novamente para ver seu status.

docker ps -a

O container ubuntu agora deve estar no estado Exited novamente.

CONTAINER ID   IMAGE    COMMAND       CREATED          STATUS                       PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About 5 minutes ago   Exited (0) 5 seconds ago              ...
...

Iniciar um container parado é útil quando você deseja retomar o trabalho ou o estado de uma instância de container anterior sem criar uma nova.

Iniciar o container e anexar à sua saída

Nas etapas anteriores, criamos e iniciamos containers. Quando usamos docker run ou docker start no modo detached (-d), o container era executado em segundo plano. Às vezes, você deseja ver a saída de um container enquanto ele é executado. Nesta etapa, você aprenderá como iniciar um container e anexar aos seus fluxos de saída padrão e erro padrão.

Primeiro, vamos criar um novo container que imprimirá uma mensagem a cada segundo por 5 segundos. Usaremos a imagem ubuntu novamente.

docker run -d ubuntu /bin/bash -c 'for i in {1..5}; do echo "Hello from container $i"; sleep 1; done'

Este comando cria e executa um container no modo detached (-d). O comando executado dentro do container é um script bash que faz um loop 5 vezes, imprimindo uma mensagem e dormindo por 1 segundo em cada iteração. Anote o ID do container que é exibido.

[container_id]

Agora, vamos anexar a este container em execução para ver sua saída. Use o comando docker attach seguido pelo ID do container. Substitua [container_id] pelo ID real do seu container ubuntu.

docker attach [container_id]

Você deve ver a saída do container aparecendo em seu terminal:

Hello from container 1
Hello from container 2
Hello from container 3
Hello from container 4
Hello from container 5

Após a conclusão do loop, o container parará e você retornará ao prompt do seu terminal.

Se você anexar a um container que já foi parado, o comando docker attach sairá imediatamente.

Vamos verificar se o container foi parado listando todos os containers:

docker ps -a

Você deve ver o container com o comando /bin/bash -c 'for i in {1..5}; do echo "Hello from container $i"; sleep 1; done' no estado Exited.

CONTAINER ID   IMAGE    COMMAND                  CREATED         STATUS                      PORTS    NAMES
[container_id]   ubuntu   "/bin/bash -c 'for i…"   About a minute ago   Exited (0) 5 seconds ago             ...
...

Anexar a um container é útil para monitorar a saída de um processo de longa duração ou para fins de depuração.

Iniciar o container interativamente

Nas etapas anteriores, executamos containers que executavam um comando e depois saíam, ou eram executados em segundo plano. Frequentemente, você deseja interagir com um container, assim como faria com uma máquina virtual ou um servidor remoto. Nesta etapa, você aprenderá como iniciar um container interativamente e obter um prompt de shell dentro dele.

Para executar um container interativamente, usamos o comando docker run com as flags -i e -t.

  • A flag -i mantém a entrada padrão (STDIN) aberta, mesmo que não esteja anexada. Isso é necessário para processos interativos.
  • A flag -t aloca um pseudo-TTY, que é necessário para um prompt de shell.

Executaremos um container ubuntu e executaremos o comando /bin/bash para obter um shell bash dentro do container.

docker run -it ubuntu /bin/bash

Após executar este comando, você verá um prompt de shell que se parece com isto:

root@[container_id]:/#

Isso indica que você está agora dentro do container ubuntu em execução como o usuário root. Você pode executar comandos Linux padrão dentro deste container. Por exemplo, vamos verificar a versão do sistema operacional:

cat /etc/os-release

Você deve ver uma saída semelhante a esta, confirmando que você está executando dentro de um container Ubuntu:

NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 22.04.3 LTS"
VERSION_ID="22.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=jammy
UBUNTU_CODENAME=jammy

Você também pode tentar outros comandos, como listar arquivos no diretório atual:

ls

Você verá o conteúdo padrão do diretório raiz de um sistema Ubuntu.

Para sair do container e retornar ao seu terminal host, você pode digitar exit no prompt do shell do container:

exit

Quando você sair do shell, o container parará porque o processo principal (/bin/bash) foi concluído.

Vamos verificar se o container foi parado listando todos os containers:

docker ps -a

Você deve ver o container com o comando /bin/bash no estado Exited.

CONTAINER ID   IMAGE    COMMAND       CREATED         STATUS                      PORTS    NAMES
[container_id]   ubuntu   "/bin/bash"   About a minute ago   Exited (0) 5 seconds ago             ...
...

Executar containers interativamente é essencial para explorar imagens de container, depurar aplicativos dentro de containers e realizar tarefas administrativas.

Resumo

Neste laboratório, você aprendeu como criar e parar containers Docker usando os comandos docker run e docker stop. Você praticou o download de imagens com docker pull e verificou o status do container usando docker ps -a. Você também criou um container que saiu imediatamente (hello-world) e outro que permaneceu em execução por um período (ubuntu com sleep).

Em seguida, você explorou diferentes maneiras de reiniciar containers parados usando o comando docker start. Você aprendeu como simplesmente iniciar um container, como iniciar e anexar à sua saída usando a flag -a e como iniciar um container interativamente usando a flag -i, permitindo que você execute comandos dentro do container em execução.