Dockerを使用すると、アプリケーションをコンテナとして分離して実行できますが、これらのコンテナが外部と通信するためにはポートの設定が重要です。この記事では、Dockerのホストとコンテナのポートについて詳しく説明します。
Dockerコンテナのポートとは
コンテナは、アプリケーションを実行する環境であり、アプリケーションが外部と通信するためには特定のポートを開放する必要があります。ポートは、ネットワーク上でデータの送受信を行うためのエンドポイントです。
- コンテナポート: コンテナ内でアプリケーションがリッスンしているポート。
- ホストポート: ホストマシン上でコンテナにマッピングされるポート。
ポートのマッピング
コンテナを起動する際、ホストとコンテナのポートをマッピングすることで、外部からコンテナにアクセスできるようになります。このマッピングは、-p
オプションを使って指定します。
docker run -d -p <ホストポート>:<コンテナポート> <イメージ名>
たとえば、コンテナ内のポート80をホストのポート8080にマッピングする場合、次のようにコマンドを実行します。
docker run -d -p 8080:80 nginx
このコマンドでは、Nginxのコンテナを起動し、ホストのポート8080にリクエストを送ると、コンテナのポート80に転送されます。
複数のポートマッピング
複数のポートをマッピングする場合、-p
オプションを複数回指定できます。
docker run -d -p 8080:80 -p 443:443 <イメージ名>
このコマンドでは、HTTP(ポート80)とHTTPS(ポート443)をそれぞれホストのポート8080と443にマッピングします。
ホストとコンテナのIPアドレス
コンテナは、Dockerが管理する仮想ネットワーク上で実行され、独自のIPアドレスを持っています。しかし、ホストのIPアドレスでコンテナにアクセスする場合、マッピングしたホストポートを使用します。コンテナ内部から他のコンテナにアクセスする場合は、コンテナ名やIPアドレスを使用できます。
ポートの確認
現在稼働中のコンテナとそのポートマッピングを確認するには、以下のコマンドを使用します。
docker ps
出力には、ホストポートとコンテナポートのマッピングが表示されます。
まとめ
Dockerのホストとコンテナのポートの理解は、アプリケーションのネットワーク通信を適切に設定するために重要です。ポートマッピングを活用することで、外部からコンテナにアクセスしたり、複数のサービスを同時に実行したりできます。