怎样在docker中使用macvlan创建可以独立ip访问的容器

macvlan是什么

macvlan是一种网络虚拟化技术,它允许在一个物理网络接口上配置多个虚拟网络接口,每个虚拟网络接口都有自己独立的 MAC 地址,并且可以配置上 IP 地址进行通信。macvlan主要应用于Docker容器网络中,可以在一个主机上创建多个网络环境,每个环境都有自己独立的 MAC 地址,从而实现容器之间的隔离和通信。

在Docker中使用macvlan网络,需要先创建一个子网卡,然后将其添加到容器中,使其成为容器的网络接口。可以使用以下命令创建一个名为 macvlan 的子网卡:

docker network create -d macvlan --subnet=192.168.100.0/24 --gateway=192.168.100.1 -o parent=mac1 mac_net

接下来,将容器的 IP 地址和子网卡 MAC 地址绑定,使其可以通过 macvlan 子网卡进行通信。可以使用以下命令将容器的 IP 地址和子网卡 MAC 地址绑定:

docker run --net=macvlan -d -p 8000:8000 --name=my-app my-app

其中,–net=macvlan 表示使用macvlan网络,-d 表示后台运行容器,-p 8000:8000 表示将容器的端口 8000 暴露给宿主机,–name=my-app 表示为容器指定一个名称。

需要注意的是,macvlan 只支持 bridge 模式,而且只能在支持 host-only、global、docker0、macvlan 这些挂载类型的网络接口上使用。同时,macvlan 还需要配置 DNS 才能正常工作。

macvlan的小demo

1.设置Centos7的端口转发功能

cat >> /etc/sysctl.conf <<-'EOF'
net.ipv4.ip_forward=1
vm.max_map_count=655360 
EOF

sysctl -p

/etc/sysctl.conf 文件中设置一些系统参数。以下是一些示例:

  1. net.ipv4.ip_forward:设置 IPv4 接口将数据包转发到其他 IP 地址的功能。这通常用于网络设置,如在 VPN 环境中保持连接。

  2. vm.max_map_count:设置虚拟内存的最大数量。这通常用于优化 CPU 使用率和系统资源的利用率。

设置完 /etc/sysctl.conf 文件后,您可以使用以下命令将更改应用到您的系统中:

sysctl -p

如果您的 Linux 发行版不同,请使用相应的命令。

2.在docker中创建macvlan

docker network create -d macvlan \
--subnet=192.168.31.0/24 \
--ip-range=192.168.31.0/24 \
--gateway=192.168.31.1 \
-o parent=ens33 \
macvlan31

这段代码是使用docker network创建一个名为macvlan31的桥接网络。

解释如下:

  1. -d 表示使用Docker daemon作为网络的后台进程。

  2. –subnet 指定了网络的子网掩码,这里是192.168.31.0/24。

  3. –ip-range 指定了网络的IP地址范围,这里是192.168.31.0/24。

  4. –gateway 指定了网络的网关地址,这里是192.168.31.1。

  5. -o parent 表示创建网络时的父容器是ens33。

整句的含义是:创建一个名为macvlan31的桥接网络,子网掩码为192.168.31.0/24,IP地址范围为192.168.31.0/24,网关地址为192.168.31.1,网络容器是ens33,该网络将使用macvlan命名空间。

3.创建docker容器时指定相应的ip地址

docker -itd --restart aways --network macvlan31 --ip=192.168.31.240 -p 80:80 httpd

这段代码是使用Docker运行一个名为httpd的容器,并将容器绑定到一个名为macvlan31的网络上,同时指定了IP地址为192.168.31.240,端口号为80,并将容器的80端口映射到主机的80端口上。

这段代码的主要目的是:

  • 使用macvlan31作为主网络(如果可以运行MacVlan31),将容器连接到该网络。

  • 指定容器的IP地址为192.168.31.240。

  • 使用主机的80端口和IP地址的前4位/16为掩码,将容器的80端口映射到主机的80端口上。

这样,主机可以访问容器的80端口并访问主机上的Web应用程序或其他资源。同时,容器可以访问主机上的其他资源,并将其映射到自己的80端口上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不可大东

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

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

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

打赏作者

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

抵扣说明:

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

余额充值