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


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

博主原文链接:https://www.yourmetaverse.cn/nlp/303/

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

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

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

2. macvlan介绍

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

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

modprobe macvlan
lsmod | grep macvlan
macvlan                24576  0

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

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

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

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

private 模式:虚拟接口只能与物理接口通信,不能与其他虚拟接口通信。
vepa(virtual ethernet port aggregator) 模式:虚拟交换机端口模式,通过物理交换机转发数据包。
bridge 模式:虚拟接口之间可以互相通信,也可以与物理接口通信,就像一个网桥一样工作。
passthru 模式

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

3. 使用macvlan技术的好处

使用macvlan技术有以下几个好处:

直接连接到物理网络:使用macvlan技术可以让Docker容器直接连接到物理网络,而不需要通过NAT或端口映射的方式来访问它们。这样可以提高网络性能和稳定性,同时也可以使容器更加透明和易于管理。

  • 独立的网络命名空间:每个macvlan网络都有自己的网络命名空间,这意味着不同的Macvlan网络之间是隔离的,它们之间的通信需要经过路由器或交换机进行转发。这可以增强网络安全性和隔离性。

  • 多IP地址绑定:使用macvlan技术可以让容器绑定多个IP地址,这可以用于一些特殊的应用场景,比如需要监听多个IP地址的Web服务器等。

  • 避免端口冲突:在使用NAT或端口映射的方式时,可能会因为端口冲突而导致容器无法启动。使用macvlan技术可以避免这个问题,因为每个容器都有自己的独立IP地址和MAC地址。

4. 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

5. 给docker容器设置一个IP

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

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

参考文献

[1] 网卡也能虚拟化?网卡虚拟化技术 macvlan 详解 https://www.cnblogs.com/bakari/p/10641915.html
[2] Use macvlan networks https://docs.docker.com/network/macvlan


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chaos_Wang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值