docker buildx history logs コマンドでビルドログを確認する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Docker ビルドのログを確認するためにdocker buildx history logsコマンドを使用する方法を学びます。まず Docker イメージをビルドし、その履歴を調査してビルドプロセスを理解し、ビルド参照(build reference)を特定します。

次に、そのビルド参照を使用して特定のビルドの詳細ログを取得・表示します。最後に、異なる進捗出力タイプでこれらのビルドログを表示する方法を探求し、ビルド実行の洞察を得るとともに、潜在的な問題のトラブルシューティングを行います。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/logs -.-> lab-555052{{"docker buildx history logs コマンドでビルドログを確認する方法"}} docker/images -.-> lab-555052{{"docker buildx history logs コマンドでビルドログを確認する方法"}} docker/build -.-> lab-555052{{"docker buildx history logs コマンドでビルドログを確認する方法"}} end

イメージのビルドと履歴の確認

このステップでは、Dockerfile から Docker イメージをビルドし、その履歴を確認する方法を学びます。履歴にはイメージを構成するレイヤーと、各レイヤーを作成するために使用されたコマンドが表示されます。

まず、~/projectディレクトリに簡単な Dockerfile を作成しましょう。この Dockerfile はubuntuイメージをベースにcurlパッケージをインストールするイメージを作成します。

cd ~/project
nano Dockerfile

Dockerfileに以下の内容を追加します:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl

ファイルを保存してエディタを終了します(Ctrl+X、Y、Enter)。

次に、docker buildコマンドを使用して Docker イメージをビルドします。イメージにはmy-ubuntu-curlという名前とlatestタグを付けます。コマンド末尾の.は Dockerfile が現在のディレクトリにあることを示します。

docker build -t my-ubuntu-curl:latest .

ビルドプロセスを示す出力が表示され、Dockerfile で定義された各ステップが実行される様子が確認できます。

ビルドが完了したら、docker historyコマンドを使用してイメージの履歴を確認できます。

docker history my-ubuntu-curl:latest

出力には各レイヤーに関する情報(レイヤーID、作成時間、サイズ、作成に使用されたコマンドなど)が表形式で表示されます。この履歴はイメージのビルド方法を理解したり、デバッグを行ったりする際に役立ちます。

履歴からビルド参照を特定する

前のステップでは、Docker イメージをビルドし、その履歴を確認しました。履歴の出力には「BUILD REFERENCE」列が含まれています。この参照は、イメージを作成したビルドプロセスの一意の識別子です。イメージ ID とは異なり、ビルド自体に関連するもので、結果として生成されるイメージレイヤーとは別のものです。

ビルド参照を特定するためにもう一度履歴を確認しましょう。

docker history my-ubuntu-curl:latest

出力の中で、ビルドプロセスに対応する行を探してください。通常は最初の行(ベースイメージレイヤーを除く)で、「BUILD REFERENCE」列に値が表示されます。この値は長い文字列です。

例えば、出力は次のようになる場合があります(実際の値は異なります):

IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT   BUILD REFERENCE
a1b2c3d4e5f6   2 hours ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
g7h8i9j0k1l2   2 hours ago    /bin/sh -c #(nop) ADD file:abcdef1234567890...   73.9MB
m3n4o5p6q7r8   2 hours ago    /bin/sh -c apt-get update && apt-get install...   30MB      buildkit.dockerfile.v0   buildkit:abcdef1234567890abcdef1234567890

この例では、ビルド参照はbuildkit:abcdef1234567890abcdef1234567890です。ビルド参照はbuildkit:で始まり、その後に一意の識別子が続くことが多いことに注意してください。

次のステップで特定のビルドプロセスのログを確認するためには、このビルド参照が必要になります。出力からビルド参照をコピーしてください。

ビルド参照を使用して特定のビルドログを確認する

前のステップで、イメージ履歴からビルド参照を特定しました。このビルド参照を使用すると、その特定のビルドプロセスの詳細なログを確認できます。これはビルド失敗のデバッグや、ビルド中に生成された正確な出力を理解するのに特に役立ちます。

特定のビルドログを確認するには、docker buildx logsコマンドの後にビルド参照を指定します。YOUR_BUILD_REFERENCEは前のステップで見つけた実際のビルド参照に置き換えてください。

docker buildx logs YOUR_BUILD_REFERENCE

例えば、ビルド参照がbuildkit:abcdef1234567890abcdef1234567890の場合、コマンドは次のようになります:

docker buildx logs buildkit:abcdef1234567890abcdef1234567890

このコマンドを実行すると、ビルドプロセスの完全な出力が表示されます。Dockerfile 内の各RUN命令の出力を含み、イメージビルド中に実行されたapt-get updateapt-get install -y curlの出力が確認できます。

これは、docker buildコマンド実行時に表示される概要と比べて、ビルドプロセスをより詳細に把握することができます。

異なる進捗出力タイプでログを確認する

このステップでは、Docker イメージをビルドする際の進捗出力をさまざまな方法で確認します。docker buildコマンドは、ビルド進捗の表示方法を制御する複数のオプションを提供しています。

デフォルトでは、docker buildは各ステップの実行状況を表示する進捗出力を使用します。デフォルトの出力を再度確認するために、イメージをリビルドしてみましょう。

docker build -t my-ubuntu-curl:latest .

"Step 1/2"、"Step 2/2"といったステップや、RUNコマンドからの出力など、おなじみの出力が表示されます。

次に、--progressフラグを使用して異なる進捗出力タイプを試してみましょう。plain出力タイプは、ビルドプロセスをより詳細な行ごとの形式で表示します。これは、プログレスバーなしで実行されている正確なコマンドとその出力を確認するのに役立ちます。

docker build --progress=plain -t my-ubuntu-curl:latest .

このコマンドの出力をデフォルトの出力と比較してください。ビルド中に行われた各アクションのより詳細なログが確認できます。

もう 1 つの便利な進捗出力タイプはttyです。これはターミナルで対話的にビルドする際のデフォルトで、動的なプログレスバーを提供します。ただし、明示的に指定することで特定のスクリプトシナリオで有用です。

docker build --progress=tty -t my-ubuntu-curl:latest .

最初のビルドと同様に、対話型のプログレスバーが再び表示されるはずです。

これらの異なる進捗出力タイプを理解することで、簡潔なサマリーが必要な場合やデバッグのための詳細なログが必要な場合など、Docker ビルドを監視する最適な方法を選択できるようになります。

まとめ

この実験では、Dockerfile から Docker イメージをビルドし、docker builddocker historyコマンドを使用してその履歴を確認する方法を学びました。シンプルな Dockerfile を作成し、my-ubuntu-curl:latestというタグ付きのイメージをビルドし、ビルドプロセスに関連するレイヤーとコマンドを理解するために履歴出力を調査しました。

その後、docker historyの出力から一意のビルド参照を特定する方法を学びました。このビルド参照は、ビルドログなどの特定のビルド関連情報にアクセスするために重要であり、次のステップでさらに詳しく調査します。