docker compose port コマンドでマッピングされたポートを見つける方法

DockerDockerBeginner
今すぐ練習

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

はじめに

この実験では、Docker サービスの公開ポートを確認するためにdocker portコマンドを使用する方法を学びます。まず、nginxイメージを使用してポートマッピングを含むシンプルなサービスを作成します。

サービス作成後、サービスの全体、特定のプロトコル、およびサービス内の特定のコンテナインデックスに対する公開ポートを確認する方法を探求します。このハンズオン体験を通じて、Docker コンテナの公開ポートをプログラムで特定するスキルを習得できます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/port("List Container Ports") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555085{{"docker compose port コマンドでマッピングされたポートを見つける方法"}} docker/ps -.-> lab-555085{{"docker compose port コマンドでマッピングされたポートを見つける方法"}} docker/port -.-> lab-555085{{"docker compose port コマンドでマッピングされたポートを見つける方法"}} docker/pull -.-> lab-555085{{"docker compose port コマンドでマッピングされたポートを見つける方法"}} docker/images -.-> lab-555085{{"docker compose port コマンドでマッピングされたポートを見つける方法"}} end

ポートマッピングを使用したシンプルなサービスの作成

このステップでは、Docker を使用してシンプルなサービスを作成し、コンテナのポートをホストマシンにマッピングする方法を学びます。これにより、コンテナ内で実行されているサービスに外部からアクセスできるようになります。

まず、Docker Hub からnginxイメージをプルします。このイメージには、例として使用できる軽量な Web サーバーが含まれています。

docker pull nginx

イメージがダウンロードされていることを示す出力が表示されます。ダウンロードが完了したら、以下のコマンドでローカルにイメージが存在することを確認できます:

docker images

次に、nginxイメージを基にコンテナを実行し、コンテナのポート 80 をホストマシンのポート 8080 にマッピングします。-dフラグはコンテナをデタッチモード(バックグラウンド)で実行し、-p 8080:80フラグがポートマッピングを実行します。

docker run -d -p 8080:80 nginx

このコマンドは、Docker コンテナ内で Nginx Web サーバーを起動し、LabEx VM のポート 8080 でアクセス可能にします。

コンテナが実行中でポートマッピングが機能していることを確認するには、docker psコマンドを使用して実行中のコンテナをリスト表示します。nginxイメージを実行しているコンテナを探し、PORTS列を確認してください。0.0.0.0:8080->80/tcpと表示されるはずです。

docker ps

最後に、curlを使用してポート 8080 のlocalhostにリクエストを送信し、Nginx のウェルカムページにアクセスできます。

curl localhost:8080

出力にデフォルトの Nginx ウェルカムページの HTML コンテンツが表示されます。これにより、コンテナが実行中であり、マッピングされたポート経由でアクセス可能であることが確認されます。

サービスの公開ポートを確認する

前のステップでは、Docker コンテナを作成し、コンテナのポートをホストにマッピングしました。ここでは、サービスが公開されているポートをプログラムで確認する方法を学びます。これは、コンテナの内部ポートにどのホストポートをマッピングしたか明確に覚えていない場合に便利です。

docker portコマンドはこの目的のために特別に設計されています。このコマンドは指定したコンテナのポートマッピングを表示します。引数としてコンテナ ID または名前を指定する必要があります。

まず、実行中の Nginx コンテナの ID を取得しましょう。docker psを使用して出力をフィルタリングするか、前のステップのdocker psコマンドの出力から ID をコピーします。

docker ps

nginxイメージを実行しているコンテナを見つけ、その Container ID をメモしてください。

次に、docker portコマンドの後に Container ID を指定してポートマッピングを確認します。

docker port [CONTAINER_ID]

[CONTAINER_ID]は実際の Nginx コンテナの ID に置き換えてください。

出力には、コンテナの内部ポートとそれに対応するマッピングされたホストポートが表示されます。例えば、80/tcp -> 0.0.0.0:8080のような表示が確認できるはずです。これは、コンテナの内部ポート 80(TCP プロトコル使用)がすべてのホストインターフェース(0.0.0.0)のポート 8080 にマッピングされていることを示しています。

