为支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于VxLAN的overlay网络。VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网二层服务,但是拥有更强的扩展性和灵活性。

Docker overlay网络需要一个key-value数据库用于保存网络信息状态,包括Network,Endpoint,IP等。Consul,Etcd和Zookeeper都是docker支持的key-value软件,今天讨论的是consul

试验环境描述:直接使用上一章docker-machine环境

在docker1:192.168.7.235和docker2:192.168.7.231上实践各种跨主机网络方案,在192.168.7.222上部署支持的组件

consul:

最简单的方式就是以容器的方式运行consul:docker run -d -p 8500:8500 -h consul --name consul progrium/consul --server -bootstrap

注:我是在之前做docker-machine192.168.7.222环境下运行的容器,在这个上面要自己部署一个docker服务,当然也可以利用docker-machine去创建,但是不知道为什么我的不成功,只好自己部署

运行完这个容器之后,通过网页可以访问到http:192.168.7.222:8500

然后修改docker1和docker2的docker daemon的配置文件:vim /etc/systemd/system/docker.service.d/10-machine.conf

--cluster-store=consul://192.168.7.222:8500 告知consul地址

--cluster-advertis=ens190:2376 告知consul自己的连接地址

注:这里一定要注意--cluster-store=consul://。。。。;还有网卡地址一定要正确

重启docker daemon

systemctl daemon-reload

systemctl restart docker。service

docker1与docker2将自动注册到consul数据库中,访问http:192.168.7.222:8500可以看到以下

目前的实验环境如下,盗图:

创建overlay网络

docker network create -d overlay over

注意到over的SCOPE为global,而其他的网络为local,

在docker上面查看网络

docker2上面也能看到over网络,这是因为在docker1上面创建的over将over存入了consul,docker2在consul中读取到新的网络数据,之后over又任何的变动都会同步到docker1和docker2

IPAM:IP address management,docker自动为over分配的IP空间为10.0.0.0/24

在overlay中运行容器

查看容器的网络配置:

可以看到我们运行的容器中有两个网络接口eth0和eth1,从IP地址可以看出eth0走的是overlay网络over,而eth1是172.18.0的网段的是容器的默认路由,这个默认的路由在哪来的呢?

其实,docker 会创建一个bridge网络“docker bridge”,为所有连接到overlay网络的容器提供外网访问能力

通过docker network inspect docker_gwbridge

可以看出docker_gwbridge的IP地址范围是172.18.0.0/16,当前连接的是172.18.0.2

而且此网络的网关就是网桥docker_bridge的ip172.18.0.1

这样容器就可以通过docker_gwbridge访问外网

其实容器访问外网还是通过NAT的模式实现的

外部访问容器也还是通过端口映射实现的

overlay跨主机通信

在docker2上面运行一个over的容器

让这个docker2上面的新建的容器去pingdocker1上面之前运行的容器,发现是可以ping通的

在docker2上面新建一个容器,不指定网络,进入容器发现没有桥接网卡eth1,无法ping通docker2上的其他容器以及docker1中的容器

可见overlay网络中的容器,无论是否在同一个host上都能进行通信,同时docker也实现了DNS服务。

overlay的隔离:

不同的overlay时相互隔离的

创建另一个overlay网络over2,运行一个over2的容器

可以看到新的容器的eth0网络是10.0.1.2/24,eth1的是172.18.0.3/16

无法ping通over网络的容器,即使他们在使用同一个docker_gwbridge

如果想要over和over2的容器之间能够互相通信,可以通过docker network connect over/over2 <容器>

overlay IPAM:

docker 默认为overlay网络分配24为子网掩码的子网,所有主机共享这个subnet,容器启动的时候是按照顺序从此空间分配IP,我们也可以通过--subnet指定

创建网络:通过--subnet和--gateway指定网络的网段和刚关

运行容器,通过--ip指定容器IP

 

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

  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报错:You could try using...

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

  6. Docker跨主机网络——overlay

    前言 在Docker网络--单host网络一文中,我为大家总结了Docker的单机网络相关知识和操作,单机网络比较容易.本文我为大家总结Docker跨主机通信相关知识.同样本文大部分内容以CloudM ...

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

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

  8. Docker 跨主机网络 overlay(十六)

    目录 一.跨主机网络概述 二.准备 overlay 环境 1.环境描述 2.创建 consul 3.修改 docker 配置文件 4.准备就绪 三.创建 overlay 网络 1.在 host1 中创 ...

  9. 跨主机网络-overlay(18)

    docker overlay跨主机网络 .环境 docker版本 Docker version -ce, build fc4de44 3台主机 192.168.55.51 host1 192.168. ...

随机推荐

  1. [nodejs] nodejs开发个人博客(三)载入页面

    模板引擎 使用ejs作为我们博客的前端模板引擎,用来从json数据生成html字符串 安装:npm install ejs -save 使用:入口文件中写入下面代码,定义/view/目录为视图目录 / ...

  2. 谈谈mysql的悲观和乐观锁

    悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个非常基础的概念.之前有写过一篇文章关于并发的处理思路和解决方案,这里我单独将对这两种常见的锁机制在数据库数据上的实现进行比较系统的介绍一 ...

  3. eclipse提交到git

    前言 今天是我正式加入GitHub的第一天,作为世界上最大的同性交友社区,以push和pull出名的它,让我坠入其中并无法自拔,废话不多说,上教程: 步骤一 首先,你需要注册一个github账号,相信 ...

  4. java算法-单向队列

    队列是一种:先进先出,后进后出的数据结构 单项队列: 从前面删除元素,从后面插入元素,跟现实中排队是一样的道理 这里我们用指针移动位置的方法.因为数组删除元素,如果我们要跟现实中排队效果一样,就需要移 ...

  5. BZOJ4559: [JLoi2016]成绩比较(dp 拉格朗日插值)

    题意 题目链接 Sol 想不到想不到.. 首先在不考虑每个人的真是成绩的情况下,设\(f[i][j]\)表示考虑了前\(i\)个人,有\(j\)个人被碾压的方案数 转移方程:\[f[i][j] = \ ...

  6. MachineLN博客目录

    MachineLN博客目录 https://blog.csdn.net/u014365862/article/details/78422372 本文为博主原创文章,未经博主允许不得转载.有问题可以加微 ...

  7. Mac上Homebrew的安装

    Mac系统版本: 10.14.2 下载brew_install 访问:https://raw.githubusercontent.com/Homebrew/install/master/install ...

  8. 不需要再手写 onSaveInstanceState 了,因为你的时间非常值钱

    如果你是一个有经验的 Android 程序员,那么你肯定手写过许多 onSaveInstanceState 以及 onRestoreInstanceState 方法用来保持 Activity 的状态, ...

  9. Java的内存 -JVM 内存管理

    一.综述 如果你学过C或者C++,那么你应该感受过它们对内存那种强大的掌控力.但是强大的能力往往需要更强大的控制力才能保证能力不被滥用,如果滥用C/C++的内存管理那么很容易出现指针满天飞的情况,不出 ...

  10. mssql sqlserver 取消数值四舍五入的方法分享

    摘要: 下文讲述使用round sql函数,对数值型数据进行舍入操作 实验环境:sqlserver 2008 转自: http://www.maomao365.com/?p=6454 最近接到用户需求 ...