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 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
- https://docs.docker.com/network/host/