怎样在docker中使用macvlan创建可以独立ip访问的容器
- macvlan是什么
- macvlan的小demo
- 1.设置Centos7的端口转发功能
- 2.在docker中创建macvlan
- 3.创建docker容器时指定相应的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
EOFsysctl -p
在 /etc/sysctl.conf
文件中设置一些系统参数。以下是一些示例:
-
net.ipv4.ip_forward:设置 IPv4 接口将数据包转发到其他 IP 地址的功能。这通常用于网络设置,如在 VPN 环境中保持连接。
-
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的桥接网络。
解释如下:
-
-d 表示使用Docker daemon作为网络的后台进程。
-
–subnet 指定了网络的子网掩码,这里是192.168.31.0/24。
-
–ip-range 指定了网络的IP地址范围,这里是192.168.31.0/24。
-
–gateway 指定了网络的网关地址,这里是192.168.31.1。
-
-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端口上。