はじめに
この実験では、Docker サービスの公開ポートを確認するためにdocker port
コマンドを使用する方法を学びます。まず、nginx
イメージを使用してポートマッピングを含むシンプルなサービスを作成します。
サービス作成後、サービスの全体、特定のプロトコル、およびサービス内の特定のコンテナインデックスに対する公開ポートを確認する方法を探求します。このハンズオン体験を通じて、Docker コンテナの公開ポートをプログラムで特定するスキルを習得できます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Docker サービスの公開ポートを確認するためにdocker port
コマンドを使用する方法を学びます。まず、nginx
イメージを使用してポートマッピングを含むシンプルなサービスを作成します。
サービス作成後、サービスの全体、特定のプロトコル、およびサービス内の特定のコンテナインデックスに対する公開ポートを確認する方法を探求します。このハンズオン体験を通じて、Docker コンテナの公開ポートをプログラムで特定するスキルを習得できます。
このステップでは、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
コマンドを使用してサービスの公開ポートをプログラムで見つける方法を探りました。このコマンドは、ホストのポートマッピングが明示的にわからない場合に特に有用です。これにより、コンテナの内部ポートに対応するホストポートを取得することができます。