http://www.dockerinfo.net/2973.html

docker 手册;http://c.biancheng.net/view/3118.html

1、默认网络

在宿主机部署好Docker Engine后会默认创建三种网络:bridge,host和none。

# docker network ls

NETWORK ID          NAME      DRIVER     SCOPE

93dab79cdb5a        bridge       bridge      local               

c920c9c10e62         host            host        local              

d2a11ea1c70a        none            null         local

在创建容器时可使用–network=bridge/host/none来指定容器所在的网络。

Bridge

默认的bridge网络是我们比较熟悉的docker0,它在安装完Engine后自动创建,并且在创建容器不指定network参数的时候默认就是该网络。

如上图,Docker的bridge网络和虚拟化的NAT网络模式很相似。容器通过docker0分配到各自的IP地址并可以通过eth0与外界通信(outbound)。若要实现容器中应用的跨主机访问,则需要将容器的端口映射到主机端口,客户端通过访问主机的IP和Port来访问容器应用(inbound)。该模式是单节点或小规模Docker环境的常用模式,易于理解,使用成本也不高。

Host

Host网络让容器直接使用宿主机的网络,简单理解就是Host网络的容器使用的IP地址等网络配置信息和宿主机一样。

如上图,Host网络中的容器使用的是主机的网络配置。容器中的应用可直接通过主机IP+端口的方式进行访问而无需映射。该模式下每个容器的端口不能重复,否则会出现冲突。而且容器和主机网络没做隔离,得注意安全方面的考量。

None

None网络将容器加网入到容器自有网络,有自己的Network Namespace,但没有网卡等网络相关的配置信息,无法和宿主机通信或外部主机通信。

如上图,None网络中的容器没有网络配置信息(仅一个lo0,无其他网卡和IP配置)。该模式将容器的网络管理从Docker中剥离出来,用户可根据自己的需求自定义容器的网络(如使用ovs来管理)。看似最简单,实则最复杂。

2、用户定义网络

Bridge

用户也可以自定义bridge网络,使用方式基本跟默认的bridge一样,映射出容器中应用或服务的端口供其他应用访问即可。

Container

Other Container网络为容器级的复用网络,实现多个容器共用一个网络配置。容器间共享Network Namespace、IP地址和端口区间,其他相关的Namespace依然隔离。

如上图,容器A和容器B共用网络,有点类似kubernetes的Pod,跟之前提到的Host模式也有点像。只不过一个是容器和主机共用,一个是容器和容器共用。容器A和B之间的通信基于localhost进行,提升了网络传输效率。

以上介绍的几种网络主要适用于单节点或者小规模的容器环境,在规模比较大的容器集群环境中,实现多主机容器间的通信和调度是非常必要的。下面介绍一下Docker原生的多主机网络。

Overlay

Overlay网络是在现有的网络架构之上构建一个不同主机容器间的二层虚拟网络,以实现容器跨主机的通信,多用于规模比较大的容器集群环境。

Docker的Overlay网络需要基于键值存储来实现,K-V存储里面存放了各个主机上容器和网络相关的信息。

如上图,Overlay将多主机中的容器划分到一个虚拟的二层网络中,以实现容器的跨主机通信。

Docker Overlay网络的构建支持VxLAN技术,将二层的MAC地址封装到4层的UDP数据包中,只要传输层端到端可达,则可以基于VxLAN隧道实现容器间大二层网络的构建,这也体现了Overlay网络与底层网络基础架构的相对无关性。

Macvlan

Macvlan网络虚拟化技术的引进让我们回到了熟悉的企业虚拟化环境中虚机网络的管理模式,即将容器连接到现有的二层网络中,每个容器都拥有一个跟宿主机同一VLAN的IP地址,从而实现容器跨主机的通信。

上图为Macvlan的bridge模式,该模式跟我们平时接触的桌面版虚拟化软件的网络桥接模式类似,容器直接接入跟主机相同的二层网络并获得独立的IP地址。

上图为Macvlan的Trunk模式,该模式跟企业虚拟化常用网络模式类似。主机网卡绑定了多个不同VLAN的IP地址,主机中的容器基于主机不同VLAN的网络获取对应VLAN的独立IP地址,实现容器跨主机通信的同时加强了网络层的安全性。

Macvlan的出现更多的将容器网络管理剥离出Docker本身,容器变得跟虚拟机一样基于现有的企业网络来获取所需要的网络配置信息,初探感觉比Overlay来得简单并易于理解,但具体是否这样还需实操证明。

 

