docker inspect コマンドを使って詳細情報を取得する方法

DockerDockerBeginner
今すぐ練習

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

はじめに

この実験では、docker inspect コマンドを効果的に使用して、Docker オブジェクト、特にコンテナに関する詳細情報を取得する方法を学びます。まず、コンテナをインスペクトし、このコマンドが提供する包括的なデフォルトの JSON 出力を理解します。

これを基に、Go テンプレートを使用して出力をフォーマットし、コンテナの IP アドレスなどの特定のデータポイントを抽出する方法を探ります。この実験では、コンテナのサイズをインスペクトする方法も説明し、コンテナ以外のさまざまな種類の Docker オブジェクトをインスペクトする方法を実演します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-555165{{"docker inspect コマンドを使って詳細情報を取得する方法"}} docker/ps -.-> lab-555165{{"docker inspect コマンドを使って詳細情報を取得する方法"}} docker/inspect -.-> lab-555165{{"docker inspect コマンドを使って詳細情報を取得する方法"}} docker/pull -.-> lab-555165{{"docker inspect コマンドを使って詳細情報を取得する方法"}} docker/images -.-> lab-555165{{"docker inspect コマンドを使って詳細情報を取得する方法"}} docker/volume -.-> lab-555165{{"docker inspect コマンドを使って詳細情報を取得する方法"}} docker/network -.-> lab-555165{{"docker inspect コマンドを使って詳細情報を取得する方法"}} end

コンテナをインスペクトし、デフォルト出力を理解する

このステップでは、Docker コンテナをインスペクトし、デフォルト出力を理解する方法を学びます。docker inspect コマンドは、コンテナ、イメージ、ネットワーク、ボリュームなどの Docker オブジェクトに関する詳細情報を提供します。デフォルトでは、構成詳細、状態、その他のメタデータを含む JSON 配列を返します。

まず、操作対象となるシンプルなイメージを取得しましょう。hello-world イメージを使用します。

docker pull hello-world

イメージが取得され、展開されていることを示す出力が表示されるはずです。

次に、このイメージからコンテナを実行しましょう。

docker run hello-world

このコマンドは hello-world コンテナを実行し、メッセージを表示してから終了します。

実行したばかりのコンテナをインスペクトするには、その ID または名前が必要です。docker ps -a を使用して、最後に終了したコンテナの ID を見つけることができます。

docker ps -a

hello-world イメージのコンテナを探し、その CONTAINER ID をコピーします。

次に、コピーしたコンテナ ID を指定して docker inspect コマンドを実行します。<container_id> を実際の ID に置き換えてください。

docker inspect <container_id>

このコマンドは、コンテナに関する詳細情報を含む大きな JSON ドキュメントを出力します。このデフォルト出力には、コンテナの状態、構成、ネットワーク設定、マウントされたボリュームなど、幅広いデータが含まれています。この出力を理解することは、コンテナのデバッグや管理に不可欠です。

出力をスクロールして、利用可能な情報の概要を把握しましょう。IdStateCreatedPathArgsConfigNetworkSettings などのフィールドが表示されます。

出力をフォーマットして特定の情報を取得する

前のステップでは、docker inspect が大量の情報を JSON 形式で提供することを見ました。多くの場合、特定の情報のみが必要になります。Docker では、--format フラグと Go テンプレートを使用して出力をフォーマットすることができます。

実行中のコンテナの IP アドレスを取得しましょう。まず、実行中のコンテナが必要です。ここでは、シンプルな nginx コンテナを使用します。

nginx イメージを取得します。

docker pull nginx

nginx コンテナをデタッチドモード (-d) で実行して、バックグラウンドで動作させます。

docker run -d nginx

このコマンドはコンテナ ID を出力します。この ID をコピーしてください。

次に、--format フラグを使用した docker inspect でコンテナの IP アドレスを取得します。<container_id> を実行中の nginx コンテナの ID に置き換えてください。

docker inspect --format='{{.NetworkSettings.IPAddress}}' <container_id>

--format フラグは Go テンプレート構文を使用します。. はトップレベルの JSON オブジェクトを指します。ドット表記を使用して JSON 構造をたどります。.NetworkSettingsNetworkSettings オブジェクトにアクセスし、.IPAddressNetworkSettings 内の IPAddress フィールドにアクセスします。二重の中括弧 {{ }} は Go テンプレートアクションを示します。

コンテナの IP アドレスがコンソールに表示されるはずです。

同様にして、他の情報も抽出することができます。たとえば、コンテナの状態を取得するには、次のようにします。

docker inspect --format='{{.State.Status}}' <container_id>

これにより、コンテナの現在の状態(例:"running")が出力されます。

コンテナの名前を取得するには、次のようにします。

docker inspect --format='{{.Name}}' <container_id>

これにより、コンテナの名前(例:/vigilant_goldberg)が出力されます。

フォーマット文字列で複数のフィールドを組み合わせることもできます。たとえば、コンテナ ID とその状態を取得するには、次のようにします。

docker inspect --format='ID: {{.Id}}, Status: {{.State.Status}}' <container_id>

