7.1 ポート転送 (Port forvarding) の基本
ポート転送はDockerの重要な機能で、コンテナ内のアプリケーションを外部からアクセス可能にするものだよ。この機能はWebサーバー、データベース、またはその他のサービスにホストマシンや他のネットワークから接続するために必要なんだ。
デフォルトでは、コンテナは分離されたネットワークで動作している。コンテナ内のサービスを利用可能にするために、Dockerはコンテナのポートをホストマシンのポートに転送するんだ。
ポート転送には、-p
または --publish
を docker run
コマンドで使うよ。
構文
docker run -p [HOST_PORT]:[CONTAINER_PORT] [OPTIONS] IMAGE [COMMAND] [ARG...]
その中で:
- HOST_PORT: トラフィックが流れるホストマシンのポート。
- CONTAINER_PORT: トラフィックが転送されるコンテナ内のポート。
- OPTIONS: コンテナの設定に関する追加パラメータ。
- IMAGE: コンテナが作成される元のイメージ。
- COMMAND: コンテナ内で実行されるコマンド。
- ARG...: コマンドに指定する引数。
基本使用の例
この例では、Nginxが動作しているコンテナのポート80がホストマシンのポート8080に転送される。この後、ブラウザで http://localhost:8080 にアクセスしてWebサーバーを見ることができるよ。
docker run -d -p 8080:80 nginx
7.2 他のポート転送のオプション
1. 複数ポート転送
Dockerは複数のポートを同時に転送することができます。そのためには、複数の-p
オプションを使用します。
例
この例では、コンテナのポート80がホストのポート8080に、コンテナのポート443がホストのポート8443に転送されます。
docker run -d -p 8080:80 -p 8443:443 nginx
2. IPアドレスの指定によるポート転送
特定のIPアドレスを指定して、転送されたポートをバインドすることができます。これは、ホストマシンが複数のネットワークインターフェースを持ち、コンテナへのアクセスを制限したい場合に特に便利です。
例:
この例では、コンテナのポート80がホストマシンのインターフェース127.0.0.1
のみに転送されています。これにより、サービスへのアクセスはホストマシン自体からのみ可能となります。
docker run -d -p 127.0.0.1:8080:80 nginx
3. ポート範囲の転送
複数のポートをまとめて転送する必要がある場合、Dockerは範囲の指定をサポートしています。
例:
この例では、コンテナの7000
から8000
までのポートが、ホストマシンの7000
から8000
までのポートに転送されます。
docker run -d -p 7000-8000:7000-8000 someimage
7.3 実践シナリオの利用
1. Webサーバーへのアクセス
ポートフォワーディングは、コンテナ内で実行されているWebサーバーへのアクセスを提供するためによく使われるよ。
docker run -d -p 8080:80 nginx
このコマンドを実行すると、コンテナのポート80で稼働しているNginx Webサーバーがホストマシンのポート8080で利用可能になるよ。
2. データベースへのアクセス
ポートフォワーディングは、コンテナ内で実行されているデータベースにアクセスするのにも便利だよ。
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword postgres
この例では、コンテナのポート5432で稼働しているPostgreSQLがホストマシンのポート5432で利用可能になるよ。
3. テストと開発
Dockerコンテナは隔離されたテスト環境を作成するためによく利用されるよ。ポートフォワーディングを使うと、開発者は本番環境で実行されているようにアプリケーションを起動してテストできるんだ。
docker run -d -p 8080:80 -p 8443:443 myapp
この例では、アプリケーションは8080と8443ポートでテストされていて、それは本番環境で使用される標準的なポートに対応しているよ。
7.4 追加のおすすめ
1. ポートの保護
ポートをフォワーディングするとき、セキュリティを忘れないでね。開いているポートは攻撃の標的になりやすいから、本当に必要なポートだけをフォワーディングして、ファイアウォールを使ってアクセスを制限しよう。
2. ファイアウォールとNAT
防御を強化してトラフィックを管理するために、ファイアウォールとNetwork Address Translation (NAT)を使おう。これでサービスへのアクセスを制限したり、ネットワーク接続をコントロールすることができるよ。
3. モニタリングとログ
フォワーディングされたポートのトラフィックを監視し、ログを収集する設定をしよう。これで疑わしいアクティビティを早く見つけて、対応できるようになるね。
GO TO FULL VERSION