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.
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
nginxdo 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:
Criando e Executando Containers - Você aprendeu a criar e executar containers Docker usando o comando
docker run.Verificação de Status Básico - Você dominou o comando
docker pspara listar os containers em execução e verificar suas informações básicas de status.Monitoramento Avançado - Você explorou técnicas avançadas de monitoramento usando
docker inspectedocker statspara obter informações detalhadas do container e métricas de desempenho em tempo real.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.
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.



