Docker容器跨主机通讯
1 macvlan
macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。macvlan 本质上是一种网卡虚拟化技术,Docker 用 macvlan 实现容器网络就不奇怪了。
macvlan 的最大优点是性能极好,相比其他实现,macvlan 不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络。
默认一个物理网卡只有一个物理地址,虚拟多个MAC地址
1 创建macvlan网络(所有docker机器都需要创建)
docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=eth0 macvlan_1
-d macvlan 指定 driver 为 macvlan。
macvlan 网络是 local 网络,为了保证跨主机能够通信,用户需要自己管理 IP subnet。
与其他网络不同,docker 不会为 macvlan 创建网关,这里的网关应该是真实存在的,否则容器无法路由。
-o parent 指定使用的网络 interface。
2 设置eth0网卡为混杂模式(Centos无需此步操作,Ubuntu需要修改)
ip link set eth0 promisc on
3 创建使用macvlan网络的容器
docker run -it --name bbox1 --network macvlan_1 --ip=1