docker同步宿主机配置(docker容器间跨宿主机通信-基于overlay的实现方法)
docker同步宿主机配置
docker容器间跨宿主机通信-基于overlay的实现方法overlay网络解析内置跨主机的网络通信一直是Docker备受期待的功能,在1.9版本之前,社区中就已经有许多第三方的工具或方法尝试解决这个问题,例如Macvlan、Pipework、Flannel、Weave等。
虽然这些方案在实现细节上存在很多差异,但其思路无非分为两种: 二层VLAN网络和Overlay网络
简单来说,二层VLAN网络解决跨主机通信的思路是把原先的网络架构改造为互通的大二层网络,通过特定网络设备直接路由,实现容器点到点的之间通信。这种方案在传输效率上比Overlay网络占优,然而它也存在一些固有的问题。
这种方法需要二层网络设备支持,通用性和灵活性不如后者。
由于通常交换机可用的VLAN数量都在4000个左右,这会对容器集群规模造成限制,远远不能满足公有云或大型私有云的部署需求; 大型数据中心部署VLAN,会导致任何一个VLAN的广播数据会在整个数据中心内泛滥,大量消耗网络带宽,带来维护的困难。
相比之下,Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式。这样不但能够充分利用成熟的IP路由协议进程数据分发;而且在Overlay技术中采用扩展的隔离标识位数,能够突破VLAN的4000数量限制支持高达16M的用户,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥。
因此,Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案。
容器在两个跨主机进行通信的时候,是使用overlay network这个网络模式进行通信;如果使用host也可以实现跨主机进行通信,直接使用这个物理的ip地址就可以进行通信。overlay它会虚拟出一个网络比如10.0.2.3这个ip地址。在这个overlay网络模式里面,有类似于服务网关的地址,然后把这个包转发到物理服务器这个地址,最终通过路由和交换,到达另一个服务器的ip地址。
环境介绍
hostname | ip | 系统版本 |
---|---|---|
cdh1 | 10.30.10.111 | centos7 |
cdh2 | 10.30.10.112 | centos7 |
要实现overlay网络,我们会有一个服务发现。比如说consul,会定义一个ip地址池,比如10.0.2.0/24之类的。上面会有容器,容器的ip地址会从上面去获取。获取完了后,会通过ens33来进行通信,这样就可以实现跨主机的通信。
consul通过docker部署在cdh1,首先需要修改cdh1中的docker配置并重启
[root@cdh1 /]# vim /etc/docker/daemon.json //添加以下配置 "live-restore":true [root@cdh1 /]# systemctl restart docker
“live-restore”:true 此配置的作用为在docker守护程序停止或重启的时候,容器依然可以保持运行
在cdh1下载consul镜像并启动
[root@cdh1 /]# docker pull consul [root@cdh1 /]# docker run -d -p 8500:8500 -h consul --name consul consul
修改cdh1中的docker配置并重启
[root@cdh1 /]# vim /etc/docker/daemon.json # 添加以下两行配置 "cluster-store": "consul://10.30.10.111:8500" "cluster-advertise": "10.30.10.111:2375" [root@cdh1 /]# systemctl restart docker
修改cdh2中的docker配置并重启
[root@cdh2 /]# vim /etc/docker/daemon.json # 添加以下两行配置 "cluster-store": "consul://10.30.10.111:8500" "cluster-advertise": "10.30.10.112:2375" [root@cdh2 /]# systemctl restart docker
cluster-store指定的是consul服务地址,因为consul服务运行在cdh1的8500端口,所以两台机器的cluster-store值均为consul://10.30.10.111:8500
cluster-advertise指定本机与consul的通信端口,所以指定为本机的2375端口
此时可以通过http://10.30.10.111:8500/访问consul地址
在Key/Value菜单中的docker-nodes目录中可以看到cdh1和cdh2两个docker节点,代表consul配置成功。
此时我们可以创建overlay网络,首先查看目前节点中已有的网络类型
[root@cdh1 /]# docker network ls NETWORK ID NAME DRIVER SCOPE ab0f335423a1 bridge bridge local b12e70a8c4e3 host host local 0dd357f3ecae none null local
然后在cdh1的docker节点创建overlay网络,因为此时consul服务发现已经正常运行,且cdh1和cdh2的docker服务已经接入,所以此时overlay网络是全局创建的,在任何一台宿主机创建一次即可。
[root@cdh1 /]# docker network create -d overlay my_overlay cafa97c5cf9d30dd6cef08a5e9710074c828cea3fdd72edb45315fb4b1bfd84c [root@cdh1 /]# docker network ls NETWORK ID NAME DRIVER SCOPE ab0f335423a1 bridge bridge local b12e70a8c4e3 host host local cafa97c5cf9d my_overlay overlay global 0dd357f3ecae none null local
此时可以看到,创建的overlay网络,标识为golbal。我们可以查看cdh2的网络,可以发现overlay网络也已经创建完毕。
[root@cdh2 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 90d99658ee8f bridge bridge local 19f844200737 host host local cafa97c5cf9d my_overlay overlay global 3986fe51b271 none null local
创建完成后,我们可以在cdh1和cdh2中指定overlay网络创建docker容器,并进行测试,查看是否可以跨宿主机通信。
在cdh1中创建名称为master的容器,并查看其IP
[root@cdh1 /]# docker run -itd -h master --name master --network my_overlay centos7_update /bin/bash [root@cdh1 /]# docker inspect -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" master 10.0.0.2
在cdh1中创建名称为slaver的容器,并查看其IP
[root@cdh2 ~]# docker run -itd -h slaver --name slaver --network my_overlay centos7_update /bin/bash [root@cdh2 ~]# docker inspect -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" slaver 10.0.0.3
此时进入两台容器中,互相ping对方的IP,查看是否成功通信
[root@cdh1 ~]# docker exec -it master /bin/bash [root@master /]# ping 10.0.0.3 PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data. 64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.587 ms 64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.511 ms 64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.431 ms 64 bytes from 10.0.0.3: icmp_seq=4 ttl=64 time=0.551 ms 64 bytes from 10.0.0.3: icmp_seq=5 ttl=64 time=0.424 ms ^C --- 10.0.0.3 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4000ms rtt min/avg/max/mdev = 0.424/0.500/0.587/0.070 ms
[root@cdh2 ~]# docker exec -it slaver /bin/bash [root@slaver /]# ping 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.499 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.500 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.410 ms 64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.370 ms ^C --- 10.0.0.2 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 0.370/0.444/0.500/0.062 ms
成功通信!
到此这篇关于docker容器间跨宿主机通信-基于overlay的实现方法的文章就介绍到这了,更多相关docker容器间跨宿主机通信内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- 远程给docker容器执行命令(Docker命令让普通用户能够执行的实现)
- docker部署tomcat(Docker安装Tomcat、MySQL和Redis的步骤详解)
- dockerip访问限制(docker win ping 不通容器 避坑指南)
- dockerfile自定义镜像图解(Docker images导出和导入操作)
- docker-compose部署实例(详解docker-compose速度太慢解决方式)
- docker python如何运行(Docker容器化部署Python应用过程解析)
- docker安装部署及使用(docker在linux上的安装部署实例讲解)
- dockerfile配置参数(dockerfile中ENTRYPOINT与CMD的结合使用及区别)
- docker快速打包部署脚本(使用脚本一键打包并上传docker镜像的实现代码)
- docker只有localhost可用(浅谈Docker如何自定义host文件)
- 用docker搭建在线开发环境(Docker环境搭建的简单方法)
- docker启动项目需要tomcat吗(docker安装tomcat并部署Springboot项目war包的方法)
- docker导出日志(excel导出在docker环境中总是失败的问题)
- 如何增大docker内存使用(docker 内存监控与压测方式)
- 服务器使用docker(使用ssh连接docker服务器的方法)
- docker 容器运行的数据在哪里(docker容器的几种存储详解)
- 谁说女子不如男 范冰冰演的武则天只是其一,另外两位你认识吗(谁说女子不如男)
- 杯酒人生---瓦伦丁酒杯和奥丁格啤酒(杯酒人生---瓦伦丁酒杯和奥丁格啤酒)
- 中秋节买啤酒,预算超过7元试试这8种啤酒,麦香浓郁都是真啤酒(预算超过7元试试这8种啤酒)
- CellPress旗下的6 期刊,国人友刊来了解一下吧(CellPress旗下的6期刊国人友刊来了解一下吧)
- ()
- SCI检索 SSCI检索 EI检索 ISTP检索 CSCD检索简介(SCI检索SSCI检索EI检索)
热门推荐
- 移除VS项目的TFS版本控制
- docker容器连接宿主机(docker 实现容器与宿主机无缝调用shell命令)
- docker怎么连主机数据库(docker 安装nacos并配置数据库的教程详解)
- angular封装公共组件(详解Angular组件之生命周期二)
- laravel活动时间查询(laravel 时间格式转时间戳的例子)
- SQL数据库存储过程示例解析(SQL数据库存储过程示例解析)
- 怎么安装xftp(Xftp的下载和安装教程图文教程)
- php实用工具(php常用的工具开发整理)
- html5 webrtc技术详解(Html5 webRTC简单实现视频调用的示例代码)
- jquery的直接设置下拉框的选中值(jquery实现户籍地选择下拉框)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9