はじめに
この実験では、Docker コンテキストに関する詳細情報を確認するためにdocker context inspectコマンドを使用する方法を学びます。Docker コンテキストは、異なる Docker デーモンへの接続を管理する上で重要です。まず、ローカルデーモンに接続するデフォルトの Docker コンテキストを調査することから始めます。
その後、デモンストレーション用に新しいコンテキストを作成し、docker context inspectを使用して名前を指定してその詳細を確認します。最後に、inspectコマンドの出力を JSON 形式や Go テンプレートを使用するなど異なる方法でフォーマットし、コンテキストに関する特定の情報を抽出する方法を学びます。
デフォルト Docker コンテキストの確認
このステップでは、デフォルトの Docker コンテキストについて確認します。Docker コンテキストは、異なる Docker デーモンへの接続を管理する方法です。デフォルトでは、Docker はdefaultという名前のコンテキストを使用し、これはローカルの Docker デーモンに接続します。
デフォルトの Docker コンテキストを調査するには、docker context inspectコマンドの後にコンテキスト名を指定します。
docker context inspect default
このコマンドは、defaultコンテキストに関する詳細情報(エンドポイント、タイプ、その他の設定詳細など)を JSON 形式で出力します。
[
{
"Name": "default",
"Current": true,
"Endpoint": {
"Docker": {
"Host": "unix:///var/run/docker.sock"
}
},
"Metadata": {},
"Storage": "meta/contexts/default"
}
]
出力結果から、defaultコンテキストが現在のコンテキスト("Current": true)であり、そのエンドポイントが Linux システム上の Docker デーモン向けのデフォルト Unix ソケットであるunix:///var/run/docker.sockに設定されていることがわかります。
デモ用の新しいコンテキスト作成
このステップでは、新しい Docker コンテキストを作成します。新しいコンテキストを作成することで、リモートマシン上の Docker デーモンや同一マシン上の異なる設定への接続を定義できます。このデモでは、ローカルの Docker デーモンを指すが名前だけが異なるコンテキストを作成します。
新しいコンテキストを作成するには、docker context createコマンドの後に新しいコンテキスト名とエンドポイント情報を指定します。ローカルデーモンに接続するため、エンドポイントはデフォルトコンテキストと同じunix:///var/run/docker.sockになります。
my-contextという名前の新しいコンテキストを作成しましょう。
docker context create my-context --docker "host=unix:///var/run/docker.sock"
このコマンドを実行すると、コンテキストが作成されたことを示す出力が表示されます。
my-context
これにより、ローカル Docker デーモンを指すmy-contextという名前の新しいコンテキストが正常に作成されたことが確認できます。
名前で新規作成したコンテキストを検査
前のステップで、my-contextという名前の新しい Docker コンテキストを作成しました。ここでは、この新しく作成したコンテキストの詳細を確認します。デフォルトコンテキストの調査と同様に、docker context inspectコマンドを使用しますが、今回は新しいコンテキスト名を指定します。
docker context inspect my-context
このコマンドは、先ほど作成したmy-contextの設定詳細を表示します。出力は再び JSON 形式になります。
[
{
"Name": "my-context",
"Current": false,
"Endpoint": {
"Docker": {
"Host": "unix:///var/run/docker.sock"
}
},
"Metadata": {},
"Storage": "meta/contexts/my-context"
}
]
my-contextの出力はdefaultコンテキストと似ていますが、両方ともローカルの Docker デーモンを指しているためです。ただし、my-contextの"Current"フィールドはfalseになっており、これが現在アクティブなコンテキストではないことを示しています。defaultコンテキストが依然としてアクティブな状態です。
コンテキストを検査し JSON 形式で出力
このステップでは、docker context inspectコマンドの出力を明示的に JSON 形式で要求します。デフォルトの出力はすでに JSON 形式ですが、例えば出力を他のツールにパイプして処理する場合など、特に JSON 出力が必要な場合に--format jsonフラグを使用することは良い習慣です。
前のステップで作成したmy-contextを調査し、出力を JSON 形式で表示します。
docker context inspect my-context --format json
このコマンドは前のステップと同じ JSON 出力を生成しますが、--formatフラグを使用して出力形式を指定する方法を明示的に示しています。
[
{
"Name": "my-context",
"Current": false,
"Endpoint": {
"Docker": {
"Host": "unix:///var/run/docker.sock"
}
},
"Metadata": {},
"Storage": "meta/contexts/my-context"
}
]
--format jsonフラグは、Docker コマンドの出力をプログラムで解析したい場合に特に有用です。
Go テンプレートを使用してコンテキストを検査し出力をフォーマット
この最終ステップでは、Go テンプレートを使用してdocker context inspectの出力をフォーマットする方法を探ります。これは強力な機能で、JSON 出力から特定の情報を抽出し、カスタム形式で表示することができます。
my-contextを調査し、Go テンプレートを使用してコンテキスト名と Docker ホストエンドポイントのみを表示します。テンプレート構文では二重波括弧{{ }}で式を囲みます。例えば、コンテキスト名には.Name、Docker ホストエンドポイントには.Endpoint.Docker.Hostのようにドット表記で JSON 出力内のフィールドにアクセスできます。
docker context inspect my-context --format '{{.Name}}: {{.Endpoint.Docker.Host}}'
このコマンドは指定された Go テンプレートを使用して出力をフォーマットします。コンテキスト名とその Docker ホストエンドポイントが表示されます。
my-context: unix:///var/run/docker.sock
この例は、Go テンプレートを使用して Docker コマンドの出力をカスタマイズし、特定のデータを簡単に抽出・処理できることを示しています。
まとめ
この実験では、docker context inspectコマンドを使用して Docker コンテキストの詳細情報を確認する方法を学びました。まず、ローカルの Docker デーモンに接続するデフォルトコンテキストを調査しました。次に、デモンストレーション用にmy-contextという新しいコンテキストを作成し、これもローカルデーモンを指すように設定しました。
さらに、作成した新しいコンテキストを名前で指定して調査する方法を確認しました。最後に、inspectコマンドの出力を JSON 形式や Go テンプレートを使用してフォーマットし、コンテキストの特定情報を抽出・表示する方法を実演しました。



