如何将容器运行到Docker Macvlan网络上
本文将介绍完整的docker macvlan网络创建流程,避免踩坑
什么是macvlan?
简单来说,macvlan是一种linux上的虚拟网卡技术,用户可以在一张物理网卡上创建多张虚拟网卡,并且每张虚拟网卡都拥有自己的mac地址。这样可以在二层网络很好的管理使用了macvlan的设备。
什么情况需要使用docker macvlan
当你容器中的程序需要独立的网卡支持时,换句话说,当你不得不使用--net=host时,你可以使用macvlan代替它。举两个常见例子:
- 当你部署一个网心云、甜糖等边缘计算服务容器时,你往往需要使用host模式给容器提供宿主机的网络环境。这类边缘计算服务要求你提供具有公网映射型的网络,如果你使用了如bridge模式并且添加端口映射,容器运行在docker提供的虚拟网络内,即使你的路由器拥有公网ip,你也是端口限制型。这时你可以使用macvlan网络模式,让路由器认为这是一个完全独立的设备,为其提供upnp服务。
- 同样的,当你有一个容器你想要使用路由器对其进行网速限制时,使用macvlan网络,路由器上可以直接对容器进行速度限制(这总比进到容器然后对虚拟网卡限速来得方便)。
创建步骤
1. 查看物理网卡名称,开启网卡混杂模式
sh
ifconfig
信息如下: 找到其中实际连接上级路由的网卡,也就是图中的enp1s0(enp1s0就是网卡名称)。
如果你不知道哪张是你需要的,你可以看看它的ip地址,找到在你路由网段内的那张。
查看网卡信息中是否有PROMISC
标志,如果没有请执行ifconfig 网卡名称 promisc
,然后再次使用ifconfig
查看。
2. 创建docker Macvlan网络
sh
docker network create -d macvlan --gateway 192.168.0.1 --subnet 192.168.0.0/24 -o parent=enp1s0 macvlan
- -d macvlan 指定网络驱动为macvlan。
- --gateway 192.168.0.1 指定你的二层设备网关,也就是你的路由器管理页面的地址。
- --subnet 192.168.0.0/24 指定子网范围,/24代表掩码255.255.255.0,ip只会在192.168.0.*内。
- -o parent=物理网卡名称 指定物理网卡,也就是步骤一获得的那个。
- macvlan 网络名称,可以自定义,注意在第三步创建容器时需要使用
3. 容器运行时指定网络
sh
docker run -d \
--name test \
--net=macvlan \
--ip=192.168.0.200 \
busybox \
ping baidu.com
- 使用--net=网络名称,设置容器到创建好的macvlan网络。
- 使用--ip=某个未被占用的ip,设置容器固定ip,避免自动分配导致跟二层的其他设备冲突。
Tips
以上就是文章的全部内容了,有任何疑问可以在下方评论哦!