Docker 网络 之 MacVlan

更多文章:WorkMap技术博客

MacVlan

有些应用程序,特别是老的应用程序或监视网络流量的应用程序,期望直接连接到物理网络。在这种情况下,可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配一个MAC地址,使其看起来像是直接连接到物理网络的物理网络接口。

在这种情况下,需要指定Docker主机上要用于Macvlan的物理接口,以及网络的子网和网关。

也可以使用不同的物理网络接口,隔离同一主机上的多个Macvlan网络。

注意

  • 由于IP地址耗尽或“VLAN扩散”(网络中有大量的MAC地址),可能会降低网络质量。

  • 网络设备需要能够处理“混杂模式”,即:一个物理接口可以分配多个MAC地址。

  • 尽量优先使用bridge(单个Docker主机)或overlay(跨多个Docker主机)网络。

前置条件

  • 大多数云提供商会阻止 macvlan 网络。可能需要连接到物理接口。

  • macvlan 网络驱动程序仅适用于 Linux 主机,不支持 Docker Desktop for Mac、Docker Desktop for Windows 或 Docker EE for Windows Server。

  • 至少 3.9 版本的 Linux 内核,推荐使用 4.0 或更高版本。

参数

  • macvlan_mode

    设置 Macvlan 模式。可以是以下之一:bridge,vepa,passthru,private。默认是bridge

  • parent

    指定要使用的父接口。

创建Macvlan 网络

Bridge模式(直接连接到主机的物理设备)
  • 创建Macvlan网络
    docker network create -d macvlan \
    --subnet=172.16.86.0/24 \
    --gateway=172.16.86.1 \
    -o parent=eth0 \
    my-macvlan-net
    
  • 创建容器,并连接到该macvlan
    docker run --rm -dit \
    --network my-macvlan-net \
    --name my-macvlan-alpine \
    alpine:latest \
    ash
    
  • 查看容器信息,其中的Networks部分,可以看到容器分配了mac地址
    docker container inspect my-macvlan-alpine
    
    输出:
    "Networks": {
    "my-macvlan-net": {
        "IPAMConfig": null,
        "Links": null,
        "Aliases": [
            "bec64291cd4c"
        ],
        "NetworkID": "5e3ec79625d388dbcc03dcf4a6dc4548644eb99d58864cf8eee2252dcfc0cc9f",
        "EndpointID": "8caf93c862b22f379b60515975acf96f7b54b7cf0ba0fb4a33cf18ae9e5c1d89",
        "Gateway": "172.16.86.1",
        "IPAddress": "172.16.86.2",
        "IPPrefixLen": 24,
        "IPv6Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "MacAddress": "02:42:ac:10:56:02",
        "DriverOpts": null
        }
    }
    
  • 查看容器内部的网络信息
    docker exec my-macvlan-alpine ip addr show eth0
    
    输出
    9: eth0@tunl0: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:10:56:02 brd ff:ff:ff:ff:ff:ff
    inet 172.16.86.2/24 brd 172.16.86.255 scope global eth0
      valid_lft forever preferred_lft forever
    
  • 删除容器及macvlans
    docker container stop my-macvlan-alpine
    docker network rm my-macvlan-net
    
802.1Q trunk bridge 模式(连接到主机上,基于802.1Q协议创建的VLAN子设备)
  • 创建eth0.50 Vlan,并以此作为parent,创建Macvlan
    docker network create -d macvlan \
      --subnet=192.168.50.0/24 \
      --gateway=192.168.50.1 \
      -o parent=eth0.50 macvlan50
    
支持双栈IPv4/IPv6的Macvlan网络
docker network create -d macvlan \
    --subnet=192.168.216.0/24 --subnet=192.168.218.0/24 \
    --gateway=192.168.216.1 --gateway=192.168.218.1 \
    --subnet=2001:db8:abc8::/64 --gateway=2001:db8:abc8::10 \
     -o parent=eth0.218 \
     -o macvlan_mode=bridge macvlan216

