4.1 ポート公開の基本概念
ポート公開 は、Dockerコンテナ内で動作するサービスを外部ネットワークやホストからアクセス可能にするものだよ。これは、複数のコンテナを使ったアプリケーションの設定で重要な部分で、ウェブサーバー、データベース、その他のネットワークアプリケーションなどのサービスと連携を取るために必要なんだ。この講義では、コンテナのポートを公開して、サービスにアクセスする方法について説明するね。
ポート公開の基本概念
- ポートマッピング: ホストポートとコンテナポートの対応付け。
-
-p/--publish
パラメーター: コンテナを起動する際にポートマッピングを指定するために使われる。 -
-P/--publish-all
パラメーター: コンテナ内でエクスポートされたすべてのポートに対して自動的にホストポートを割り当てる。
-p
パラメーターの使用例
コンテナを起動する際、-p
オプションを使ってホストポートをコンテナポートにマッピングできるよ。コマンドのフォーマットは以下の通り:
docker run -d -p <host_port>:<container_port> <image>
例 1: Nginxウェブサーバーのポート公開
Nginxを使ってコンテナを起動し、コンテナのポート80をホストのポート8080に公開するよ。
これでNginxは http://localhost:8080 でアクセス可能になるよ。
docker run -d -p 8080:80 --name mynginx nginx
例 2: 複数ポートの公開
複数の-p
オプションを指定することで、複数のポートを公開できるよ。
この例では、Nginxはポート8080でHTTP、ポート8443でHTTPSでアクセス可能になるよ。
docker run -d -p 8080:80 -p 8443:443 --name mynginx nginx
-P
パラメーターの使用例
-P
パラメーターは、Dockerfileやコンテナの設定で指定されたすべてのポートを自動的にホストのランダムなポートに公開するんだ。
例:
docker run -d -P --name mynginx nginx
割り当てられたポートを確認するには、docker port
コマンドを使うよ:
docker port mynginx
出力はこんな感じになるよ:
80/tcp -> 0.0.0.0:32768
443/tcp -> 0.0.0.0:32769
4.2 Docker Composeのポート公開
Docker Composeでポートを指定するには、docker-compose.yml
ファイルのports
ディレクティブを使ってね。
docker-compose.yml
ファイルの例
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
- "8443:443"
Docker Composeを起動してみて:
docker compose up -d
これで、Nginxはhttp://localhost:8080とhttps://localhost:8443でアクセスできるようになるよ。
4.3 ポート公開の追加設定
1. IPアドレスの制限
ホストのIPアドレスを指定して、コンテナのポートへのアクセスを制限できるよ。
例:
この例では、Nginxはローカルホストのhttp://127.0.0.1:8080としてのみアクセスできるようになるよ。
docker run -d -p 127.0.0.1:8080:80 --name mynginx nginx
2. ポート範囲の使用
ポートの範囲を指定して公開できるよ。
例:
docker run -d -p 8080-8081:80-81 --name mynginx nginx
実践のヒント:
- 必要なポートだけを公開: アクセスするサービスに本当に必要なポートだけを公開することで、潜在的な脆弱性を減らそう。
- ファイアウォールの使用: 信頼されたIPからのみ公開ポートにアクセスできるように、ファイアウォールを設定しよう。
- モニタリングとログ記録: 公開ポートへのアクセスを追跡し、疑わしいアクティビティを特定するためにモニタリングとログツールを活用しよう。
GO TO FULL VERSION