docker从零开始网络(六)Macvlan
使用Macvlan网络
某些应用程序,尤其是遗留应用程序或监视网络流量的应用程序,希望直接连接到物理网络。在这种情况下,您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配MAC地址,使其看起来像是直接连接到物理网络的物理网络接口。在这种情况下,您需要在Docker主机上指定一个物理接口,用于Macvlan,以及Macvlan的子网和网关。您甚至可以使用不同的物理网络接口隔离Macvlan网络。请记住以下事项:
- 由于IP地址耗尽或“VLAN传播”,很容易无意中损坏您的网络,在这种情况下,您的网络中有大量不同的唯一MAC地址。
- 您的网络设备需要能够处理“混杂模式”,其中一个物理接口可以分配多个MAC地址。
- 如果您的应用程序可以使用桥接器(在单个Docker主机上)或覆盖层(跨多个Docker主机进行通信),那么从长远来看,这些解决方案可能会更好。
创建一个macvlan网络
创建Macvlan网络时,它可以处于桥接模式或802.1q干线桥接模式。
在桥接模式下,Macvlan流量通过主机上的物理设备。
在802.1q中继桥接模式下,流量通过Docker在运行中创建的802.1q子接口。这使您可以在更细粒度的级别上控制路由和筛选。
桥接模式
要创建与给定物理网络接口桥接的Macvlan网络,请使用--driver macvlan该docker network create命令。您还需要指定parent,这是流量将在Docker主机上实际通过的接口。 网络名称是pub_net
[root@docker11 ~]# docker network create -d macvlan --subnet=172.16.86.0/ --gateway=172.16.86.1 -o parent=eth0 pub_net
7479d90651e92d8971916e678dceaad5c6deb845b7af30802b028afa022c98d0
如果您需要排除在Macvlan网络中使用的IP地址,例如当已使用给定的IP地址时,请使用--aux-addresses:
$ docker network create -d macvlan \
--subnet=192.168.32.0/ \
--ip-range=192.168.32.128/ \
--gateway=192.168.32.254 \
--aux-address="my-router=192.168.32.129" \
-o parent=eth0 macnet32
192.168.32.128/25 意思就是地址范围从 192.168.32.128 255.255.255.128 网络名称是macnet32
802.1q中继桥接模式
如果指定parent包含点的接口名称,例如eth0.50,Docker将其解释为子接口eth0并自动创建子接口。
[root@docker11 ~]# docker network create -d macvlan \
--subnet=192.168.50.0/24 \
--gateway=192.168.50.1 \
-o parent=eth0. macvlan50
cd6369cc9f81ca163f1fcd6b7f36db61276f0f750133e0f8812ce56697874cdc
使用ipvlan而不是macvlan
在上面的示例中,您仍在使用L3网桥。您可以使用ipvlan ,然后获得L2桥接。指定-o ipvlan_mode=l2。 需要内核版本4.0或以上
$ docker network create -d ipvlan \
--subnet=192.168.210.0/ \
--subnet=192.168.212.0/ \
--gateway=192.168.210.254 \
--gateway=192.168.212.254 \
-o ipvlan_mode=l2 ipvlan210
使用IPv6
如果已将Docker守护程序配置为允许IPv6,则可以使用双栈IPv4 / IPv6 Macvlan网络。
[root@docker11 ~]# 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
65a2dc885f5dd2778089ba636a2dc1050331a4f83f2b2ff3f509e6df5b348a3d