相关推荐

Docker Build (二):构建上下文

介绍了Docker build过程中是如何传递以及读取上下文信息

mind_transition的博客 519

Docker Daemon日志

介绍Docker Daemon日志,怎么查看日志,怎么配置日志,以及debug

mind_transition的博客 601

Docker日志驱动 splunk

介绍docker日志驱动 splunk的使用

mind_transition的博客 438

Docker日志驱动 journald

介绍docker日志驱动程序journald的使用

mind_transition的博客 554

Docker 内置日志驱动的使用说明(syslog,fluentd)

docker内置日志驱动,syslog,fluentd

mind_transition的博客 740

Docker 内置日志驱动的使用说明(local,logentries,json-file,gelf)

Docker 内置日志驱动的使用说明(local,logentries,json-file,gelf)

mind_transition的博客 1859

docker日志及配置(二)

介绍docker双重日志的配置,第三方日志驱动的安装和使用

mind_transition的博客 731

Docker日志及配置

介绍了docker的日志驱动

mind_transition的博客 2141

DevOps工具 之 源代码管理 Apache-Allura

本文介绍了源代码管理工具Apache Allura

mind_transition的博客 396

Docker网络 之 IPvlan

本文介绍了Docker网络驱动,IPvlan的基本原理和使用方式

mind_transition的博客 659

DevOps实践 之 部署流水线

使用WorkMap研发管理平台进行DevOps实践,介绍了部署流水线的使用方式。

mind_transition的博客 550

Docker 网络

Docker网络简介,及网络驱动介绍

mind_transition的博客 252

安装Docker DeskTop-Mac系统

MacOs上安装Docker DeskTop

mind_transition的博客 1625

Docker存储(三)绑定挂载和tmpfs的使用

docker存储中绑定挂载和tmpfs的使用

mind_transition的博客 487

Docker存储(二)卷的使用

docker 卷的基本使用方式

mind_transition的博客 283

DevOps实践之(一)WorkMap研发管理平台

WorkMap研发管理平台,致力于解决软件产品生命周期遇到的问题,基于多年的DevOps实践经验,打造一站式DevOps平台及技术管理解决方案,助力企业高质量、低成本、无风险的快速交付客户价值。

mind_transition的博客 344

Docker存储(一)

docker存储功能简介

mind_transition的博客 205

Docker Build系列之一:简介

Docker Build功能的架构、原理、使用方式

mind_transition的博客 1443

安装Docker DeskTop之Window系统,WSL2

在windows系统中安装docker,基于WSL2

mind_transition的博客 688

安装Docker Engine之二:Linux系统-Debian、RHEL、SLES、Fedora

在Linux系统(Debian,RHEL,SLES,Fedora)中安装Docker Engine

mind_transition的博客 256

安装Docker Engine之一:Linux系统-ubuntu 和CentOS

Linux系统中docker engine的安装步骤

mind_transition的博客 204

Docker简介

docker简介,介绍了什么是容器,容器与虚拟化的区别,docker做了什么,有什么作用,以及一个docker容器运行的简单过程

mind_transition的博客 146

Docker常用命令(三)——资源控制

通过资源控制,来管理或限制软件的运行风险。

mind_transition的博客 175

Docker常用命令(二)

docker卷、网络等常用命令

mind_transition的博客 101

Docker常用命令(一)

常用docker命令整理,包含docker服务的启动,docker镜像命令,docker容器命令

mind_transition的博客 224

DevOps的前世、今生和未来

DevOps的发展历程

mind_transition的博客 511
上一篇: DevOps工具 之 源代码管理 Apache-Allura
下一篇: Docker日志及配置
WorkMap研发管理平台
WorkMap研发管理平台 WorkMap研发管理平台官方账号 WorkMap研发管理平台官方账号
博客等级 码龄3年 6粉丝 27原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值