2 つのビルドレコードのトレースを比較する
このステップでは、2 つの異なる Docker ビルドレコードから OpenTelemetry トレースを生成して比較する方法を学びます。トレースを比較することで、特にDockerfile
やビルド環境に変更を加えた後に、ビルド間のパフォーマンスの違いを特定するのに役立ちます。
まず、~/project
ディレクトリにいることを確認してください。
cd ~/project
前回のビルドからtrace.json
ファイルが既に存在します。これを保持するためにtrace1.json
にリネームしましょう。
mv trace.json trace1.json
次に、Dockerfile
に小さな変更を加えてイメージを再ビルドし、2 つ目のトレースファイルを生成します。Dockerfile
に簡単なLABEL
命令を追加します。
Dockerfile
を編集用に開きます。
nano Dockerfile
CMD
命令の後に以下の行を追加してください:
LABEL version="1.0"
更新後のDockerfile
は以下のようになります:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y --no-install-recommends fortune-mod
CMD ["/usr/games/fortune"]
LABEL version="1.0"
ファイルを保存してnano
を終了します。
次に、イメージを再ビルドし、trace2.json
という新しいトレースファイルを生成します。
BUILDKIT_TRACE=trace2.json docker build --progress=plain -t my-fortune-image .
ビルドが完了すると、trace1.json
とtrace2.json
の 2 つのトレースファイルが得られます。
生の JSON ファイルを直接比較するのは難しい場合がありますが、これらのファイルは OpenTelemetry トレーシングバックエンドで処理されるように設計されています。実際のシナリオでは、trace1.json
とtrace2.json
の両方を Jaeger などのトレーシング可視化ツールにインポートします。このツールを使用すると、2 つのビルドのタイムラインとスパンを視覚的に比較でき、実行時間の違いを簡単に確認したり、変更によって影響を受けたステップを特定したりできます。
例えば、Jaeger でこれらのトレースを表示すると、Docker ビルドの個々のステップ(FROM
、RUN
、CMD
、LABEL
など)がスパンとして表示されます。その後、これらのスパンの所要時間を 2 つのトレース間で比較し、LABEL
命令の追加がビルド時間に測定可能な影響を与えたかどうかを確認できます。
この実験ではトレーシングバックエンドを設定していないため、両方のトレースファイルが存在することを確認するだけに留めます。