方法一 Macvlan
Macvlan是一种容器网络模式,它允许Docker容器直接连接到主机的物理网络接口。这使得容器能够直接获得一个IP地址,并且在网络_上可以像主机- -样运行。Macvlan 网络模式的优点是容器的网络性能非常好,而且可以实现容器与主机在同一局域网内相互通信。
在使用Macvlan网络模式时,需要指定一个父网卡 (parent interface),也就是一个物理网卡, 容器将使用该网卡进行通信。容器可以使用静态IP地址或从DHCP服务器获取IP地址。与其他网络模式相比,Macvlan 网络模式的缺点是较为复杂,配置也相对困难。
部署示例:
创建macvlan网络:
docker network create -d macvlan --subnet=192.168.88.0/24 --gateway=192.168.88.254 -o parent=eth0 macvlan-network
创建容器:
docker run -itd --name=XXXX --privileged=true --network=macvlan-network --ip=192.168.88.56 docker.images
进入容器确认ip:
docker exec - it XXXX /bin/bash -C ifconfig
方法二 IPvlan
与Macvlan类似,IPvlan 也是从一个主机接口虚拟出多个虚拟网络接口。区别在于IPvlan所有的虚拟接口都有相同的MAC地址,而IP地址却各不相同。因为所有的IPvlan虚拟接口共享MAC地址,所以特别需要注意DHCP使用的场景。DHCP 分配IP地址的时候一般会用MAC地址作为机器的标识。因此,在使用Macvlan的情况下,客户端动态获取IP的时候需要配置唯一的Client ID,并且DHCP服务器也要使用该字段作为机器标识,而不是使用MAC地址。
Linux内核3.19版本才开始支持IPvlan, Docker 从4.2版本起能够稳定支持IPvlan。IPvlan有两种不同的模式,分别是L2和L3。一个父接口只能选择其中一种模式,依附于它的所有子虚拟接口都运行在该模式下。
IPvlan L2模式和Macvlan bridge模式的工作原理很相似,父接口作为交换机转发子接口的数据。同-一个网络的子接口可以通过父接口转发数据,如果想发送到其他网络,则报文会通过父接口的路由转发出去。
L3模式下,IPvlan 有点像路由器的功能,IPvlan 在各个虚拟网络和主机网络之间进行不同网络报文的路由转发工作。只要父接口相同,即使虚拟机/容器不在同一个网络,也可以互相ping通对方,因为IPvlan会在中间做报文的转发工作。
部署示例:
确认内核版本: uname -a (需要4.2以上)
创建ipvlan网络:
docker network create -d ipvlan --subnet=192.168.88.0/24 --gateway=192.168.88.254 -o parent=eth0 ipvlan-network
创建容器:
docker run -itd --name=centos-test-net --privileged=true --network= ipvLan-network --ip=192.168.88.56 XXXX
进入容器确认:
docker exec - it XXXX /bin/bash -C ifconfig