Linha de Comando

Laboratório

Nenhum container em execução:

$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Execução da linha de comando:

$ docker container run -d -p 8080:3000 --health-cmd "curl -f http://localhost:3000/health" --health-timeout 5s --health-retries 3 --health-int
erval 10s --health-start-period 30s marcelodpbarbieri/simulador-caos:v1
c4814725ccdf1877d1647e4a00e847f22f09c085bf6c097d7f56c093b50a2c67
Explicação do comando

Esse comando executa o Docker para rodar um container da imagem marcelodpbarbieri/simulador-caos:v1, com a porta 8080 do host mapeada para a porta 3000 do container, e inclui um health check personalizado para monitorar a saúde do serviço dentro do container.

Quebra do comando:

$ docker container run -d -p 8080:3000 --health-cmd "curl -f http://localhost:3000/health" --health-timeout 5s --health-retries 3 --health-interval 10s --health-start-period 30s marcelodpbarbieri/simulador-caos:v1

1. docker container run

  • Esse comando cria e executa um novo container a partir da imagem especificada.

2. -d

  • O parâmetro -d (abreviação de detach) faz com que o container rode em segundo plano, retornando imediatamente o controle do terminal.

3. -p 8080:3000

  • Mapeia a porta 3000 do container para a porta 8080 da máquina host. Isso significa que, ao acessar localhost:8080 no host, você estará acessando o serviço rodando no container na porta 3000.

4. --health-cmd "curl -f http://localhost:3000/health"

  • Define o comando a ser executado pelo health check. Nesse caso, é usado curl para fazer uma requisição HTTP GET para o endpoint /health no serviço rodando na porta 3000 do container.

    • O -f do curl faz com que o comando retorne um erro caso o status HTTP da resposta seja diferente de 2xx ou 3xx. Se o comando falhar, o health check considera o container como unhealthy.

5. --health-timeout 5s

  • Define o tempo máximo de 5 segundos para o curl receber uma resposta. Se o comando não conseguir concluir dentro desse limite, o health check é considerado falho.

6. --health-retries 3

  • Se o comando de health check falhar, o Docker irá tentar novamente até 3 vezes antes de marcar o container como unhealthy.

7. --health-interval 10s

  • Define o intervalo entre cada execução do health check. Nesse caso, o Docker executará o comando de health check a cada 10 segundos.

8. --health-start-period 30s

  • Define um período de 30 segundos após a criação do container antes de começar a executar os health checks. Isso dá tempo para o serviço dentro do container iniciar corretamente.

9. marcelodpbarbieri/simulador-caos:v1

  • Essa é a imagem usada para criar o container. A imagem está armazenada no repositório do Docker Hub com a tag v1. O simulador-caos provavelmente é o nome da aplicação ou serviço contido na imagem.

10. c4814725ccdf1877d1647e4a00e847f22f09c085bf6c097d7f56c093b50a2c67

  • Esse é o ID do container criado, que o Docker retornou após a execução do comando. Esse ID pode ser usado para inspecionar o container, verificar logs, etc.

Fluxo do Health Check:

  1. O Docker aguarda 30 segundos antes de iniciar os health checks (tempo de inicialização do serviço).

  2. A cada 10 segundos, o Docker executa curl -f http://localhost:3000/health.

  3. Se o serviço não responder dentro de 5 segundos, ou retornar um status HTTP de falha, o comando é considerado falho.

  4. Após 3 falhas consecutivas, o container é marcado como unhealthy.

Esse conjunto de parâmetros garante que o Docker monitore a integridade do serviço e possa tomar ações com base na saúde do container (por exemplo, reiniciar ou sinalizar problemas para um sistema de orquestração).

Container em execução:

$ docker container ls
CONTAINER ID   IMAGE                                 COMMAND                  CREATED              STATUS                        PORTS
         NAMES
c4814725ccdf   marcelodpbarbieri/simulador-caos:v1   "docker-entrypoint.s…"   About a minute ago   Up About a minute (healthy)   0.0.0.0:8080->3000/tcp, :::8080->3000/tcp   confident_wright

Container saudável:

Monitoramento:

Quebrar a aplicação:

Como não existe orquestração tem-se apenas esse resultado.

Last updated