Dockerのネットワークが気になったのでちょっと調べてみました。以下のコマンドで簡単なコンテナを起動して、内部のネットワークを調べてみました。PHPが動作するWebサーバーを立ち上げて、-pオプションで80番をポートフォワードします。php:7.0-apacheこんな構成になっているようです。Pair)が仮想ブリッジにつながっていて、そのペアにコンテナ側のインターフェースがいます。vethは仮想的なネットワークインターフェースで、異なるnamespaceにあるインターフェース同士をつなぐことが出来ます。仮想ブリッジを介して、コンテナ同士がL2のレイヤーでつながっています。forever...docker0という仮想ブリッジがあるのが見えました。仮想ブリッジは172.17.0.1というIPアドレスを持っていました。vethca38e86というのが、vethのインターフェースで、コンテナ側のネットワークインターフェースとケーブルで繋がっているようなイメージです。こちらも以下のコマンドで見てみました。vethca38e86仮想ブリッジに先程のvethca38e86のインターフェースが接続されているのがわかります。物理NICと仮想ブリッジは通信は、OSの機能でルーティングされます。以下のコマンドで見てみましたが、172.17.0.0/16宛の通信がdocker0(仮想ブリッジのインターフェース)にルーティングされているのがわかります。100iptablesの設定も見てみました。2018以下のPREROUTINGチェインで、物理NICの80番ポート宛への通信の宛先を、コンテナのIPアドレスの80番あてへとDNATしているようです。172.17.0.2:80ローカルのインターフェース宛に届いたパケットは、独自定義のチェインDOCKERに飛んで、2番めのチェインでは、送信元のインターフェースがdoker0(仮想ブリッジのインターフェース)ではないので、そのまま3番目のチェインに飛んで、そこで宛先が80/tcpの通信は、コンテナのIPアドレスの80番にDNATしているという感じだと思います、多分。こんな感じで、コンテナまでパケットが届くんだということがわかりました。物理的に以下のようなネットワークを、仮想ブリッジやiptablesなどの機能でエミュレートしているのだと思います、多分。雑誌等の執筆依頼を受付しております。役に立たなかった0人がこの投稿は役に立ったと言っています。コメントをキャンセルメールアドレスは表示されません。Reserved.本サイトに掲載されている社名、製品名、サービス名等は各社の商標または登録商標です。プライバシーポリシーお問い合わせ。