使用macvlan网络进行联网
本系列教程涉及连接到macvlan网络的网络独立容器。在这种类型的网络中,Docker主机在其IP地址接受对多个MAC地址的请求,并将这些请求路由到适当的容器。有关其他网络主题,请参阅 概述。
目标
这些教程的目标是设置桥接macvlan网络并将容器连接到该网络,然后设置802.1q集群macvlan网络并为其附加容器。
先决条件
大多数云提供商阻止
macvlan网络。您可能需要物理访问您的网络设备。在
macvlan网络驱动程序仅适用于Linux主机和Windows,或Windows Server dockerEE,不支持Mac的docker,。您至少需要Linux内核版本3.9,建议使用4.0或更高版本。
这些示例假设您的以太网接口是
eth0。如果您的设备具有不同的名称,请改用它。
bridge的例子
在简单的网桥示例中,您的流量通过eth0,Docker使用其MAC地址将流量路由到您的容器。要联网网络上的设备,您的容器似乎已物理连接到网络。
创建一个
macvlan名为的网络my-macvlan-net。将subnet,,gateway和parent值修改为在您的环境中有意义的值。
[root@benjamincloud ~]# docker network create -d macvlan \
> --subnet=172.16.86.0/ \
> --gateway=172.16.86.1 \
> -o parent=eth0 \
> my-macvlan-net
eae982543504a4951eeaad53f31c1c6442cde5844385e80600bf619be340f091
您可以使用docker network ls和docker network inspect pub_net 命令来验证网络是否存在且是否为macvlan网络。


2.启动alpine容器并将其连接到my-macvlan-net网络。该 -dit标志在后台启动容器。该--rm标志表示容器在停止时被移除
[root@benjamincloud ~]# docker run --rm -itd --network my-macvlan-net --name my-macvlan-alpine alpine:latest ash


3.检查my-macvlan-alpine容器并注意MacAddress密钥中的Networks密钥:

4.通过运行几个docker exec命令,查看容器如何看到自己的网络接口。
[root@benjamincloud ~]# docker exec my-macvlan-alpine ip addr show eth0
: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu qdisc noqueue state UNKNOWN
link/ether ::ac::: brd ff:ff:ff:ff:ff:ff
inet 172.16.86.2/ brd 172.16.86.255 scope global eth0
valid_lft forever preferred_lft forever
[root@benjamincloud ~]# docker exec my-macvlan-alpine ip route
default via 172.16.86.1 dev eth0
172.16.86.0/ dev eth0 scope link src 172.16.86.2
5.停止容器(Docker因--rm标志而删除它),然后删除网络。

[root@benjamincloud ~]# docker network rm my-macvlan-net
my-macvlan-net
802.1q集群桥示例
在802.1q中继网桥示例中,您的流量通过eth0(被叫eth0.10)子接口流动,Docker使用其MAC地址将流量路由到您的容器。要联网网络上的设备,您的容器似乎已物理连接到网络。
创建一个
macvlan名为的网络my-8021q-macvlan-net。将subnet,,gateway和parent值修改为 在您的环境中有意义的值。
[root@benjamincloud ~]# docker network create -d macvlan --subnet 172.16.86.0/ --gateway 172.16.86.1 -o parent=eth0. my-8021q-macvlan-net
0c3d8cfdfc34a00a40317cf0d9d8db32b29a9477cde24e6458c99a1a1592ec65


2.启动alpine容器并将其连接到my-8021q-macvlan-net 网络。该-dit标志在后台启动容器,但让你重视它。该--rm标志表示容器在停止时被移除。
[root@benjamincloud ~]# docker run --rm -itd \
> --network my-8021q-macvlan-net \
> --name my-second-macvlan-alpine \
> alpine:latest \
> ash
6971038a66ebf529072308d9160c7322e85d58c2c52956006f4f3dead502f594
3.检查my-second-macvlan-alpine容器并注意MacAddress 密钥中的Networks密钥:

4.通过运行几个docker exec命令,查看容器如何看到自己的网络接口。


