Logs de contêineres

DockerBeginner
Pratique Agora

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 -d para 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+C para 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.