Como usar o docker buildx history trace para visualizar rastreamentos de construção

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar docker buildx history trace para visualizar e analisar os rastreios de construção (build traces) de suas imagens Docker. Você começará construindo uma imagem Docker simples e registrando seu histórico de construção usando comandos Docker padrão.

Após a construção inicial, você explorará como listar os registros de histórico de construção registrados e, em seguida, se aprofundará na visualização do rastreio OpenTelemetry detalhado de um registro de construção específico. Finalmente, você aprenderá como comparar os rastreios de dois registros de construção diferentes, fornecendo informações valiosas sobre o processo de construção e possíveis otimizações.

Construir uma imagem e registrar seu histórico

Nesta etapa, você aprenderá como construir uma imagem Docker e registrar seu histórico de construção. As imagens Docker são construídas a partir de um Dockerfile, que é um arquivo de texto que contém todos os comandos que um usuário pode chamar na linha de comando para montar uma imagem.

Primeiro, vamos criar um Dockerfile simples. Navegue para o diretório ~/project se você ainda não estiver lá.

cd ~/project

Agora, crie um arquivo chamado Dockerfile usando o editor nano.

nano Dockerfile

Adicione o seguinte conteúdo ao Dockerfile:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y --no-install-recommends fortune-mod
CMD ["/usr/games/fortune"]

Este Dockerfile começa a partir da imagem Ubuntu mais recente, atualiza a lista de pacotes, instala o pacote fortune-mod e define o comando padrão para executar o programa fortune.

Salve o arquivo e saia do nano (Pressione Ctrl + X, depois Y, depois Enter).

Agora, vamos construir a imagem Docker usando o comando docker build. Vamos marcar a imagem como my-fortune-image e usar o diretório atual (.) como o contexto de construção.

docker build -t my-fortune-image .

Você verá uma saída indicando o processo de construção, incluindo o download da imagem base e a execução do comando apt-get.

Para registrar o histórico de construção, podemos usar o comando docker history. Este comando mostra o histórico de uma imagem.

docker history my-fortune-image

A saída mostrará uma lista de camadas que compõem a imagem, juntamente com o comando usado para criar cada camada, o tamanho da camada e quando ela foi criada. Este histórico é útil para entender como uma imagem foi construída e para depuração.

Listar registros do histórico de construção

Nesta etapa, você aprenderá mais sobre como listar os registros do histórico de construção de uma imagem Docker. Como você viu na etapa anterior, o comando docker history fornece uma visão detalhada das camadas que compõem uma imagem.

Vamos executar o comando docker history novamente para a my-fortune-image que construímos na etapa anterior.

docker history my-fortune-image

A saída exibe várias colunas:

  • IMAGE: O ID da camada da imagem.
  • CREATED: O carimbo de data/hora quando a camada foi criada.
  • CREATED BY: O comando que criou a camada.
  • SIZE: O tamanho da camada.
  • COMMENT: Qualquer comentário associado à camada.

Cada linha na saída representa uma camada na imagem. As camadas são listadas da mais recente (topo) para a mais antiga (base). A imagem base (ubuntu:latest em nosso caso) é a camada inferior.

Você também pode usar a flag -q para mostrar apenas os IDs das imagens.

docker history -q my-fortune-image

Isso pode ser útil se você precisar apenas dos IDs das camadas para scripts ou outros propósitos.

O comando docker history é uma ferramenta poderosa para entender a composição de uma imagem Docker e para depurar problemas relacionados às camadas da imagem.

Visualizar o rastreamento OpenTelemetry de um registro de construção

Nesta etapa, você aprenderá como visualizar o rastreamento OpenTelemetry de um registro de construção Docker. OpenTelemetry é uma coleção de ferramentas, APIs e SDKs usadas para instrumentar, gerar, coletar e exportar dados de telemetria (métricas, logs e rastreamentos) para ajudá-lo a analisar o desempenho e o comportamento do seu software. Docker pode se integrar ao OpenTelemetry para fornecer rastreamentos detalhados do processo de construção.

Para visualizar o rastreamento OpenTelemetry, você precisa habilitar o rastreamento ao construir a imagem. Vamos reconstruir a my-fortune-image com o rastreamento habilitado.

Primeiro, certifique-se de estar no diretório ~/project.

cd ~/project

