macvlan ネットワークの使用¶
いくつかのアプリケーション、特にレガシーのアプリケーションや、ネットワーク・トラフィックを監視するアプリケーションでは物理ネットワークへの直接接続するでしょう。この種類の状況では、 macvlan
ネットワーク・ドライバを使うことで、各コンテナの仮想ネットワーク/インターフェースに対して MAC アドレスを割り当て可能になります。これによって現れる物理ネットワーク・インターフェースは、物理ネットワークに直接接続できるようにします。この状況では、 macvlan
のために使う Docker ホスト上の物理インターフェースを割り当てる必要があり、それと同様に、 macvlan
のサブネットとゲートウェイの割り当ても必要です。また、異なる物理ネットワーク・インタフェースを使うことで、 macvlan
ネットワークを隔離できます。以下の点に注意してください。
不適切にユニークで大きな番号の MAC アドレスをネットワーク上に配置する状況では、IP アドレスの消耗や「VLAN spread」によって、ネットワークに意図しないダメージを与えるのが非常に簡単です。
1つの物理インターフェースが複数の MAC アドレスを割り当て可能にするため、ネットワーク機器が「プロミスキャス・モード」( promiscuous mode)機能を備えている必要があります。
アプリケーションがブリッジ・ネットワーク(単一の Docker ホスト)やオーバレイ・ネットワーク(複数の Docker ホスト上での通信)を使える状況では、そちらのほうが長期間にわたる利用では望ましい場合があります。
macvlan ネットワークの作成¶
macvlan
ネットワークの作成時は、ブリッジ・モードか 802.1q トランク・ブリッジ・モードのどちらかになります。
ブリッジ・モードでは、
macvlan
トラフィックはホスト上の物理デバイスを通して出て行きます。
802.1q トランク・ブリッジ・モードでは、Docker がオン・ザ・フライで作成する 802.1q サブ・インタフェースを通してトラフィックは出て行きます。これにより、より粒度が高いレベルでの、ルーティングやフィルタリングを制御可能です。
ブリッジ・モード¶
特定の物理ネットワーク・インタフェースをブリッジする macvlan
ネットワークを作成するには、 docker network create
コマンドで --driver macvlan
を使います。Docker ホスト上で物理的にトラフィックが通過するインターフェースを示す parent
の指定が必要です。
$ docker network create -d macvlan \
--subnet=172.16.86.0/24 \
--gateway=172.16.86.1 \
-o parent=eth0 pub_net
指定した IP アドレスが既に利用中の場合など、macvlan
ネットワーク内で IP アドレスの除外が必要であれば、 --aux-addresses
を使います 。
$ docker network create -d macvlan \
--subnet=192.168.32.0/24 \
--ip-range=192.168.32.128/25 \
--gateway=192.168.32.254 \
--aux-address="my-router=192.168.32.129" \
-o parent=eth0 macnet32
802.1q トランク・ブリッジ・モード¶
eth0.50
のように、ドットを含む parent
インターフェース名を指定すると、Docker はそれを eth0
のサブインターフェースと解釈し、サブインターフェースを自動作成します。
$ docker network create -d macvlan \
--subnet=192.168.50.0/24 \
--gateway=192.168.50.1 \
-o parent=eth0.50 macvlan50
macvlan の代わりに ipvlan を使う¶
これまでの例では、 L3 ブリッジを使っています。かわりに ipvlan
を使うには、 L2 ブリッジを準備します。 -o ipvlan_mode=l2
を指定します。
$ docker network create -d ipvlan \
--subnet=192.168.210.0/24 \
--subnet=192.168.212.0/24 \
--gateway=192.168.210.254 \
--gateway=192.168.212.254 \
-o ipvlan_mode=l2 -o parent=eth0 ipvlan210
IPv6 を使う¶
Docker デーモンで IPv6 を使う設定 をしていると、IPv4/IPv6 デュアルスタックの macvlan
ネットワークが利用できます。
$ docker network create -d macvlan \
--subnet=192.168.216.0/24 --subnet=192.168.218.0/24 \
--gateway=192.168.216.1 --gateway=192.168.218.1 \
--subnet=2001:db8:abc8::/64 --gateway=2001:db8:abc8::10 \
-o parent=eth0.218 \
-o macvlan_mode=bridge macvlan216
次のステップ¶
macvlan ・ネットワーク機能のチュートリアル に進む
コンテナ視点からのネットワーク機能 について学ぶ
ブリッジ・ネットワーク について学ぶ
オーバレイ・ネットワーク について学ぶ
Macvlan ネットワーク について学ぶ
参考
- Use host networking