300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 使用macvlan技术给docker容器设置一个和主机同一网段的ip地址

使用macvlan技术给docker容器设置一个和主机同一网段的ip地址

时间:2020-08-11 02:55:27

相关推荐

使用macvlan技术给docker容器设置一个和主机同一网段的ip地址

使用macvlan技术给docker容器设置一个和主机同一网段的ip地址

为什么要使用macvlan技术给docker容器设置IP

在日常使用docker的时候,经常需要通过网络IP地址访问镜像,这个时候可以通过设置端口映射的方式,让客户机访问docker镜像的物理机IP的映射后的端口,实现通过IP访问docker容器的目的,但是这种操作仅仅是权宜之策,还有有办法可以实现给docker镜像固定IP的,macvlan技术就可以实现这一操作。

macvlan介绍

macvlan 技术能将 一块物理网卡虚拟成多块虚拟网卡,这样就可以实现给虚拟设备一个虚拟网卡,docker这种容器就可以通过虚拟网卡获取IP,利用IP进行独立上网,真正做到跟物理机完全一样的体验。

macvlan 是 Linux kernel 支持的新特性,支持的版本有 v3.9-3.19 和 4.0+,比较稳定的版本推荐 4.0+。它一般是以内核模块的形式存在,我们可以通过以下方法判断当前系统是否支持:

modprobe macvlanlsmod | grep macvlanmacvlan24576 0

如果显示最后一段话,则说明系统支持macvlan。

如果第一个命令报错,或者第二个命令没有返回,说明当前系统不支持 macvlan,需要升级内核。

由于个人不是计算机网络这块的研究者,对于这块不是很懂,以下介绍参考自《网卡也能虚拟化?网卡虚拟化技术 macvlan 详解》:

macvlan 这种技术听起来有点像 VLAN,但它们的实现机制是完全不一样的。macvlan 子接口和原来的主接口是完全独立的,可以单独配置 MAC 地址和 IP 地址,而 VLAN 子接口和主接口共用相同的 MAC 地址。VLAN 用来划分广播域,而 macvlan 共享同一个广播域。

通过不同的子接口,macvlan 也能做到流量的隔离。macvlan 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡,虚拟网卡再把包交给上层的协议栈处理。

根据 macvlan 子接口之间的通信模式,macvlan 有四种网络模式:

private 模式vepa(virtual ethernet port aggregator) 模式bridge 模式passthru 模式

默认使用的是 vepa 模式,常用的是bridge 模式。

docker创建macvlan

首先需要查询网卡的名字:使用ifconfig命令查看网卡名:

用户名@主机名:~$ ifconfig[网卡名]:inet [主机IP] netmask [子网掩码] broadcast [网关地址]

会出现如上格式所示的内容,我们需要记住的是[网卡名]和[网关地址]

可以使用如下命令给docker创建一个虚拟网络,

docker network create -d macvlan --subnet=[网段] --gateway=[网关] -o parent=[网卡] macvlan例如,我查询到的网卡名是eth0,网关是192.168.1.1,这样我可以创建一个名字叫new_macvlan的macvlan网络如下:docker network create -d macvlan --subnet=192.168.1.1/24 --gateway=192.168.1.1 -o parent=eth0 new_macvlan

给docker容器一个IP

之后如果想给容器一个固定IP,可以使用如下命令创建一个容器,并给它一个固定IP:

docker run -it --name [容器名] --net macvlan --ip=[固定IP] [镜像名] /bin/bash例如,我想以centos镜像创建一个名字叫test的容器,并给它一个IP为192.168.1.10docker run -it --name test --net macvlan --ip=192.168.1.10 centos /bin/bash

参考文献

[1] 网卡也能虚拟化?网卡虚拟化技术 macvlan 详解 /bakari/p/10641915.html

[2] Use macvlan networks /network/macvlan

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。