Docker イメージレイヤーを調査する docker history コマンドの使い方

DockerDockerBeginner
今すぐ練習

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

はじめに

この実験では、Docker イメージのレイヤーを調査するためにdocker historyコマンドを使用する方法を学びます。イメージレイヤーとその作成コマンドを理解することは、Docker イメージのデバッグや最適化において非常に重要です。

まず基本的なイメージの履歴を表示し、次に出力の切り捨てを無効にして完全なコマンドを確認する方法、そして簡潔な表示のための quiet 出力モードについて学びます。さらに、Go テンプレートを使用して履歴出力をフォーマットしカスタマイズされたレポートを作成する方法や、特定のプラットフォーム向けにビルドされたイメージの履歴を表示する方法についても学習します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/inspect -.-> lab-555153{{"Docker イメージレイヤーを調査する docker history コマンドの使い方"}} docker/pull -.-> lab-555153{{"Docker イメージレイヤーを調査する docker history コマンドの使い方"}} docker/images -.-> lab-555153{{"Docker イメージレイヤーを調査する docker history コマンドの使い方"}} end

Docker イメージの履歴を表示する

このステップでは、Docker イメージの履歴を表示する方法を学びます。イメージの履歴は、イメージを構成するレイヤーと各レイヤーを作成するために使用されたコマンドを表示します。これはイメージの構築方法を理解したり、問題をデバッグしたりするのに役立ちます。

まず、調査対象となる Docker イメージをプルしましょう。この例ではubuntuイメージを使用します。

docker pull ubuntu

イメージがプルされていることを示す出力が表示されるはずです。プルが完了したら、docker historyコマンドの後にイメージ名または ID を指定してイメージの履歴を表示できます。

docker history ubuntu

docker historyコマンドの出力には、以下の列を含むテーブルが表示されます:

  • IMAGE: イメージレイヤーの ID
  • CREATED: レイヤーが作成された時間
  • CREATED BY: レイヤー作成に使用されたコマンド
  • SIZE: レイヤーのサイズ
  • COMMENT: レイヤーに関連付けられたコメント

この履歴により、ubuntuイメージを構築するために実行された各コマンドとその結果として作成されたレイヤーを遡って確認できます。

切り捨てなしで履歴を表示する

前のステップでは、ubuntuイメージの履歴を表示しました。特にCREATED BY列のコマンドが一部切り捨てられていることに気づいたかもしれません。これは出力を簡潔に保つためのdocker historyのデフォルト動作です。

切り捨てずに完全な出力を表示するには、docker historyコマンドに--no-truncフラグを追加します。

ubuntuイメージで試してみましょう。

docker history --no-trunc ubuntu

これで、ubuntuイメージの各レイヤー作成に使用された完全なコマンドが表示されます。特に長いビルドコマンドを持つ複雑なイメージの場合、レイヤーがどのように構築されたかの正確な詳細を確認するのに非常に役立ちます。

このコマンドの出力と前のステップの出力を比較し、CREATED BY列の違いを確認してください。

簡潔モードで履歴を表示する

前のステップでは、各レイヤー作成に使用されたコマンドを含むubuntuイメージの詳細な履歴を確認しました。場合によっては、他の情報なしでレイヤーのイメージ ID のみを知りたいこともあるでしょう。

レイヤーのイメージ ID のみを表示する簡潔な出力を見るには、docker historyコマンドに-qまたは--quietフラグを追加します。

ubuntuイメージの履歴を簡潔モードで表示してみましょう。

docker history -q ubuntu

これで出力はレイヤーのイメージ ID のみが 1 行ずつ表示されます。スクリプト作成などで素早くレイヤーID のリストを取得したい場合に便利です。

この出力と以前の出力を比較し、-qフラグが表示情報をどのように簡略化するか確認してください。

Go テンプレートを使用した履歴出力のフォーマット

デフォルト形式や簡潔モードに加えて、docker historyコマンドでは Go テンプレートを使用して出力をフォーマットすることができます。これにより、表示する情報とその表示方法を細かく制御できます。

--formatフラグを使用して Go テンプレートを指定します。テンプレート構文を使用してイメージ履歴の様々なフィールドにアクセス可能です。主なフィールドには.ID.Created.CreatedBy.Size.Commentなどがあります。

イメージ ID とレイヤー作成コマンドのみをタブ区切りで表示するフォーマットを試してみましょう。

docker history --format "{{.ID}}\t{{.CreatedBy}}" ubuntu

このテンプレートでは:

  • {{.ID}}はレイヤーのイメージ ID を参照します
  • \tは区切り文字としてのタブです
  • {{.CreatedBy}}はレイヤー作成に使用されたコマンドを参照します

サイズを含めるなど、必要な出力を得るために様々なフィールドやフォーマットを試すことができます。例えば:

docker history --format "{{.ID}}\t{{.Size}}\t{{.CreatedBy}}" ubuntu

Go テンプレートを使用することで、スクリプト作成やレポート作成のためにイメージ履歴から特定の情報を抽出する強力な方法を提供します。

特定プラットフォームの履歴を表示する

Docker イメージは異なるアーキテクチャやオペレーティングシステム向けにビルドできます。複数のプラットフォームで利用可能なイメージの場合、特定のプラットフォーム向けの履歴を確認したい場合があります。

docker historyコマンドでは、--platformフラグを使用してターゲットプラットフォームを指定できます。プラットフォームの形式は通常os/architectureです。例えば、linux/amd64linux/arm64などがあります。

ubuntuイメージのlinux/amd64プラットフォーム向けの履歴を表示してみましょう。

docker history --platform linux/amd64 ubuntu

この出力には、linux/amd64アーキテクチャ向けにビルドされたubuntuイメージの履歴が表示されます。指定したプラットフォームでイメージが利用できない場合、エラーが表示されるか、イメージのビルド方法によっては異なる履歴が表示される可能性があります。

これは特にマルチアーキテクチャイメージを扱う際に、特定のターゲット環境向けのビルドプロセスを調査する必要がある場合に非常に便利です。

まとめ

この実験では、Docker イメージのレイヤーを調査するためにdocker historyコマンドを使用する方法を学びました。まずubuntuイメージをプルし、その履歴を表示しました。これにより、各レイヤーのイメージ ID、作成時間、作成に使用されたコマンド、サイズなどの情報が確認でき、イメージのビルドプロセスを明確に把握できます。

次に、docker historyの出力を変更するオプションを探求しました。--no-truncフラグを使用して出力の切り捨てを無効にし、各レイヤーのビルドに使用された完全なコマンドを表示する方法を学びました。これはイメージ作成の正確な手順を理解する上で重要です。また、-qフラグを使用してイメージ ID のみを表示する簡潔な出力表示、Go テンプレートによるカスタマイズ可能な出力フォーマット、--platformフラグを使用した特定プラットフォーム向けの履歴表示についても学習しました。