これにより、ID と状態がより読みやすい形式で表示されます。

前のステップで見た JSON 出力のさまざまなフィールドを試して、必要な情報を抽出してみてください。

コンテナのサイズをインスペクトする

このステップでは、Docker コンテナのサイズをインスペクトする方法を学びます。コンテナのサイズを理解することは、ディスクスペースの管理やイメージビルドの最適化に重要です。

docker inspect コマンドでコンテナのサイズに関する情報を取得できますが、実行中のコンテナのサイズを確認するより直接的な方法は、--size フラグを付けて docker ps コマンドを使用することです。

まず、実行中のコンテナがあることを確認してください。前のステップで実行した nginx コンテナがまだ実行中であれば、それを使用できます。実行中でない場合は、再度実行します。

docker run -d nginx

次に、実行中のコンテナを一覧表示し、それらのサイズ情報を含めます。

docker ps --size

SIZE というラベルの付いた追加の列が表示されます。この列には 2 つの値が表示されます。仮想サイズとディスク上のサイズです。

  • 仮想サイズ (Virtual Size): これは、コンテナのイメージレイヤーの合計サイズにコンテナの書き込み可能レイヤーのサイズを加えたものです。
  • サイズ (Size): これは、ディスク上のコンテナの書き込み可能レイヤーのサイズです。このレイヤーには、コンテナが起動してからファイルシステムに加えられたすべての変更が含まれています。

終了したコンテナのサイズを確認するには、docker ps -a --size を使用します。

docker ps -a --size

docker inspect を使用して出力をフォーマットすることでもサイズ情報を取得できます。サイズ情報は .SizeRw(書き込み可能レイヤーのサイズ)と .SizeRootFs(イメージレイヤーを含む合計サイズ)の下にあります。

<container_id> をコンテナの ID に置き換えます。

docker inspect --format='Writable Layer Size: {{.SizeRw}}, Total Size: {{.SizeRootFs}}' <container_id>

このコマンドは、書き込み可能レイヤーのサイズとコンテナのルートファイルシステムの合計サイズを出力します。

仮想サイズとディスク上のサイズの違いを理解することは重要です。仮想サイズには共有イメージレイヤーが含まれますが、実行中のコンテナのディスク上のサイズは主に、その特定のコンテナの書き込み可能レイヤーに書き込まれた固有のデータを反映しています。

特定のタイプのオブジェクトをインスペクトする

前のステップでは、コンテナに対して docker inspect を使用しました。しかし、docker inspect は汎用的なコマンドで、イメージ、ネットワーク、ボリュームなど、さまざまな Docker オブジェクトをインスペクトするために使用できます。

コンテナ以外のオブジェクトをインスペクトするには、オブジェクトの名前または ID の前にオブジェクトのタイプを指定する必要があります。構文は docker inspect <object_type> <object_name_or_id> です。

先ほど取得した nginx イメージをインスペクトしてみましょう。

まず、イメージを一覧表示して、イメージ ID または名前を取得します。

docker images

nginx イメージを見つけて、その REPOSITORY、TAG、または IMAGE ID をメモしておきます。

次に、nginx イメージをインスペクトします。イメージ名とタグ(例:nginx:latest)またはイメージ ID を使用できます。<image_name_or_id> を適切な値に置き換えてください。

docker inspect image <image_name_or_id>

これにより、nginx イメージに関する詳細情報が出力されます。レイヤー、設定、メタデータなどが含まれます。出力の構造はコンテナをインスペクトする場合と異なり、イメージのプロパティを反映していることに注意してください。

次に、Docker ネットワークをインスペクトしてみましょう。Docker はデフォルトのネットワークを作成します。docker network ls を使用して一覧表示できます。

docker network ls

おそらく bridgehostnone などのネットワークが表示されるでしょう。bridge ネットワークをインスペクトしてみましょう。

docker inspect network bridge

このコマンドは、bridge ネットワークに関する詳細情報を表示します。設定、接続されているコンテナ、IP アドレス情報などが含まれます。

最後に、Docker ボリュームをインスペクトしてみましょう。ボリュームがない場合は、作成することができます。

docker volume create myvolume

次に、作成したばかりのボリュームをインスペクトします。

docker inspect volume myvolume

これにより、myvolume に関する情報が表示されます。ドライバー、マウントポイント、スコープなどが含まれます。

オブジェクトのタイプ(containerimagenetworkvolume など)を指定することで、docker inspect を使用して Docker 環境のさまざまなコンポーネントに関する詳細情報を取得できます。

まとめ

この実験では、docker inspect コマンドを使用して Docker コンテナに関する詳細情報を取得する方法を学びました。まず、コンテナをインスペクトし、幅広い設定や状態の詳細を提供する包括的なデフォルトの JSON 出力を理解しました。

その後、--format フラグと Go テンプレートを使用して出力をフォーマットし、コンテナの IP アドレスなどの特定の情報を抽出する方法を調べました。これは、docker inspect が出力を必要に合わせてカスタマイズする際の柔軟性を示しています。