dockerでポートマッピングがどのように動作するか
Dockerのポートマッピングとは、Dockerコンテナ内のポートをホストのポートにマッピングして、ホストのIPアドレスとポートを使用してコンテナ内のサービスにアクセスできるようにすることです。
Dockerは、Linuxのネットワーク名前空間を使用してポートマッピングを実現しています。Linuxでは、各コンテナには独自のネットワーク名前空間があり、独自のIPアドレスとポートスペースが含まれています。コンテナを起動すると、Dockerはそのコンテナのために仮想ネットワークインターフェイスを作成し、そのインターフェイスをコンテナのネットワーク名前空間にバインドします。
Dockerのポートマッピングでは、コンテナ内のポートとホストのポートをバインドします。コンテナ内にサービスが特定のポートをリッスンしている場合、Dockerはホスト上の特定のポートをコンテナ内の対応するポートに転送します。これにより、ホストが外部からのリクエストを受信した場合、リクエストをコンテナ内のサービスに転送します。
具体的に言うと、Dockerはiptablesツールを使用してポートマッピングを実現しています。コンテナが起動すると、Dockerはホスト上にiptablesルールを作成し、そのルールによってホストの特定のポートがコンテナ内の対応するポートに転送されます。これにより、ホスト上の指定されたポートに送信されるすべてのリクエストがコンテナ内に転送されるようになります。
Dockerのポートマッピングの仕組みは、iptablesルールを作成してホストのポートとコンテナ内のポートをバインドし、外部アクセスを実現することです。