GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

DockerInspectを使用して拡大鏡をDockerに配置する

Dockerイメージ、コンテナーなどからDockerのすべての主要コンポーネントの詳細ビューを探している場合は、dockerinspectコマンドが最適です。

このチュートリアルでは、デバッグ、トラブルシューティング、または単なる好奇心のために、多くのDockerコンポーネントに関する詳細情報を見つけるための探偵になる方法を学びます。

始めましょう!

前提条件

ステップバイステップでフォローしたい場合は、次のものがあることを確認してください。

  • Docker –このチュートリアルでは、Ubuntu18.04.5LTSでDockerv19.03.11を使用します。
  • ダウンロードして利用可能なDockerイメージ。このチュートリアルでは、DockerHubで利用可能な最新のNGINXDockerイメージを使用します。
  • Dockerホストで実行されている少なくとも1つのコンテナー。

Docker Inspectを使用したDockerイメージの検査

Docker Inspect 多くの異なるDockerコンポーネントに関する情報を提供できますが、最初に最も人気のあるコンポーネントの1つから始めましょう。画像。画像をダウンロードした場合、その画像に関する情報をどのように確認しますか?調べてみましょう。

Dockerホストに少なくとも1つのイメージがあると仮定して、inspectを使用します その画像を照会するコマンド。以下のコマンドは、nginxという画像があることを前提としています。 ホスト上で。

docker image inspect nginx

上記のコマンドを実行すると、その特定の画像に関する多数の情報がJSONを介して返されます。いくつかの注目すべき属性は次のとおりです。

  1. 画像タグ。
  2. 画像が作成された時刻。
  3. Dockerイメージnginxに関連付けられたコンテナのホスト名。
  4. コンテナが外部ネットワークで利用できるようにするネットワークポート。
  5. Dockerイメージnginxに属するコンテナに接続されているボリュームにも気付くでしょう。

Dockerネットワークに関する詳細情報の取得

docker inspect コマンドは、画像やコンテナに関する情報を取得するだけではありません。また、ネットワークにクエリを実行することもできます。 Dockerネットワークを使用すると、コンテナーは、ブリッジネットワーク(プライベートネットワーク)、ホストネットワーク(パブリックネットワーク)、オーバーレイネットワークなど、さまざまな方法で通信できます。

Dockerネットワークを知ることは、アプリケーションの必要に応じていつでも切断してから接続し直すことで、別のDockerネットワークに切り替えることができるため重要です。

まだターミナルにいると仮定します:

1.以下のコマンドを実行します。 docker network ls コマンドは、Dockerに存在するすべてのネットワークを一覧表示します。ネットワークのIDを見つけるには、このコマンドの出力が必要です。

docker network ls

次に、ネットワークIDをdocker inspect networkに渡します 指図。このコマンドは、以下に示すように、特定のネットワークに関するさまざまな情報を返します。

docker inspect network 4748f122c987

1.ネットワークの種類。

2.ネットワークが使用するサブネットアドレス。

3および4。この特定のネットワークを使用しているすべてのコンテナに関する要約情報。

DockerのGoテンプレートとFormatを理解する パラメータ

これまで、追加のオプションパラメータを使用せずにDockerinspectコマンドを使用する方法を学習しました。ただし、出力形式を操作する必要がある場合は、--formatの使用を検討してください。 国旗。 --format パラメータはGoテンプレートを使用して、docker inspectから返された情報をフィルタリングして表示します 。

join、println、tableなど、さまざまな関数がフォーマットフラグとともに使用されます。それらのいくつかについて説明しましょう!

たとえば、特定のコンテナからの出力からいくつかの値を結合したい場合があります。もしそうなら、join コマンドはうまく機能します。以下に、joinが表示されます コマンドは文字列を連結します(nginx, -g, daemon off )各要素が区切り文字(,)で区切られている 。

docker inspect --format '{{join .Args " , "}}' container_id

価値を活用したいですか? upperを使用します コマンド。

docker inspect --format "{{upper .Name}}" container_id

formatの使用例はたくさんあります。 パラメータ。

Dockerコンテナのベースイメージ名を見つける

前のセクションでは、すべてのDockerイメージの詳細ビューを取得する方法を説明しました。これには、それらのイメージを使用するコンテナーも含まれます。しかし、コンテナIDをすでに知っていて、それが作成されたイメージをすばやく見つける必要がある場合はどうでしょうか。コンテナIDをdocker inspectに提供できます 。