5.停止容器(Docker因--rm标志而删除它),然后删除网络。
[root@benjamincloud ~]# docker stop my-second-macvlan-alpine
my-second-macvlan-alpine
[root@benjamincloud ~]# docker network rm my-8021q-macvlan-net
my-8021q-macvlan-net
docker从零开始网络(六)Macvlan的更多相关文章
- docker从零开始网络(一)概述
概述 预计阅读时间: 4分钟 Docker容器和服务如此强大的原因之一是您可以将它们连接在一起,或者将它们连接到非Docker工作负载.Docker容器和服务甚至不需要知道它们部署在Docker上,或 ...
- docker从零开始网络(四 ) host网络
使用主机网络 如果host对容器使用网络驱动程序,则该容器的网络堆栈不会与Docker主机隔离.例如,如果您运行绑定到端口80 host的容器并使用网络,则容器的应用程序将在主机IP地址的端口80上可 ...
- docker从零开始网络(二)桥接网络
使用桥接网络 在网络方面,桥接网络是链路层设备,它在网络段之间转发流量.桥接网络可以是硬件设备或在主机内核中运行的软件设备. 就Docker而言,桥接网络使用软件桥接器,该软件桥接器允许连接到同一桥接 ...
- docker从零开始网络(七) 配置daemon和容器
启用IPv6支持 在Docker容器或swarm服务中使用IPv6之前,需要在Docker守护程序中启用IPv6支持.之后,您可以选择将IPv4或IPv6(或两者)与任何容器,服务或网络一起使用. 注 ...
- docker从零开始网络(五)null网络
禁用容器的网络连接 预计阅读时间: 1分钟 如果要完全禁用容器上的网络堆栈,可以--network none在启动容器时使用该标志.在容器内,仅创建环回设备.以下示例说明了这一点. 1.创建容器. [ ...
- docker从零开始网络(三) overly(覆盖)网络
使用overly网络 该overlay网络驱动程序会创建多个docker进程主机之间的分布式网络.该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地进行通信.Dock ...
- docker网络之macvlan
macvlan接口类型简单说类似于子接口,但相比子接口来说,macvlan接口拥有自己独立的mac地址,因此使用macvlan接口可以允许更多的二层操作.macvlan有四种模式:VEPA,bridg ...
- Docker源码分析(六):Docker Daemon网络
1. 前言 Docker作为一个开源的轻量级虚拟化容器引擎技术,已然给云计算领域带来了新的发展模式.Docker借助容器技术彻底释放了轻量级虚拟化技术的威力,让容器的伸缩.应用的运行都变得前所未有的方 ...
- Docker学习(六): 网络使用与配置
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
随机推荐
- Java FTP下载文件以及编码问题小结
问题 之前在开发过程中,遇到了一点问题,我要访问一个FTP服务器去下载文件详细情况如下: 1. 需要传入一个可能为中文的文件名: 2. 通过文件名去FTP上寻找该文件: 3. FTP服务器的命名编码为 ...
- arm单板上移植gdb
虚拟机 : vmware 12 image: ubuntukylin 14.04.1 系统版本:Linux dancy 3.13.0-32-generic #57-Ubuntu SMP Tue Jul ...
- iOS版微信开发小结(微信支付,APP跳转微信公众号)
最近公司心血来潮,一心要搞微信.废话不多说,直接上干货. 开发前准备: 1.在微信开发者平台获取开发者认证:(一年300元人民币) PS:具体流程按照微信流程指示操作即可,在这就不废话了. 2.下载微 ...
- 使用JSON数据格式模拟股票实时信息
JQueryStock.html <!DOCTYPE html> <head> <meta charset="UTF-8"> <title ...
- 【bzoj2141】排队 分块+树状数组
题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别, ...
- 常见的位运算技巧总结(膜wys)
看了wys的论文,感觉获得了不少新姿势 这里总结一下 #include <iostream> using namespace std; typedef unsigned int u32; ...
- Powershell快速入门
Powershell快速入门 来源: https://blog.csdn.net/u011054333/article/details/72567590 https://blog.csdn.net/u ...
- 【题解】APIO2007动物园
首先一眼感受到这题特别的性质……5个?这么小的,感觉就像是状压.脑补了一下,如果没有环的话应该很好做吧……有环怎么办?5真的很小的,随便乱搞肯定也可以.那就放在外面暴力枚举吧.然后正解就出来了. 然而 ...
- 安徽师大附中%你赛day4T1 金字塔 解题报告
金字塔 题目背景: \(Zdrcl\)带着妹子们来到了胡夫金字塔周边旅游, 发现这里正在进行一个有关金字塔的游戏 题目描述: 游戏规则如下: 1. 这里的金字塔是一个 \(N\) 阶的二维金字塔. 2 ...
- C++——派生类中的访问——可见性问题
C++中派生类对基类成员的访问形式主要有以下两种: 1.内部访问:由派生类中新增成员对基类继承来的成员的访问. 2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在 ...