Como verificar o status dos containers Docker

DockerBeginner
Pratique Agora

Introdução

O Docker revolucionou a forma como desenvolvemos, implementamos e gerenciamos aplicações. Como uma poderosa plataforma de containerização, o Docker permite que você empacote suas aplicações e suas dependências em ambientes isolados e portáteis. Saber como verificar o status dos seus containers Docker é crucial para um gerenciamento e solução de problemas eficazes.

Neste laboratório prático, você aprenderá os comandos essenciais para monitorar seus containers Docker, entender seu status e gerenciar seu ciclo de vida. Ao final deste tutorial, você será capaz de verificar e gerenciar com confiança o status de seus containers Docker para um desenvolvimento e implementação de aplicações eficientes.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 91%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Criando e Executando um Container Docker

Antes de podermos verificar o status dos containers Docker, precisamos ter alguns containers em execução. Nesta etapa, criaremos e executaremos um container Docker simples.

Entendendo os Containers Docker

Containers Docker são pacotes de software executáveis, leves e autônomos que incluem tudo o que é necessário para executar uma aplicação: código, runtime, ferramentas do sistema, bibliotecas e configurações. Eles fornecem ambientes consistentes em diferentes estágios de desenvolvimento.

Os benefícios de usar containers Docker incluem:

  • Ambientes de runtime consistentes
  • Isolamento de outras aplicações
  • Implementação e escalabilidade rápidas
  • Utilização eficiente de recursos

Verificando a Instalação do Docker

Vamos primeiro verificar se o Docker está corretamente instalado no sistema:

docker --version

Você deve ver uma saída semelhante a:

Docker version 20.10.21, build baeda1f

Executando Seu Primeiro Container

Vamos executar um container simples usando a imagem oficial do servidor web Nginx. Isso nos dará um container para monitorar nas etapas seguintes.

Execute o seguinte comando no seu terminal:

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

Este comando:

  • Cria um container chamado my-nginx
  • Executa-o em modo detached (-d), o que significa que ele é executado em segundo plano
  • Mapeia a porta 8080 do host para a porta 80 do container (-p 8080:80)
  • Usa a imagem oficial nginx do Docker Hub

Você deve ver uma longa sequência de caracteres, que é o ID do container:

a72369167c214c20247f786a47b6b0b8581b60324bd2d151a7a0db8ddb024959

Agora, vamos verificar se o container está em execução:

docker ps

Você deve ver uma saída semelhante a:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 9 seconds    0.0.0.0:8080->80/tcp   my-nginx

Parabéns! Você criou e iniciou com sucesso um container Docker. Na próxima etapa, exploraremos como verificar o status deste container com mais detalhes.

Comandos Básicos de Status do Container

Agora que temos um container em execução, vamos aprender como verificar seu status usando os comandos mais comuns do Docker.

Usando o Comando docker ps

O comando docker ps é a forma mais fundamental de visualizar os containers em execução.

docker ps

A saída deve ser semelhante a:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    0.0.0.0:8080->80/tcp   my-nginx

Este comando mostra:

  • CONTAINER ID: O identificador único para o container
  • IMAGE: A imagem Docker usada para criar o container
  • COMMAND: O comando executado dentro do container
  • CREATED: Quando o container foi criado
  • STATUS: O status atual do container
  • PORTS: Mapeamentos de portas entre o host e o container
  • NAMES: O nome atribuído ao container

Visualizando Todos os Containers

O comando básico docker ps mostra apenas os containers em execução. Para ver todos os containers, incluindo os parados, use:

docker ps -a

Isso exibirá todos os containers, independentemente do seu estado:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   5 minutes ago    Up 5 minutes    0.0.0.0:8080->80/tcp   my-nginx

Atualmente, temos apenas um container, mas se você tivesse containers parados, eles também apareceriam aqui.

Status do Container com Formatação

Você pode personalizar a saída de docker ps para mostrar apenas as informações que você precisa, usando a opção --format:

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

Isso exibirá uma tabela simplificada com apenas os nomes, status e portas dos containers:

NAMES       STATUS          PORTS
my-nginx    Up 7 minutes    0.0.0.0:8080->80/tcp

