
【Docker入門】コンテナと外部との通信
コンテナと外部の通信について解説します。
docker0でのNAPT利用
Dockerでは、通常、docker0
という仮想ブリッジが使用され、このブリッジを介してコンテナと外部のネットワークとの通信が行われます。この通信は、NAPT(Network Address Port Translation)を利用して処理されます。
NAPTの特徴
IPマスカレード
プライベートIPアドレスからグローバルIPアドレスへの変換を行います。
ポート番号の変換
コンテナ内のプロセスが通信する際、その通信に関連するポート番号も変換されます。
複数のプライベートIPアドレスの相互変換
複数のコンテナが同じホストで動作し、それぞれがプライベートIPアドレスを持つ場合、それらのIPアドレスをグローバルIPアドレスに変換します。
1対多の変換
外部からの複数の接続を、1つのグローバルIPアドレスで受け入れることができます。
外部からのアクセスの流れ
外部からコンテナにアクセスする場合、以下の流れになります。

①外部リクエストの到着
外部からのリクエストがホストマシンのネットワークインターフェース(通常は物理NIC)に到着します。
②docker0への転送
ホストマシン上のdocker0
ブリッジが、外部からのリクエストを受け取ります。
③NAPTの処理
docker0
ブリッジでは、NAPTにより、外部からのリクエストに対応するコンテナのプライベートIPアドレスとポート番号への変換が行われます。
④コンテナへの転送
NAPTによって変換されたリクエストは、対応するコンテナのeth0
インターフェースに転送されます。
⑤コンテナ内のアプリケーションの受信
コンテナ内のアプリケーションは、リクエストを受け取り、必要な処理を行います。そして、レスポンスを外部に返します。
まとめ
このようにして、DockerコンテナはNAPTを利用して外部からの通信を処理し、外部からのリクエストに応じて適切なコンテナ内のアプリケーションに転送されます。