Agora, construa a imagem novamente, mas desta vez, definiremos a variável de ambiente BUILDKIT_TRACE para habilitar o rastreamento. Também usaremos a flag --progress=plain para ver a saída da construção diretamente.

BUILDKIT_TRACE=trace.json docker build --progress=plain -t my-fortune-image .

Este comando reconstruirá a imagem e salvará os dados de rastreamento OpenTelemetry em um arquivo chamado trace.json no diretório atual.

Após a conclusão da construção, você pode visualizar o conteúdo do arquivo trace.json. Este arquivo contém os dados de rastreamento em formato JSON.

cat trace.json

A saída será um grande objeto JSON contendo informações detalhadas sobre o processo de construção, incluindo a duração de cada etapa, dependências e outros metadados. Esses dados de rastreamento podem ser importados para um backend de rastreamento compatível com OpenTelemetry (como Jaeger ou Zipkin) para visualização e análise.

Embora não estejamos configurando um backend de rastreamento completo neste laboratório, entender como gerar o arquivo de rastreamento é o primeiro passo para aproveitar o OpenTelemetry para análise de construção Docker.

Comparar rastreamentos de dois registros de construção

Nesta etapa, você aprenderá como gerar e comparar rastreamentos OpenTelemetry de dois registros de construção Docker diferentes. Comparar rastreamentos pode ser útil para identificar diferenças de desempenho entre as construções, especialmente após fazer alterações em seu Dockerfile ou ambiente de construção.

Primeiro, certifique-se de estar no diretório ~/project.

cd ~/project

Já temos um arquivo trace.json da construção anterior. Vamos renomeá-lo para trace1.json para mantê-lo.

mv trace.json trace1.json

Agora, vamos fazer uma pequena alteração em nosso Dockerfile e construir a imagem novamente, gerando um segundo arquivo de rastreamento. Adicionaremos uma instrução LABEL simples ao Dockerfile.

Abra o Dockerfile para edição.

nano Dockerfile

Adicione a seguinte linha após a instrução CMD:

LABEL version="1.0"

O Dockerfile atualizado deve ser semelhante a este:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y --no-install-recommends fortune-mod
CMD ["/usr/games/fortune"]
LABEL version="1.0"

Salve o arquivo e saia do nano.

Agora, construa a imagem novamente, gerando um novo arquivo de rastreamento chamado trace2.json.

BUILDKIT_TRACE=trace2.json docker build --progress=plain -t my-fortune-image .

Após a conclusão da construção, você terá dois arquivos de rastreamento: trace1.json e trace2.json.

Embora comparar diretamente os arquivos JSON brutos possa ser desafiador, esses arquivos são projetados para serem consumidos por backends de rastreamento OpenTelemetry. Em um cenário real, você importaria trace1.json e trace2.json em uma ferramenta de visualização de rastreamento (como Jaeger). Essa ferramenta permitiria que você comparasse visualmente as linhas do tempo e os spans das duas construções, facilitando a identificação de diferenças no tempo de execução e a identificação de quais etapas foram afetadas por suas alterações.

Por exemplo, se você visualizasse esses rastreamentos no Jaeger, veria as etapas individuais da construção Docker (como FROM, RUN, CMD, LABEL) como spans. Você poderia então comparar a duração desses spans entre os dois rastreamentos para ver se a adição da instrução LABEL teve algum impacto mensurável no tempo de construção.

Como não temos um backend de rastreamento configurado neste laboratório, simplesmente verificaremos se ambos os arquivos de rastreamento existem.

Resumo

Neste laboratório, você aprendeu como construir uma imagem Docker a partir de um Dockerfile usando o comando docker build, marcando a imagem para fácil identificação. Em seguida, você explorou como visualizar o histórico de construção da imagem criada usando o comando docker history, que fornece informações sobre as camadas e comandos usados durante o processo de construção.

O laboratório guiou você ainda mais sobre como listar registros de histórico de construção com mais detalhes, demonstrando as informações disponíveis através do comando docker history. Você também aprendeu como visualizar o rastreamento OpenTelemetry de um registro de construção específico, permitindo uma análise mais aprofundada do processo de construção. Finalmente, você praticou a comparação dos rastreamentos de dois registros de construção diferentes, o que é útil para entender as mudanças e depurar problemas de construção.