Parando um Container

Vamos parar nosso container para ver como seu status muda:

docker stop my-nginx

Saída:

my-nginx

Agora verifique o status novamente:

docker ps

Você notará que o container não está mais listado nos containers em execução. Para vê-lo, use:

docker ps -a

Saída:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS     NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   10 minutes ago   Exited (0) 10 seconds ago             my-nginx

O status do container mudou para "Exited" (Saída), indicando que ele não está mais em execução.

Iniciando um Container

Vamos iniciar o container novamente:

docker start my-nginx

Saída:

my-nginx

Verifique o status para confirmar que ele está em execução:

docker ps

Saída:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
a72369167c21   nginx     "/docker-entrypoint.…"   12 minutes ago   Up 5 seconds    0.0.0.0:8080->80/tcp   my-nginx

Ótimo! Agora você entende como verificar o status básico dos containers Docker usando o comando docker ps e como parar e iniciar containers.

Monitoramento Avançado de Containers

Agora que você entende o básico de como verificar o status do container, vamos explorar comandos de monitoramento mais avançados que fornecem informações detalhadas sobre seus containers.

Informações Detalhadas do Container com docker inspect

O comando docker inspect fornece informações detalhadas de configuração e tempo de execução sobre um container:

docker inspect my-nginx

Este comando retorna um array JSON com informações abrangentes sobre o container. A saída é bastante longa, mas inclui:

  • Configurações de rede
  • Montagens de volume
  • Variáveis de ambiente
  • Limites de recursos
  • Estado do container
  • E muito mais

Vamos analisar uma seção específica usando a opção --format:

docker inspect --format='{{.State.Status}}' my-nginx

Saída:

running

Você pode extrair outras informações específicas:

docker inspect --format='{{.NetworkSettings.IPAddress}}' my-nginx

Isso mostrará o endereço IP interno do container.

Métricas de Container em Tempo Real com docker stats

O comando docker stats fornece um fluxo ao vivo de estatísticas de uso de recursos do container:

docker stats my-nginx

Você verá uma saída semelhante a:

CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O        PIDS
a72369167c21   my-nginx   0.00%     2.312MiB / 7.764GiB   0.03%     1.05kB / 1.51kB   0B / 4.1kB       2

Isso mostra:

  • Porcentagem de uso da CPU
  • Uso de memória
  • I/O de rede
  • I/O de bloco
  • Número de processos

Pressione Ctrl+C para sair da visualização de estatísticas ao vivo.

Para ver as estatísticas de todos os containers de uma vez:

docker stats --no-stream

Isso mostra um snapshot das estatísticas sem as atualizações contínuas.

Visualizando Logs do Container

Para solucionar problemas, é frequentemente útil verificar os logs do container:

docker logs my-nginx

Você verá os logs do servidor Nginx. Se você acessou o servidor web, verá os logs de requisição HTTP.

Para acompanhar os logs em tempo real (semelhante a tail -f):

docker logs -f my-nginx

Pressione Ctrl+C para sair do fluxo de logs.

Verificando os Processos do Container

Para ver os processos em execução dentro de um container:

docker top my-nginx

A saída será semelhante a:

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                12345               12321               0                   14:15               ?                   00:00:00            nginx: master process nginx -g daemon off;
systemd+            12401               12345               0                   14:15               ?                   00:00:00            nginx: worker process

Isso mostra todos os processos em execução dentro do container, seus PIDs e o uso de recursos.

Criando um Novo Container para Comparação

Vamos criar outro container para comparar com o nosso existente:

docker run --name redis-server -d redis

Agora vamos comparar as estatísticas de ambos os containers:

docker stats --no-stream my-nginx redis-server

Você deve ver as estatísticas de ambos os containers, permitindo que você compare o uso de recursos deles.

Esses comandos de monitoramento avançados fornecem insights mais profundos sobre a saúde e o desempenho de seus containers, o que é essencial para solucionar problemas e otimizar o uso de recursos.

Gerenciando o Ciclo de Vida do Container

