Comparar traces de dos registros de compilación
En este paso, aprenderás cómo generar y comparar traces de OpenTelemetry de dos registros de compilación Docker diferentes. Comparar traces puede ser útil para identificar diferencias de rendimiento entre compilaciones, especialmente después de realizar cambios en tu Dockerfile
o entorno de compilación.
Primero, asegúrate de estar en el directorio ~/project
.
cd ~/project
Ya tenemos un archivo trace.json
de la compilación anterior. Renombrémoslo a trace1.json
para conservarlo.
mv trace.json trace1.json
Ahora, hagamos un pequeño cambio a nuestro Dockerfile
y compilemos la imagen nuevamente, generando un segundo archivo de trace. Añadiremos una simple instrucción LABEL
al Dockerfile
.
Abre el Dockerfile
para editar.
nano Dockerfile
Añade la siguiente línea después de la instrucción CMD
:
LABEL version="1.0"
El Dockerfile
actualizado debería verse así:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y --no-install-recommends fortune-mod
CMD ["/usr/games/fortune"]
LABEL version="1.0"
Guarda el archivo y sal de nano
.
Ahora, compila la imagen nuevamente, generando un nuevo archivo de trace llamado trace2.json
.
BUILDKIT_TRACE=trace2.json docker build --progress=plain -t my-fortune-image .
Al completarse la compilación, tendrás dos archivos de trace: trace1.json
y trace2.json
.
Aunque comparar directamente los archivos JSON en bruto puede ser complicado, estos archivos están diseñados para ser procesados por backends de tracing OpenTelemetry. En un escenario real, importarías ambos archivos (trace1.json
y trace2.json
) a una herramienta de visualización de tracing (como Jaeger). Esta herramienta te permitiría comparar visualmente las líneas de tiempo y spans de las dos compilaciones, facilitando la identificación de diferencias en el tiempo de ejecución y qué pasos fueron afectados por tus cambios.
Por ejemplo, si visualizaras estos traces en Jaeger, verías los pasos individuales de la compilación Docker (como FROM
, RUN
, CMD
, LABEL
) como spans. Podrías entonces comparar la duración de estos spans entre los dos traces para ver si añadir la instrucción LABEL
tuvo algún impacto medible en el tiempo de compilación.
Como no tenemos un backend de tracing configurado en este laboratorio, simplemente verificaremos que ambos archivos de trace existen.