このコマンドは、コンテナの完全な設定を確認することなく、公開ポートを素早く確認する方法です。

特定プロトコルの公開ポートを確認する

前のステップでは、docker portを使用してコンテナのすべてのポートマッピングを確認しました。コンテナは異なるプロトコル(TCP や UDP など)で複数のポートを公開している場合があります。このステップでは、特定のプロトコルに対する公開ポートを確認する方法を学びます。

docker portコマンドでは、コンテナの内部ポートと対象のプロトコルを指定できます。書式はdocker port [CONTAINER_ID] [CONTAINER_PORT]/[PROTOCOL]です。

Nginx コンテナの内部ポート 80(TCP プロトコル)の公開ポートを確認してみましょう。まず、前のステップで取得した Container ID を準備してください。もし持っていない場合は、再度docker psで取得できます。

docker ps

次に、コンテナ ID と特定のポート・プロトコルを指定してdocker portコマンドを実行します:

docker port [CONTAINER_ID] 80/tcp

[CONTAINER_ID]は実際の Nginx コンテナの ID に置き換えてください。

出力には、TCP プロトコル用のコンテナ内部ポート 80 にマッピングされたホストポートが直接表示され、0.0.0.0:8080のような結果が得られます。これは単にdocker port [CONTAINER_ID]を実行するよりも具体的な情報です。

この方法は、コンテナが同じポート番号を異なるプロトコルで公開している場合に、特定のプロトコルのマッピングだけを確認したい場合に特に有用です。

特定コンテナインデックスの公開ポートを確認する

高度なシナリオでは、コンテナが同じ内部ポートを複数回公開し、異なるホストポートやインターフェースにマッピングされている場合があります。Nginx のような単純なサービスではあまり一般的ではありませんが、可能性としてはあり得ます。このような場合、docker portコマンドは単一の内部ポートに対して複数のマッピングを返すことがあります。

複数のマッピングが存在する場合に特定のマッピングを取得するには、インデックスを使用できます。特定の内部ポートに対するdocker portの出力はマッピングのリストです。0 から始まるインデックスを指定することで特定のマッピングにアクセスできます。

デモンストレーションのため、Nginx コンテナがポート 80 に対して複数のマッピングを持っていると仮定しましょう。最初のマッピング(インデックス 0)を取得するには、次のコマンド形式を使用します:

docker port [CONTAINER_ID] [CONTAINER_PORT]/[PROTOCOL]/[INDEX]

Nginx の例で、内部ポート 80 TCP の最初のマッピングを取得するには次のようにします:

docker port [CONTAINER_ID] 80/tcp/0

[CONTAINER_ID]は実際の Nginx コンテナの ID に置き換えてください。

私たちの Nginx コンテナはポート 80/tcp に対して 1 つのマッピングしか持っていないため、このコマンドはdocker port [CONTAINER_ID] 80/tcpと同じ出力(0.0.0.0:8080)を返します。

Nginx のこの特定の例ではインデックスの完全な有用性を示していませんが(マッピングが 1 つしかないため)、同じ内部ポートに対して複数のマッピングが存在する可能性があるより複雑なコンテナ構成では、この機能を理解することが重要です。

まとめ

この実験では、Nginx イメージをプルしてコンテナを実行し、コンテナのポート 80 をホストのポート 8080 にマッピングすることで、ポートマッピング付きの簡単な Docker サービスを作成する方法を学びました。docker psを使用してコンテナの状態とポートマッピングを確認し、ホストのマッピングポートに対して curl コマンドを実行することでアクセス可能であることを検証しました。

さらに、docker portコマンドを使用してサービスの公開ポートをプログラムで見つける方法を探りました。このコマンドは、ホストのポートマッピングが明示的にわからない場合に特に有用です。これにより、コンテナの内部ポートに対応するホストポートを取得することができます。