特定のコンテナが構築されているイメージの名前を見つけるには、以下のdocker inspectを実行します。 指図。次のコマンドは、コンテナID(8f34d039fa3a)を渡します この場合)docker inspect formatを使用します imageのみを返すパラメータ Configからの値 JSON出力のノード。

# 8f34d039fa3a is the container represented with ContainerID.
docker inspect --format='{{.Config.Image}}' 8f34d039fa3a

Config全体が何であるかを確認できます ノードは以下のようになり、Image 名前の由来。

コンテナのIPアドレス、Macアドレス、およびポートバインディングの検索

コンテナが使用するネットワークを見つける方法はわかっていますが、コンテナが使用するそのネットワーク上のIPアドレスまたはMacアドレス、およびポートバインディングをどのように知ることができますか?ご想像の通り! docker inspect

コンテナが使用するIPアドレスを絞り込むには、コンテナIDをdocker inspectに渡します。 指図。ここでも、formatを使用します 不要なJSONを除外して、探しているものに正確に到達するためのパラメーター。

formatが表示されます 以下のパラメータ引数は、docker inspectに指示します NetworkSettings内に埋め込まれた値を返すためだけに →NetworksIPAddress rangeを使用したJSON属性 属性。 Range属性を使用すると、配列を反復処理して、.を設定できます。 各配列要素の値。

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container

メインのNetworkSettingsが表示されます 下のノードとIPAddress 値はネストされています。

同様に、MACアドレスを見つけるには コンテナのdocker inspectを使用します 以下に示すcontainerコマンド。

繰り返しになりますが、format 以下のパラメータ引数はrangeを使用します 属性ですが、今回はNetworkSettingsをチェックインしてコンテナのMacアドレスを見つけます →NetworksMac address

docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' 3dd206041249

最後に、すべてのコンテナのポートバインディングを確認するには 以下のdocker inspectを実行します 指図。 formatが表示されます 以下のパラメータ引数はrangeを使用します NetworkSettingsをチェックインして、コンテナのポートバインディングを検索する属性 →HostPort

ポートバインディングについて知っておく必要があります。すでに使用されているポートがある場合は、再度使用することはできないためです。そうしないと、ポートがすでに割り当てられていることを示すエラーメッセージがスローされます。

docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 8f34d039fa3a

Docker Inspectを使用してDockerボリュームの詳細ビューを取得する

これまで、画像、コンテナ、ネットワークに関する詳細情報を見つける方法を学びましたが、ストレージについては学びませんでした。それを変えましょう。

チュートリアルに少なくとも1つのマウントされたボリュームがコンテナにアタッチされていることを確認するために、最初にコンテナを作成してストレージボリュームをマウントしましょう。

すでにコンテナにストレージボリュームがマウントされている場合は、この部分をスキップできます。

以下のコマンドは、my_containerという新しいDockerコンテナを作成します 、ポート80をホストに公開します(-p 80:80 )、ホストの / var / container_dirに基づいてボリュームをマウントします Mounted_valというディレクトリ (-v mounted_vol:/var/container_dirnginxを使用する 画像。

docker run --name my_container -p 80:80 -v mounted_vol:/var/container_dir nginx

ボリュームがコンテナにマウントされたので、ボリュームの名前をdocker volume inspectに提供します 。以下では、コマンドがJSON出力を返し、マウントされたストレージボリュームに関する情報のみを提供することに注意してください。

docker volume inspect mounted_vol

結論

これで、docker inspectを使用できるようになります。 画像、コンテナ、ネットワーキング、ストレージに関する情報のクエリから、さまざまな状況でのコマンド。

docker inspectをどのように使用する予定ですか 独自のDocker環境に関する情報を照会するには?


Docker
  1. Dockerを使用してマイクロサービスをデプロイする方法

  2. ランチャーでアプリをデプロイする方法

  3. DockerInspectコマンドの使用方法

  1. DockerコンテナにApacheを使用してModSecurityをインストールする

  2. Dockerを使用してWireguardVPNサーバーをインストールする

  3. Dockerを使用してRedisでNextcloudをセットアップする

  1. Ubuntu18.04LTSにDockerを使用してMastodonSocialNetworkをインストールする方法

  2. ビルド済みのDockerイメージ入門

  3. Dockerを使用してJenkinsをインストールする方法