Executando seu primeiro serviço

DockerBeginner
Pratique Agora

Introdução

No desenvolvimento moderno de software, os contêineres se tornaram uma forma comum de empacotar e distribuir aplicações. Um contêiner não é uma máquina virtual completa. Ele compartilha o kernel do host, mas executa a aplicação em um ambiente de processos isolado, com sua própria visão do sistema de arquivos e configuração de rede.

Neste laboratório, você dará seus primeiros passos com Docker executando uma aplicação do mundo real: o servidor web Nginx. Isso é útil porque muitos contêineres não executam comandos pontuais. Eles funcionam como serviços de longa duração, portanto você precisa entender o ciclo de vida deles.

Essa é uma mudança importante em relação ao exemplo hello-world. Em vez de trabalhar com um contêiner que inicia, exibe uma mensagem e termina, agora você trabalhará com um contêiner de serviço que deve permanecer ativo enquanto o processo principal estiver em execução.

Você aprenderá a:

  • Iniciar um contêiner em segundo plano (modo detached).
  • Ver o status dos contêineres em execução.
  • Interromper um contêiner quando terminar de usá-lo.
  • Remover um contêiner para liberar recursos do sistema.

Ao final deste laboratório, você entenderá o ciclo de vida completo de um contêiner Docker: criar, executar, interromper e excluir.

Executar um servidor web em segundo plano

Nesta etapa, você iniciará um servidor web Nginx.

Quando você executa um comando no terminal, ele normalmente ocupa a tela até terminar. No entanto, para um serviço como um servidor web, você quer que ele seja executado continuamente em segundo plano, para continuar usando o terminal em outras tarefas. No Docker, isso é chamado de "modo detached".

Usamos a opção -d para executar o contêiner no modo detached. Também usaremos a opção --name para atribuir ao contêiner um nome específico e fácil de lembrar.

O modo detached não altera o que o contêiner está fazendo. Ele altera a forma como o terminal está conectado ao contêiner. O serviço continua em execução, mas o prompt do shell retorna imediatamente.

Execute o comando a seguir para iniciar um contêiner Nginx chamado my-nginx:

docker run --name my-nginx -d nginx

Detalhamento do comando:

  • docker run: o comando para criar e iniciar um novo contêiner.
  • --name my-nginx: atribui o nome "my-nginx" ao contêiner. Se você não usar essa opção, o Docker atribuirá um nome aleatório, como happy_hopper.
  • -d: executa o contêiner no modo detached (em segundo plano).
  • nginx: a imagem a ser usada. O Docker procura a imagem localmente; se não a encontrar, faz o download dela do Docker Hub.

A saída:

Você verá uma longa sequência de caracteres exibida no terminal. Esse é o ID do contêiner. O fato de o prompt de comando retornar imediatamente confirma que o contêiner está em execução em segundo plano.

O ID do contêiner é o identificador interno usado pelo Docker, enquanto o nome do contêiner é um rótulo mais fácil de usar. No trabalho cotidiano, os nomes geralmente são mais fáceis de usar do que IDs longos.

Verificar o status do contêiner

Agora que você iniciou o contêiner, precisa verificar se ele está em execução conforme esperado. O comando docker ps lista todos os contêineres ativos.

Execute o comando a seguir:

docker ps

Você deverá ver uma saída semelhante a esta:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
a1b2c3d4e5f6   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 10 seconds   80/tcp     my-nginx

Entendendo a saída:

  • CONTAINER ID: o ID exclusivo deste contêiner, mostrado em uma versão abreviada da longa sequência exibida anteriormente.
  • IMAGE: a imagem em execução (nginx).
  • STATUS: Up indica que o contêiner está em execução corretamente.
  • NAMES: o nome que atribuímos ao contêiner (my-nginx).

Se você vir essa entrada, seu servidor web está sendo executado com sucesso em segundo plano!

A saída de docker ps é uma das principais visões operacionais do Docker. Ela informa quais contêineres estão ativos no momento, de qual imagem eles foram criados e há quanto tempo estão em execução.

Interromper o serviço

Quando você terminar de usar um serviço ou precisar reconfigurá-lo, deverá interromper o contêiner em execução.

O comando docker stop envia um sinal ao contêiner para que ele seja encerrado de forma controlada. Você pode identificar o contêiner usando o ID do contêiner ou o nome. Como atribuímos a ele o nome my-nginx, usaremos esse nome.

A interrupção controlada é importante porque muitos serviços precisam de tempo para fechar arquivos, liberar portas ou concluir operações em andamento. Interromper um contêiner não significa simplesmente "desligá-lo"; significa solicitar que o processo principal seja encerrado corretamente.

Execute o comando a seguir:

docker stop my-nginx

O terminal exibirá my-nginx para confirmar que o comando foi recebido.

Verifique se ele foi interrompido:

Execute docker ps novamente. A lista deverá estar vazia (ou my-nginx não deverá aparecer).

Para confirmar que o contêiner ainda existe, mas está parado, use a opção -a (all):

docker ps -a

Agora você verá my-nginx listado com o status Exited.

Limpar os recursos

Interromper um contêiner não o exclui. Ele permanece no disco, preservando seus logs e sua configuração. Isso é útil se você quiser reiniciá-lo mais tarde com docker start.

Essa é outra distinção importante do ciclo de vida: criar/executar, interromper e remover são operações separadas. O Docker mantém esses estados separados para que você possa inspecionar ou reiniciar os contêineres antes de excluí-los.

No entanto, se você terminou completamente de usar o contêiner, deverá removê-lo para manter o sistema limpo. O comando docker rm remove contêineres interrompidos.

Execute o comando a seguir para remover my-nginx:

docker rm my-nginx

O terminal exibirá my-nginx para confirmar a remoção.

Verificação final:

Execute docker ps -a mais uma vez. Você verá que o contêiner desapareceu completamente.

Observação: normalmente, não é possível remover um contêiner em execução com docker rm. Primeiro, você precisa interrompê-lo, como fizemos, ou usar a opção -f (force), embora a interrupção controlada seja o método recomendado.

Resumo

Neste laboratório, você gerenciou com sucesso o ciclo de vida completo de um contêiner Docker. Você aprendeu a:

  • Executar um serviço em segundo plano usando docker run -d.
  • Verificar o status dos contêineres ativos com docker ps.
  • Interromper um serviço de forma controlada usando docker stop.
  • Remover um contêiner interrompido para liberar recursos usando docker rm.

Esses quatro comandos são os principais comandos usados diariamente por qualquer pessoa que trabalhe com Docker. Agora você está pronto para explorar mais profundamente como interagir com esses contêineres em execução.