Entender como gerenciar o ciclo de vida de um container é crucial para o uso eficaz do Docker. Nesta etapa, exploraremos vários comandos para controlar os estados do container e entender o ciclo de vida do container.

Estados do Ciclo de Vida do Container

Um container Docker pode existir em vários estados:

  • Created (Criado): Container criado, mas não iniciado
  • Running (Em execução): Container está atualmente em execução
  • Paused (Pausado): A execução do container está pausada
  • Stopped (Parado): Container está parado, mas ainda existe
  • Removed (Removido): Container é excluído

Vamos explorar como fazer a transição entre esses estados.

Criando um Container sem Iniciá-lo

Você pode criar um container sem iniciá-lo usando o comando create:

docker create --name test-container nginx

Isso cria um container, mas não o inicia. Verifique seu status:

docker ps -a

Você deve ver o novo container com o status "Created" (Criado):

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS                  NAMES
3f4ab92d1234   nginx     "/docker-entrypoint.…"   5 seconds ago    Created                                            test-container
a72369167c21   nginx     "/docker-entrypoint.…"   40 minutes ago   Up 30 minutes               0.0.0.0:8080->80/tcp   my-nginx
bc123def456a   redis     "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes               6379/tcp               redis-server

Iniciando um Container Criado

Para iniciar o container criado:

docker start test-container

Verifique se ele está em execução:

docker ps

Pausando e Despausando Containers

O Docker permite que você pause um container, o que congela todos os processos dentro dele:

docker pause test-container

Verifique seu status:

docker ps

Saída:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                  PORTS                  NAMES
3f4ab92d1234   nginx     "/docker-entrypoint.…"   2 minutes ago    Up 1 minute (Paused)                           test-container
a72369167c21   nginx     "/docker-entrypoint.…"   42 minutes ago   Up 32 minutes           0.0.0.0:8080->80/tcp   my-nginx
bc123def456a   redis     "docker-entrypoint.s…"   12 minutes ago   Up 12 minutes           6379/tcp               redis-server

Para retomar o container:

docker unpause test-container

Verifique se ele está em execução novamente:

docker ps

Parando e Reiniciando Containers

Para parar um container graciosamente (enviando SIGTERM, depois SIGKILL após um período de carência):

docker stop test-container

Para matar um container à força (enviando SIGKILL):

docker start test-container ## Start it again first
docker kill test-container  ## Then kill it

Para reiniciar um container (para e inicia novamente):

docker start test-container ## Start it again first
docker restart test-container

Removendo Containers

Para remover um container parado:

docker stop test-container ## Make sure it's stopped first
docker rm test-container

Verifique se ele foi removido:

docker ps -a | grep test-container

Você não deve obter nenhuma saída, indicando que o container foi removido.

Removendo um Container em Execução

Você pode remover à força um container em execução:

docker run --name temp-container -d nginx
docker rm -f temp-container

Políticas de Reinício do Container

O Docker permite que você defina políticas de reinício para containers:

docker run --name always-restart --restart always -d nginx

Este container reiniciará automaticamente se sair ou se o Docker reiniciar.

Verifique a política de reinício:

docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' always-restart

Saída:

always

Vamos parar e remover este container:

docker rm -f always-restart

Entender esses comandos do ciclo de vida oferece controle total sobre seus containers Docker, permitindo que você gerencie eficientemente seus estados com base nas necessidades de sua aplicação.

Solucionando Problemas de Containers

Mesmo com monitoramento e gerenciamento adequados, os containers podem, às vezes, encontrar problemas. Esta etapa ensinará como solucionar problemas comuns de containers usando as ferramentas de diagnóstico do Docker.

Problemas Comuns de Containers

Os containers podem falhar por vários motivos:

  • Falhas de aplicação
  • Limitações de recursos
  • Problemas de configuração
  • Problemas de rede
  • Erros de permissão

Vamos explorar como identificar e diagnosticar esses problemas.

Criando um Container Problemático

Vamos criar um container que sairá imediatamente devido a um comando inválido:

docker run --name problematic -d nginx sleep 5

Este container executará o comando sleep 5 e, em seguida, sairá após 5 segundos.

Aguarde alguns segundos e, em seguida, verifique seu status:

docker ps -a

