使用Docker的macvlan为容器提供的桥接网络

对于了解Docker容器网络的朋友,我想对虚拟机的网络也不会陌生,毕竟我们是跟随这个时代一起学习和进步的人。相比VM,Docker的网络也在逐步走向成熟,本文主要针对其中的macvlan做下简单的介绍。

Why macvlan?

首先我们去对比下VM和Docker中不同的网络,这样会比较清楚。

VM Docker
NAT bridge
Bridged macvlan, overlay等
Host-only bridge

NAT

VM中的NAT对应Docker中的bridge,虽然叫bridge,但和VM的bridged网络却不一样,其原理是在宿主机上虚出一块网卡bridge0,然后所有容器会桥接在这块网卡的网段上。默认情况下容器能访问外部网络,但外部网络无法访问容器,因此需要通过暴露容器端口的方式(docker run -p)让外部网络访问容器内的服务。此时docker会在宿主机上建立一条NAT路由规则,将子网中容器内的服务通过端口转发(port forwarding)的方式暴露给外部网络。当bridge网络下不去暴露任何端口,那么基本上等同于VM的Host-only网络。

Bridged

桥接网络带来的好处是,不需要通过NAT的端口映射即可实现容器内服务的暴露,当容器桥接到物理网络时,容器就是物理网络中的一台主机,使得容器间及容器与物理主机间实现互通。上面提到Docker中默认的bridge并不是真正的桥接网络,而Docker的网络是可以灵活自定义的,可以通过多种方式实现真正的桥接。其中可以通过overlay网络驱动实现,多主机多容器的桥接,但需要依赖额外的key-value服务来保存网络拓扑信息。另外一些第三方工具也能够实现桥接模式,如pipework等。桥接网络可以使容器网络部署简单化,因此Docker官方在1.12版本之后引入了macvlan网络驱动,这样我们可以更简单的为容器配置桥接网络。

Macvlan

顾名思义,macvlan的原理是在宿主机物理网卡上虚拟出多个子网卡,通过不同的MAC地址在数据链路层(Data Link Layer)进行网络数据转发的,它是比较新的网络虚拟化技术,需要较新的内核支持(Linux kernel v3.9–3.19 and 4.0+)。

Using macvlan

docker network create -d macvlan     --subnet=192.168.1.0/24     --gateway=192.168.1.1      -o parent=enp4s0 mcv

# 解释:
# 1.创建macvlan网络,使用macvlan网络驱动
# 2.指定要桥接的网络地址
# 3.指定网关
# 4.设置要在宿主机上那块网卡上建立虚拟子网卡

# 测试
docker  run --net=mcv --ip=192.168.1.99 -itd alpine /bin/sh
# 运行容器,指定刚建好的macvlan网络,并制定IP地址。# 如果不指定IP,会通过IPAM分配IP,默认是从192.168.1.2开始分配。# 注意,分配时并不会判断地址冲突,可以通过docker的network命令去指定分配方式,这里不做赘述。

docker  run --net=mcv -it --rm alpine /bin/sh
# 运行另外一个容器,进行连通性测试
ping 192.168.1.99
ping 192.168.1.1

另外,macvlan还支持802.1q trunk等更为复杂的网络拓扑结构,大家可以深入学习。

[via] Get started with Macvlan network driver

[via] Linux 上虚拟网络与真实网络的映射

时间: 2024-11-05 02:18:40

使用Docker的macvlan为容器提供的桥接网络的相关文章

开源Cillium项目为容器提供强大的网络功能

试验性的开源Cillium项目使用Linux内核的一项现有特性,为容器提供高速.强大的网络功能. 网络功能始终是使用容器时最头痛的棘手问题之一.连Google开源的容器集群管理系统Kubernetes在实现网络功能方面也存在着限制,虽然它正迅速成为容器编排的首选技术.这让网络安全之类的棘手问题变得更棘手了. 现在,一项名为Cilium的开源项目试图基于Linux内核中所用的技术,为容器提供一种新的网络方法DD该项目得到了谷歌的部分赞助,目的在于为容器提供更好的网络安全和更简单的网络模型. 以BP

