コンテナと外部との通信

コンテナと外部の通信について解説します。

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を利用して外部からの通信を処理し、外部からのリクエストに応じて適切なコンテナ内のアプリケーションに転送されます。