Saída:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS                  NAMES
1a2b3c4d5e6f   nginx     "sleep 5"                10 seconds ago   Exited (0) 5 seconds ago                           problematic
a72369167c21   nginx     "/docker-entrypoint.…"   1 hour ago       Up 50 minutes               0.0.0.0:8080->80/tcp   my-nginx
bc123def456a   redis     "docker-entrypoint.s…"   30 minutes ago   Up 30 minutes               6379/tcp               redis-server

O container saiu com o código 0 (sucesso), mas não está mais em execução.

Verificando os Códigos de Saída do Container

O código de saída pode informar por que um container parou:

  • 0: Sucesso
  • Diferente de zero: Ocorreu um erro

Para ver o código de saída:

docker inspect problematic --format='{{.State.ExitCode}}'

Saída:

0

Isso significa que o container saiu com sucesso após concluir sua tarefa atribuída.

Examinando os Logs do Container

Os logs são cruciais para solucionar problemas:

docker logs problematic

Neste caso, você pode não ver nenhuma saída porque nosso comando sleep não produz logs.

Vamos criar outro container problemático que gerará logs:

docker run --name crash-test -d nginx sh -c "echo 'Starting container'; sleep 2; echo 'About to crash'; exit 1"

Após alguns segundos, verifique seu status e logs:

docker ps -a | grep crash-test

Saída:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS     NAMES
f1e2d3c4b5a6   nginx     "sh -c 'echo 'Starti…"   10 seconds ago   Exited (1) 7 seconds ago              crash-test

Agora verifique os logs:

docker logs crash-test

Saída:

Starting container
About to crash

Esses logs fornecem pistas sobre o que aconteceu antes da falha do container.

Verificando o Uso de Recursos

Restrições de recursos podem fazer com que os containers falhem ou tenham um desempenho ruim:

docker stats --no-stream my-nginx

Isso mostra o uso de CPU, memória e I/O, o que pode ajudar a identificar gargalos de recursos.

Verificando a Configuração do Container

Configuração incorreta é uma fonte comum de problemas:

docker inspect my-nginx

Procure por:

  • Montagens de volume
  • Variáveis de ambiente
  • Configurações de rede
  • Limites de recursos

Acessando um Container em Execução

Para depurar problemas dentro de um container em execução:

docker exec -it my-nginx bash

Isso fornece um shell dentro do container, onde você pode executar comandos para diagnosticar problemas:

ls -la
ps aux
cat /etc/nginx/nginx.conf
exit ## To leave the container shell

Limpeza

Vamos limpar nossos containers problemáticos:

docker rm problematic crash-test

Ao dominar essas técnicas de solução de problemas, você pode identificar e resolver rapidamente problemas com seus containers Docker, garantindo que seus aplicativos sejam executados de forma suave e confiável.

Resumo

Neste laboratório prático, você adquiriu habilidades essenciais para monitorar e gerenciar containers Docker:

  1. Criando e Executando Containers - Você aprendeu a criar e executar containers Docker usando o comando docker run.

  2. Verificação de Status Básico - Você dominou o comando docker ps para listar os containers em execução e verificar suas informações básicas de status.

  3. Monitoramento Avançado - Você explorou técnicas avançadas de monitoramento usando docker inspect e docker stats para obter informações detalhadas do container e métricas de desempenho em tempo real.

  4. Gerenciamento do Ciclo de Vida do Container - Você aprendeu a gerenciar o ciclo de vida completo de um container, incluindo a criação, inicialização, parada, pausa e remoção de containers.

  5. Solução de Problemas - Você desenvolveu habilidades para diagnosticar e resolver problemas comuns de containers usando logs, monitoramento de recursos e acesso direto ao container.

Essas habilidades são fundamentais para trabalhar efetivamente com containers Docker em ambientes de desenvolvimento, teste e produção. Agora você pode monitorar com confiança a integridade de seus containers, gerenciar seu ciclo de vida e solucionar problemas quando eles surgirem.

Para continuar sua jornada no Docker, considere explorar tópicos como Docker Compose para aplicações multi-container, rede Docker e orquestração de containers com Kubernetes.