之前学习了单个host上的网络,我们知道单个host上的网络有:none,host,bridge和joined,他们解决了单个host上面的容器通信的问题;接下来我们讨论跨主机间容器通信的方案

跨主机的网络方案包括:

1.docker原生的overlay和macvlan

2.第三方方案:常用的包括flannel,weave,calico

docker 网络是一种非常活跃的技术领域,不断有新方案开发出来:

这么多的方案是通过:libnetwork以及CNM与docker集成在一起的

libnetwork&CNM

libnetwork是docker容器网络库,最核心的内容是其定义的container network model(CNM),这个模型对容器网络进行了抽象,由一下三类组件组成:

Sanbox:

Sandbox是容器的网络栈,包括容器的interface,路由表和DNS设置。linux network namespace是Sandbox的标准实现。Sandbox可以包含来自不同network的endpoint

Endpoint

Endpoint的作用是将Sandbox接入network。Endpoint的典型实现是veth pair,后面将举例子。一个Endpoint只能属于一个网络,也只能属于一个Sandbox

Network

network包含一组Endpoint,同一Network的endpoint可以直接通信。Network的实现可以是linux bridge,VLAN等

下面是CNM的示例:自己瞎画的,绝非盗图,哈哈哈

如图所示:有两个容器,一个容器一个Sandbox,第一个容器有两个Endpoint,一个连接到Network1中对应的endpoint1,一个连接到Network2中的endpoint2,这里体现了一个endpoint只能属于一个Sandbox,一个Network,因为endpoint是通过veth pair实现的,要一一对应;第二个容器也有一个Sandbox,endpoint连接到Network2;因为endpoint2与endpoint3都在Network2中,所以两个容器之间能够相互通信

libnetwork CNM 定义了容器的网络模型,按照该模型开发出的driver就能与docker host协同工作,实现容器网络。docker原生的driver包括none,bridge,overlay和macvlan,第三方driver包括flannel,weave,calico等

下面我们以docker bridge driver为例讨论libnetwork CNM是如何实现的

这张图我们在学习单个host网络的时候已经学习过

1.两个Network:默认网络“bridge”和自己创建的my_net2两个网络,实现方式是linux bridge:docker0和br-5d86。。。

2.三个Endpoint,由veth pair实现,一端vethxxx挂在linux bridge上,另一端eth0挂在容器内

3.三个Sandbox,由Network Namespace实现,每个容器有自己的Sandbox

centos7下安装docker(15.1跨主机网络)的更多相关文章

  1. centos7下安装docker(12.2自定义网络)

    通常默认的情况下我们使用的是docker的bridge的网络,用户也可以根据自己的业务需要,创建user-defined docker 提供三种user-defined网络驱动:bridge,over ...

  2. docker(一) Centos7下安装docker

    docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...

  3. CentOS7下安装docker(Docker系列1)

    CentOS7下安装docker 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方 ...

  4. centos7下安装docker与镜像加速

    1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...

  5. centos7下安装docker(15.2跨主机网络-overlay)

    为支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于VxLAN的overlay网络.VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网 ...

  6. centos7 下安装docker报错:You could try using...

    搞了台VPS,想要装docker,发现死活装不上,各种报错.之前系统是centos6,发现官方现在已经不支持centos6了,遂升级到centos7,然后还是出现下面这个错误. Error: Pack ...

  7. Docker系列04—跨主机网络方案(overlay/weave)

    在前面详细讲解了几种网络模式:none,host,bridge,container.他们解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信. 跨主机网络方案包括两大类: 1,docke ...

  8. centos7下安装docker(15.4跨主机网络-flannel)

    flannel是CoreOS开发的容器网络解决方案,flannel为每一个host分配一个subnet,容器从这些subnet中分配IP,这些IP可以在host之间路由,容器无需NAT和port ma ...

  9. centos7下安装docker(15.6docker跨主机网络---Weave)

    Weave是weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多个主机上的容器连接起来.对于容器来说,weave就像一个巨大的网络交换机,容器可以直接通信,无需NAT和端 ...

  10. centos7下安装docker(15.5容器跨主机网络--flanneld)

    flannel是由CoreOS研究的一种覆盖网络(overlay network)网络工具,目的是帮助每一个host主机有一个完整的子网: 功能是:让集群中不同节点的主机创建的容器都有一个唯一的虚拟I ...

随机推荐

  1. PHP定界符eof 的使用

    PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 ——按字符串输出的话, 肯定要有大量的转义符来对字符串中的引号等 ...

  2. mybatis_09关联查询_一对一

    复杂查询时,单表对应的po类已不能满足输出结果集的映射. 所以有些时候就需要关联查询_一对一:通过条件查询结果每个字段都唯一 一对一:模型里面有模型 一对多:模型里面有集合 多对多:集合里面有集合 方 ...

  3. SSM+Netty项目结合思路

    最近正忙于搬家,面试,整理团队开发计划等工作,所以没有什么时间登陆个人公众号,今天上线看到有粉丝想了解下Netty结合通用SSM框架的案例,由于公众号时间限制,我不能和此粉丝单独沟通,再此写一篇手记分 ...

  4. 【Spring】21、用spring目标对象处理Transaction rolled back because it has been marked as rollback-only

    在使用spring做事务管理时,很多人都会遇到这样一段异常: org.springframework.transaction.UnexpectedRollbackException: Transact ...

  5. [jQuery]相对父级元素的fixed定位

    (function($) {     var DNG = {};     //----------------------------------------------------/     // ...

  6. echarts雷达图点击事件 包含(2.x,3.85,4.02)测试

    最近看见别人问的问题,点击雷达图的拐点,获取点击数据的问题,直接上代码. echarts 2x 的点击事件 echarts配置问题:https://www.douban.com/note/509404 ...

  7. tornado 模板引擎

    在tornado的模板引擎中,有两种方式,UImethod与UImodule 自定义方法 在模板中调用方法: tornado:与Django一样使用{{}},但是对于for循环之类,Django以{% ...

  8. Android内存优化(三)详解内存分析工具MAT

    前言 在这个系列的前四篇文章中,我分别介绍了DVM.ART.内存泄漏和内存检测工具的相关知识点,这一篇我们通过一个小例子,来学习如何使用内存分析工具MAT. 1.概述 在进行内存分析时,我们可以使用M ...

  9. Android--获取手机联系人和Sim卡联系人

    最近公司做的一个放贷APP,要求后台偷偷获取用户的联系人来做风控,所以...(大家忽略就好) 获取手机联系人很简单,就是查询android的数据库,用到的是ContentProvider进行跨进程通讯 ...

  10. 变量查询,运算符优先级,if语句

    1.三个关联表的查询 use 新建 create table teacher(tcode int primary key,lesson char(10),age int,birth datetime) ...