docker数据卷备份恢复以及配置桥接网络

笔记内容:docker数据卷备份恢复以及网络相关笔记日期:2018-02-06 25.9 数据卷备份恢复 25.10 docker网络模式 25.11 opration not permitted错误 25.12 配置桥接网络 25.9 数据卷备份恢复 备份: 如果数据卷容器的共享目录已经挂载到了本地宿主机的磁盘上,那么就无需进行数据卷备份.没有进行挂载到本地,而是作为共享目录的数据卷容器,就得定期将数据卷进行一个备份,不然如果数据卷被删除的话,数据也会丢失. 假设数据卷容器共享的目录是data

Docker:macvlan实现容器跨主机通信 [十四]

一.什么是macvlan 1.macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址, 2.即多个 interface,每个 interface 可以配置自己的 IP. 3.macvlan 本质上是一种网卡虚拟化技术 二.跨主机通信 1.创建macvlan 1.主机luoahong [[email protected] ~]# docker network create --driver macvlan --subnet 10.0.0.0/2

10: docker 跨主机的容器间通信(macvlan / overlay )

docker 跨主机的容器间通信(macvlan) 作用: 虚拟多个mac地址,虚拟出多个网卡给容器用. #创建macvlan网络 docker network create --driver macvlan(要创建的网络类型) --subnet  子网IP段  --gateway 本机网关 -o parent=本机网卡  创建的macvlan网络名称 [[email protected] ~]# docker network create --driver macvlan --subnet 1

docker技术剖析--docker网络(二)docker宿主机之间容器互通

http://hongge.blog.51cto.com/ 多台物理主机之间的容器互联(暴露容器到真实网络中) docker 默认的桥接网卡是 docker0 .它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起,如下: 这样就可以把这个网络看成是一个私有的网络,通过 nat 连接外网,如果要让外网连接到容器中,就需要做端口映射,即 -p 参数. 如果在企业内部应用,或则做多个物理主机的集群,可能需要将多个物理

Docker管理套件使容器化变得更加井然有序

Docker之前发布了一个新的容器控制中心,称为Docker数据中心(DDC),其设计目的是用于大型和小型企业创建.管理和分发容器的一个集成管理控制台. DDC是由包括Docker Universal Control Plane(也是同时发布的)和Docker Trusted Registry等不同的商业组件组成,它也包括了开源组件比如Docker Engine.这个产品让企业在一个中心管理界面中就可以管理整个Docker化程序的生命周期,更加方便. 负责产品管理的SVP Scott Johns

Docker的镜像、容器和仓库

Docker本身的镜像是构建在其本身的文件系统之上的,Docker有很多种类的文件系统,Docker所支持的文件系统有以下几种:Aufs.devicemapper.btrfs和VFS,其中前三种是联合文件系统,可以支持分层,可以快速迭代,可以回滚.VFS 不支持.平时用的最多的是aufs 和devicemapper.Aufs(advanced multilayered unification filesystem), 直译过来就是高级分层联合文件系统,做为一种Union FS ,它支持将不同的目

Docker 网络之pipework 工具(2)将Docker容器配置到本地网络环境中

为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求.这个需求其实很容易实现,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.下面我们来操作一下,我主机A地址为192.168.1.107/24,网关为192.168.1.1,需要给Docker容器的地址配置为192.168.1.150/24.在主机A上做如下操作:安装pipework下载地址:wgethttps://github.com/jpetazz

Docker的镜像和容器

Docker image详细介绍 在之前的介绍中,我们知道docker images 是docker的三大组件之一. docker把下载的 images 存储到docker主机上,如果一个 image 不在主机上,docker会从一个镜像仓库下载,默认的仓库是  DOCKER HUB  公共仓库. 接下来将介绍更多关于docker images 的内容,包括: 使用和管理本地主机上的 images 创建一个基础的 images 上传 images 到docker hub (公共 images 仓