単一ホスト内でのDockerネットワークの概要です。
参照元:Docker の基本学習 ~ Docker のネットワーク - Qiita
- ホストには仮想ブリッジの
docker0
が作成される - コンテナは
veth
を介してホストの仮想ブリッジと接続する - コンテナ内からは
eth0
というNICがあるように見える(実体はveth
) - コンテナ内の
eth0
は、IPが自動で割り振られる(IPは不定) - コンテナからホストの外部に接続するにはNAT(IPマスカレード)が使われる
- 単一ホスト上のコンテナ間の通信は、仮想ブリッジ経由で行わる
🐡 補足
仮想ブリッジ
Linux上に仮想的なL2スイッチを構成する機能です。L2スイッチはパケットに宛先情報として含まれるMAC(Media Access Control)アドレスでパケットの中継を行う機器です。
veth
veth
(TAPデバイス)は仮想のネットワークインタフェース(NIC)です。
コンテナ側とホスト側にveth
を作ることで仮想NICのペアを作り、その間で通信を行います。
コンテナ内のveth
はeth0
として振る舞います。
🐮 NAT(IPマスカレード)
NAT(Network Address Translation)はパケットヘッダに含まれるIPアドレスを別のIPアドレスに変換する技術です。プライベートIPのホストから、グローバルIPのゲートウェイを通じてネットにアクセスし、外からは送信元をグローバルなIPとして扱えるようにするのに使われます。
またIPマスカレードはIPアドレスに加えてポート番号の変更も行います。