Introdução
Normalmente, os aplicativos executados dentro de contêineres gravam suas mensagens de status e erro na saída padrão e na saída de erro padrão. Esse é um padrão de projeto importante em sistemas conteinerizados: em vez de cada contêiner gerenciar seus próprios arquivos de log complexos, o runtime de contêineres captura esse fluxo e o disponibiliza de forma centralizada.
Essa é uma das razões pelas quais as imagens de contêineres costumam ser criadas de maneira diferente dos softwares tradicionais para servidores. Em plataformas de contêineres, geralmente é preferível gravar informações úteis em stdout/stderr, em vez de ocultar os logs apenas em arquivos locais.
Como desenvolvedor ou administrador de sistemas, acessar esses logs é essencial para entender o que está acontecendo dentro dos contêineres em segundo plano. Em plataformas reais, como o Kubernetes, esse modelo de stdout/stderr também serve de base para pipelines de logging centralizado.
Neste laboratório, você aprenderá a:
- Executar um contêiner que gera uma saída contínua.
- Obter os logs gerados até o momento.
- Acompanhar os logs em tempo real para monitorar o aplicativo enquanto ele é executado.
- Parar o monitoramento com segurança sem interromper o aplicativo.
Iniciar um processo em segundo plano
Nesta etapa, você iniciará um contêiner Docker no modo desanexado. Para simular um aplicativo real, executaremos um script simples que imprime uma mensagem a cada segundo.
Quando você executa um contêiner no modo desanexado, usando a opção -d, ele é executado em segundo plano. Por isso, a saída não aparece imediatamente no seu terminal.
A saída continua existindo; o Docker apenas a captura, em vez de transmiti-la diretamente para a sessão atual do shell.
Execute o comando a seguir para iniciar o contêiner:
docker run -d --name web-log-app alpine sh -c "while true; do echo 'Application is running...'; sleep 1; done"
Detalhando o comando:
docker run -d: inicia o contêiner em segundo plano.--name web-log-app: atribui ao contêiner o nome"web-log-app".alpine: usa a imagem leve"Alpine Linux".sh -c "...": é o comando executado dentro do contêiner. Ele executa um script de shell que realiza um loop infinito (while true), imprime uma mensagem (echo) e faz uma pausa de 1 segundo (sleep 1) a cada iteração.
Verifique se o contêiner está em execução:
docker ps
Você deverá ver web-log-app listado como um contêiner ativo.
Visualizar logs existentes
Como o contêiner está sendo executado em segundo plano, a saída dele fica oculta na visualização atual do terminal. O Docker captura essa saída e permite que você a visualize usando o comando docker logs.
Nesta etapa, você obterá os logs gerados desde o início do contêiner.
Execute o comando a seguir:
docker logs web-log-app
Você verá uma lista de mensagens "Application is running...".
Como funciona:
O comando docker logs recupera todos os logs armazenados até aquele momento e os imprime na tela. Em seguida, ele é encerrado imediatamente, devolvendo você ao prompt de comando. Isso é útil para verificar o histórico de um aplicativo ou confirmar o status de inicialização.
Portanto, docker logs mostra a saída histórica acumulada até o momento; ele não abre um shell interativo dentro do contêiner. Trata-se de uma visualização somente leitura do que o processo principal do contêiner gravou.
Se você executar o comando novamente após alguns segundos, verá uma lista maior, pois o contêiner continua gerando logs em segundo plano.
docker logs web-log-app
Monitorar logs em tempo real
Às vezes, visualizar apenas os logs anteriores não é suficiente. Você pode precisar acompanhar os logs à medida que são gerados para depurar um problema ou monitorar o tráfego em tempo real. Isso é semelhante ao uso do comando tail -f no Linux.
Nesta etapa, você usará a opção -f (follow) para transmitir os logs em tempo real.
Execute o comando a seguir:
docker logs -f web-log-app
O que está acontecendo?
O prompt de comando não retorna. Em vez disso, seu terminal está agora "conectado" ao fluxo de logs do contêiner. Você verá uma nova mensagem "Application is running..." aparecer a cada segundo.
Conceitualmente, isso é semelhante a tail -f, mas a fonte dos dados é o fluxo de logs capturado pelo Docker, e não um arquivo comum que você está lendo diretamente.
Esse modo é extremamente útil para observar o comportamento de um aplicativo enquanto você interage com ele.
Desconectar e limpar
No momento, seu terminal está "preso" acompanhando os logs. O contêiner continua em execução, e o comando docker logs está aguardando novas saídas.
Para parar de acompanhar os logs e retornar ao prompt de comando, você precisa enviar um sinal de interrupção.
Pressione Ctrl+C no teclado.
Conceito importante:
Pressionar Ctrl+C aqui interrompe o comando docker logs (o visualizador), mas não interrompe o contêiner. O contêiner web-log-app continua em execução em segundo plano e gerando logs.
Essa distinção é importante na operação. Observar um contêiner e controlá-lo são ações diferentes, e confundi-las é um erro comum entre iniciantes.
Você pode confirmar isso verificando a lista de processos:
docker ps
Você ainda deverá ver web-log-app na lista.
Limpeza:
Agora que o laboratório terminou, vamos parar e remover o contêiner para liberar recursos. Usaremos docker rm -f, que força a remoção de um contêiner em execução, combinando as ações de parada e remoção.
docker rm -f web-log-app
Resumo
Neste laboratório, você aprendeu os fundamentos do acesso aos logs de contêineres Docker. Você praticou:
- Executar um processo em segundo plano: usar
docker run -dpara manter o terminal livre. - Visualizar logs existentes: usar
docker logs <container_name>para consultar a saída anterior. - Monitorar logs em tempo real: usar
docker logs -f <container_name>para transmitir a saída à medida que ela é gerada. - Desconectar: usar
Ctrl+Cpara parar de visualizar os logs enquanto o aplicativo continua em execução.
Essas habilidades são essenciais para depurar e monitorar aplicativos conteinerizados em qualquer ambiente.



