虚拟机docker使用macvlan网络
本例环境:
Vsphere版本:6.x
容器宿主机操作系统: Centos7.3 ,内核4.9.39(默认为3.10,本例环境中存储驱动使用的是overlay2)
docker版本:17.06.1-ce
网关设备:三层交换机(端口模式为trunk)
一、新建一个虚拟交换机,如下图所示,使用vmnic1物理网卡(此网卡与三层设备的trunk连接)

二、 添加完网络后,更改网络的属性,必须启用混杂模式
三、 在运行docker程序的虚拟机里添加虚拟网卡

四、在虚拟机中新增eth1和bond0配置文件,不需要配置IP地址,并将它加入到bond0网络
bond0非必需,此例纯粹为了扩展而配置,正式环境可使用多块网卡绑定与三层设备的channel-group对接
centos7网卡名称为ensXX,更改为eth请参考 http://www.cnblogs.com/cnwangshijun/p/7404466.html
[root@docker-dev ~]# more /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 NAME=eth1 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes MASTER=bond0 USERCTL=no SLAVE=yes [root@docker-dev ~]# more /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 NAME=bond0 TYPE=Bond ONBOOT=yes BOOTPROTO=none USERCTL=no BONDING_MASTER=yes BONDING_OPTS="mode=4 miimon=100" [root@docker-dev ~]# modprobe --first-time bonding [root@docker-dev ~]# ip link set bond0 promisc on [root@docker-dev ~]# modprobe 8021q
五、在虚拟机中新建一个macvlan网络
[root@docker-dev ~]# docker network create -d macvlan --subnet 172.16.25.0/24 --gateway 172.16.25.1 -o parent=bond0.25 -o macvlan_mode=bridge vlan25
六、新建一个容器,指定使用上面建的网络并配置固定IP地址,然后进行网络连通性测试
[root@docker-dev ~]# docker run -d --name test --net vlan25 --ip 172.16.25.10 repo.tty.com/java/java8-super:0921
注:其中 repo.tty.com/java/java8-super:0921 为本示例镜像仓库中的镜像,根据环境不同替换成各自的镜像地址
[root@docker-dev ~]# docker exec -it test bash # 使用exec进入容器
[root@332d8565f3c5 /]# ifconfig eth0 | grep inet #查看容器的IP地址
inet 172.16.25.10 netmask 255.255.255.0 broadcast 0.0.0.0
[root@332d8565f3c5 /]# ping qq.com -c 3 #直接进行外网ping测试
PING qq.com (14.17.32.211) 56(84) bytes of data.
64 bytes from 14.17.32.211: icmp_seq=1 ttl=54 time=2.35 ms
64 bytes from 14.17.32.211: icmp_seq=2 ttl=54 time=2.45 ms
64 bytes from 14.17.32.211: icmp_seq=3 ttl=54 time=1.87 ms
至此,用虚拟机做宿主机运行docker容器也能使用高性能的macvlan网络模型了
需要注意的是每块物理网卡只能支持两台虚拟机使用,如果超过两台网络将出现严重的丢包,具体原因不详!

博主小学未毕业,请勿口喷!