Windows コンテナー ネットワーク ドライバー
適用対象: Windows Server 2025、Windows Server 2022、Windows Server 2019、Windows Server 2016
Windows 上の Docker によって作成された既定の 'nat' ネットワークを利用するだけでなく、ユーザーはカスタム コンテナー ネットワークを定義できます。 ユーザー定義ネットワークは、Docker CLI docker network create -d <NETWORK DRIVER TYPE> <NAME>
コマンドを使用して作成できます。 Windows では、次の種類のネットワーク ドライバーを使用できます。
NAT ネットワーク ドライバー
'nat' ドライバーで作成されたネットワークに接続されたコンテナーは、内部 Hyper-V スイッチに接続され、ユーザー指定の (--subnet
) IP プレフィックスから IP アドレスを受け取ります。 コンテナー ホストからコンテナー エンドポイントへのポート転送/マッピングがサポートされています。
ヒント
Docker デーモン構成ファイルの fixed-cidr
設定を使用して、既定の 'nat' ネットワークで使用されるサブネットをカスタマイズできます。
手記
Windows Server 2019 (またはそれ以降) で作成された NAT ネットワークは、再起動後に永続化されなくなりました。
NAT ネットワークの作成
サブネット 10.244.0.0/24
を使用して新しい NAT ネットワークを作成するには:
docker network create -d "nat" --subnet "10.244.0.0/24" my_nat
透過的なネットワーク ドライバー
"透過的" ドライバーで作成されたネットワークに接続されたコンテナーは、外部 Hyper-V スイッチを介して物理ネットワークに直接接続されます。 物理ネットワークからの IP は、静的に割り当てる (ユーザー指定の --subnet
オプションが必要) か、外部 DHCP サーバーを使用して動的に割り当てることができます。
手記
次の要件により、透過的なネットワーク経由でのコンテナー ホストの接続は、Azure VM ではサポートされていません。
必須: 仮想化シナリオ (コンテナー ホストは VM) でこのモードを使用する場合は、mac アドレススプーフィング 必要があります。
透過的なネットワークの作成
サブネット 10.244.0.0/24
、ゲートウェイ 10.244.0.1
、DNS サーバー 10.244.0.7
、VLAN ID 7
を使用して新しい透過的ネットワークを作成するには:
docker network create -d "transparent" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_transparent
オーバーレイ ネットワーク ドライバー
Docker Swarm や Kubernetes などのコンテナー オーケストレーターによって一般的に使用されるオーバーレイ ネットワークに接続されたコンテナーは、複数のコンテナー ホスト間で同じネットワークに接続されている他のコンテナーと通信できます。 各オーバーレイ ネットワークは、プライベート IP プレフィックスによって定義された独自の IP サブネットを使用して作成されます。 オーバーレイ ネットワーク ドライバーは、VXLAN カプセル化を使用してテナント コンテナー ネットワーク間のネットワーク トラフィックの分離を実現し、オーバーレイ ネットワーク間で IP アドレスを再利用できるようにします。
必須: オーバーレイ ネットワークを作成するために必要な 前提条件、環境が満たされていることを確認します。
必要: Windows Server 2019 では、KB4489899が必要です。
必要: Windows Server 2016 では、KB4015217が必要です。
手記
Windows Server 2019 以降では、Docker Swarm によって作成されたオーバーレイ ネットワークは、送信接続に VFP NAT 規則を利用します。 これは、特定のコンテナーが 1 つの IP アドレスを受信することを意味します。 また、ping
や Test-NetConnection
などの ICMP ベースのツールは、デバッグ状況で TCP/UDP オプションを使用して構成する必要があることを意味します。
オーバーレイ ネットワークの作成
サブネット 10.244.0.0/24
、DNS サーバー 168.63.129.16
、VSID 4096
を使用して新しいオーバーレイ ネットワークを作成するには:
docker network create -d "overlay" --attachable --subnet "10.244.0.0/24" -o com.docker.network.windowsshim.dnsservers="168.63.129.16" -o com.docker.network.driver.overlay.vxlanid_list="4096" my_overlay
L2bridge ネットワーク ドライバー
'l2bridge' ドライバーで作成されたネットワークに接続されたコンテナーは、外部 Hyper-V スイッチを介して物理ネットワークに接続されます。 l2bridge では、受信およびエグレスでのレイヤー 2 アドレス変換 (MAC 再書き込み) 操作により、コンテナー ネットワーク トラフィックの MAC アドレスはホストと同じになります。 データセンターでは、これは、時には有効期間の短いコンテナーの MAC アドレスを学習する必要があるスイッチのストレスを軽減するのに役立ちます。 L2bridge ネットワークは、次の 2 つの方法で構成できます。
- L2bridge ネットワークは、コンテナー ホストと同じ IP サブネットで構成されます
- L2bridge ネットワークが新しいカスタム IP サブネットで構成されている
構成 2 では、ユーザーはゲートウェイとして機能するエンドポイントをホスト ネットワーク コンパートメントに追加し、指定されたプレフィックスのルーティング機能を構成する必要があります。
l2bridge ネットワークの作成
サブネット 10.244.0.0/24
、ゲートウェイ 10.244.0.1
、DNS サーバー 10.244.0.7
、VLAN ID 7 を使用して新しい l2bridge ネットワークを作成するには:
docker network create -d "l2bridge" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_l2bridge
L2tunnel ネットワーク ドライバー
作成は l2bridge と同じですが、このドライバー は Microsoft Cloud Stack (Azure)でのみ使用する必要があります。 l2bridge の唯一の違いは、すべてのコンテナー トラフィックが SDN ポリシーが適用されている仮想化ホストに送信されるため、コンテナーに対して azure ネットワーク セキュリティ グループ などの機能が有効になる点です。
ネットワーク トポロジと IPAM
次の表は、各ネットワーク ドライバーの内部 (コンテナー間) 接続と外部接続に対してネットワーク接続がどのように提供されるかを示しています。
ネットワーク モード/Docker ドライバー
Docker Windows ネットワーク ドライバー | 一般的な用途 | コンテナー間 (単一ノード) | コンテナーから外部 (単一ノード + マルチノード) | コンテナー間 (マルチノード) |
---|---|---|---|---|
NAT (既定) | 開発者に適した |
|
管理 vNIC 経由でルーティング (WinNAT にバインド) | 直接サポートされていません:ホスト経由でポートを公開する必要があります |
透過的 | 開発者または小規模なデプロイに適しています |
|
(物理) ネットワーク アダプターに直接アクセスできるコンテナー ホスト経由でルーティングされる | (物理) ネットワーク アダプターに直接アクセスできるコンテナー ホスト経由でルーティングされる |
オーバーレイ | マルチノードに適しています。Kubernetes で使用可能な Docker Swarm に必要 |
|
直接サポートされていません。 Windows Server 2016 の NAT ネットワークまたは Windows Server 2019 の VFP NAT 規則に接続されている 2 番目のコンテナー エンドポイントが必要です。 | 同じ/クロス サブネット: ネットワーク トラフィックは VXLAN を使用してカプセル化され、Mgmt vNIC 経由でルーティングされます |
L2Bridge | Kubernetes および Microsoft SDN に使用されます |
|
コンテナのMACアドレスが流入時と流出時に書き直される |
|
L2Tunnel | Azure のみ | 同一/クロス サブネット: ポリシーが適用される物理ホストの Hyper-V 仮想スイッチに折り返し | トラフィックは Azure 仮想ネットワーク ゲートウェイを経由する必要があります | 同一/クロス サブネット: ポリシーが適用される物理ホストの Hyper-V 仮想スイッチに折り返し |
IPAM
IP アドレスは、ネットワーク ドライバーごとに異なる方法で付与され、割り当てられます。 Windows では、ホスト ネットワーク サービス (HNS) を使用して NAT ドライバーに IPAM を提供し、Docker Swarm モード (内部 KVS) と連携してオーバーレイ用の IPAM を提供します。 他のすべてのネットワーク ドライバーは、外部 IPAM を使用します。
ネットワーク モード/ドライバー | IPAM |
---|---|
NAT | 内部 NAT サブネット プレフィックスからのホスト ネットワーク サービス (HNS) による動的 IP 割り当てと割り当て |
透明 | 静的または動的 (外部 DHCP サーバーを使用) IP 割り当てと、コンテナー ホストのネットワーク プレフィックス内の IP アドレスからの割り当て |
オーバーレイ | Docker エンジン Swarm モードで管理されるプレフィックスからの動的 IP 割り当てと HNS による設定 |
L2Bridge | 指定されたサブネット プレフィックスからのホスト ネットワーク サービス (HNS) による動的 IP 割り当てと割り当て |
L2Tunnel | Azure のみ - プラグインからの動的な IP 割り当てと設定 |
サービスの検出
Service Discovery は、特定の Windows ネットワーク ドライバーでのみサポートされます。
ドライバー名 | ローカル サービスの検出 | グローバル サービス検出 |
---|---|---|
ナット | はい | Docker EE の場合は YES |
オーバーレイ | はい | はい (Docker EE または kube-dns を使用) |
透明 | いいえ | いいえ |
l2bridge | kube-dns の場合は YES | kube-dns の場合は YES |