docker的macvlan网络驱动

Docker 的 macvlan 网络驱动允许容器在物理或虚拟网络接口上获得自己的 MAC 地址和 IP 地址,从而可以在同一物理网络中直接进行通信,而不需要经过 Docker 的 NAT 层。这种模式特别适合需要高性能、低延迟的容器间通信,例如微服务架构中的服务发现和负载均衡。

创建 Macvlan 网络的步骤如下

  1. 查看物理网卡名称,并开启网卡混杂模式。可以通过 ifconfig 网卡名称 promisc 命令来开启混杂模式。
  2. 使用 docker network create 命令创建 macvlan 网络。例如:
    1
    docker network create -d macvlan --gateway 192.168.0.1 --subnet 192.168.0.0/24 -o parent=enp1s0 macvlan
    其中 -d macvlan 指定网络驱动为 macvlan,--gateway 指定网关,--subnet 指定子网范围,-o parent=物理网卡名称 指定物理网卡。

容器运行时指定网络

1
docker run -d --name test --net=macvlan --ip=192.168.0.200 busybox ping baidu.com

使用 --net=网络名称 设置容器到创建好的 macvlan 网络,--ip=某个未被占用的ip 设置容器固定 IP 地址,避免自动分配导致跟二层的其他设备冲突。

Macvlan 网络的特点

  • 高性能:避免了 NAT 层的延迟和性能损耗。
  • 低延迟:直接在物理网络上进行通信,减少了延迟。
  • 安全性:每个容器都有自己的 MAC 地址,增加了安全性。
  • 灵活性:可以自定义每个容器的 IP 地址和子网。

使用场景

  • 微服务架构:服务之间需要直接通信,例如服务发现和负载均衡。
  • 游戏服务器:需要低延迟的客户端和服务器通信。
  • 物联网(IoT):设备之间需要直接通信。

局限性

  • 不支持跨主机通信:Macvlan 网络仅在同一个物理网络内有效。
  • 配置复杂性:相对于默认的 bridge 网络,macvlan 网络的配置相对复杂。

在配置 Macvlan 网络时,需要确保 Docker 版本支持 Macvlan 网络,并且在物理网络接口上启用 Macvlan 功能。此外,可能需要修改 Docker 主机的网络设置,以确保主机和容器可以正确通信。