Docker原生网络技术简介的更多相关文章

  1. docker的网络-单主机(三种原生网络)none、host、bridge

    docker的网络分为:单主机.跨主机 这篇先说:单主机 我们先说一下docker的原生网络模式 网络模式 简介 优点 使用场景 none 空网络,没有网络 此网络与外界隔离,安全度非常高 适合公司内 ...

  2. Docker核心实现技术(命名空间&控制组&联合文件系统&Linux网络虚拟化支持)

    作为一种容器虚拟化技术,Docker深度应用了操作系统的多项底层支持技术. 早期版本的Docker是基于已经成熟的Linux Container(LXC)技术实现的.自Docker 0.9版本起,Do ...

  3. Web技术的发展 网络发展简介(三)

    在上一篇文章中,对TCP/IP通信协议进行了简单的介绍 通信协议是通信的理论基石,计算机.操作系统以及各种网络设备对通信的支持是计算机网络通信的物质基础 而web服务则是运行于应用层,借助于应用层的协 ...

  4. 五、docker网络技术

    五 docker网络技术 1.本章环境: 源码文件目录: 2.网络基础回顾 通道: NAT将私有地址和端口号翻译成公有的地址和端口号项某网站发出数据包.某网站根据数据表查出私有ip和端口号返回数据. ...

  5. Kube-OVN:大型银行技术团队推荐的金融级云原生网络方案

    近日,由TWT社区主办的2021容器云职业技能大赛团队赛的冠军作品:<适用于大中型银行的云原生技术体系建设方案>中,Kube-OVN成为银行技术团队推荐的金融级云原生网络最佳实践.本文部分 ...

  6. 5.云原生之Docker容器网络介绍与实践

    转载自:https://www.bilibili.com/read/cv15185166/?from=readlist 例如, 当在一台未经过特殊网络配置的centos 或 ubuntu机器上安装完d ...

  7. 云原生网络代理(MOSN)的进化之路

    本文系云原生应用最佳实践杭州站活动演讲稿整理.杭州站活动邀请了 Apache APISIX 项目 VP 温铭.又拍云平台开发部高级工程师莫红波.蚂蚁金服技术专家王发康.有赞中间件开发工程师张超,分享云 ...

  8. docker——核心实现技术

    作为一种容器虚拟化技术,Docker深度应用了操作系统的多项底层支持技术. 早期版本的Docker是基于已经成熟的Linux Container(LXC)技术实现的.自从0.9版本起,Docker逐渐 ...

  9. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

随机推荐

  1. linux的一些目录结构

    home:家.用户的家. 普通用户的家目录文件在home下 例如:一个用户名为tom的用户,在home下就会存在tom的目录. root:超级管理员root的家 etc:存放配置文件 usr:存放共享 ...

  2. Html写作规范

    HTML是描述网页结构的超文本标记语言,HTML规范能够使HTML代码风格保持一致,使得HTML更容易理解和维护. 整体结构 用编辑器快捷键一键搞定 <!DOCTYPE html>---- ...

  3. Python gevent

    1\协程 import geventfrom gevent import monkeyimport requestsfrom bs4 import BeautifulSoupimport thread ...

  4. Light Explorer

    [Light Explorer] The Light Explorer allows you to select and edit light sources. Window> Lighting ...

  5. Mono vs IL2CPP

    [Mono vs IL2CPP]             参考:http://blog.csdn.net/gz_huangzl/article/details/52486255

  6. 运行PowerShell脚本

    [运行PowerShell脚本] powershell脚本以ps1为扩展名.最的一个是数字1,不是字母l. 当右键ps1文件时,会有用powershell运行的选项,选中这个选项即可运行. 团体pow ...

  7. MySQL Keynote

    [MySQL Keynote] 1.Keywords may be entered in any lettercase. The following queries are equivalent: 2 ...

  8. javax.servlet.http.HttpServletResponse.getStatus()I

    感谢作者分享:http://blog.csdn.net/szwangdf/article/details/42145463 -------------------------------------- ...

  9. 关于Windows下无法在MySQL安装目录找到配置文件my.ini

    目前5.7版本的MySQL的配置文件my.ini位于: C:\ProgramData\MySQL\MySQL Server 5.7

  10. centos如何查看磁盘剩余空间

    linux系统的Df命令是以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,命令格式: df -hl 显示格式为: 文件系统 容量 已用 可用 已用% 挂载点 /dev/hda5 487 ...