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

怎样在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 
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端口上。

你可能感兴趣的:(运维笔记,docker,tcp/ip,网络)