Docker容器怎么实现跨主机通信
本篇内容介绍了“Docker容器怎么实现跨主机通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、Docker主机间容器通信的解决方案Docker网络驱动
Overlay: 基于VXLAN封装实现Docker原生Overlay网络
Macvlan: Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识一个VLAN。容器接口直接连接Docker主机
网卡接口: 通过路由策略转发到另一台Docker主机
第三方网络项目
隧道方案
-- Flannel: 支持UDP和VLAN封装传输方式
-- Weave: 支持UDP(sleeve模式)和 VXLAN(优先fastdb模式)
-- OpenvSwitch: 支持VXLAN和GRE协议
路由方案
Calico: 支持BGP协议和IPIP隧道。每台宿主机作为虚拟路由,通过BGP协议实现不同主机容器间通信
二、Docker Overlay NetworkOverlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式。这样不但能够充分利用成熟的IP路由协议进程数据分发;而且在Overlay技术中采用扩展的隔离标识位数,能够突破VLAN的4000数量限制支持高达16M的用户,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥。
因此,Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案。
要想使用Docker原生Overlay网络,需要满足下列任意条件
Docker 运行在Swarm
使用键值存储的Docker主机集群
三、使用键值存储搭建Docker主机集群需满足下列条件:
集群中主机连接到键值存储,Docker支持 Consul、Etcd和Zookeeper
集群中主机运行一个Docker守护进程
集群中主机必须具有唯一的主机名,因为键值存储使用主机名来标识集群成员
集群中linux主机内核版本在3.12+,支持VXLAN数据包处理,否则可能无法通行四、部署
4.1 系统环境#docker-vDockerversion17.12.0-ce,buildc97c6d64.2 安装Consul
#wgethttps://releases.hashicorp.com/consul/0.9.2/consul_0.9.2_linux_386.zip#unzipconsul_1.0.6_linux_amd64.zip#mvconsul/usr/bin/&&chmoda+x/usr/bin/consul#启动nohupconsulagent-server-bootstrap-ui-data-dir/data/docker/consul\>-client=172.16.200.208-bind=172.16.200.208&>/var/log/consul.log&#-ui:consul的管理界面#-data-dir:数据存储4.3 节点配置Dockre守护进程连接Consul
在两台机器上都要修改
docker2
#vim/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd-Htcp://0.0.0.0:2375-Hunix:///var/run/docker.sock--cluster-storeconsul://172.16.200.208:8500--cluster-advertise172.16.200.208:2375#systemctldaemon-reload#systemctlrestartdocker
docker3
#vim/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd-Htcp://0.0.0.0:2375-Hunix:///var/run/docker.sock--cluster-storeconsul://172.16.200.208:8500--cluster-advertise172.16.200.223:2375#systemctldaemon-reload#systemctlrestartdocker4.4 查看consul 中的节点信息
http://172.16.200.208:8500
4.5 创建overlay网络#dockernetworkcreate-doverlaymulti_host53b042104f366cde2cc887e7cc27cde52222a846c1141690c93e1e17d96120c5#dockernetworklsNETWORKIDNAMEDRIVERSCOPE3f5ff55c93e6bridgebridgelocal1e3aff32ba48composelnmp_defaultbridgelocal0d60b988fe59composetest_defaultbridgelocalb4cf6d623265hosthostlocal53b042104f36multi_host
-d : 指定创建网络的类型
另一台机器会自动同步新建的网络
详细信息
#dockernetworkinspectmulti_host[{"Name":"multi_host","Id":"53b042104f366cde2cc887e7cc27cde52222a846c1141690c93e1e17d96120c5","Created":"2018-03-07T16:23:38.682906025+08:00","Scope":"global","Driver":"overlay","EnableIPv6":false,"IPAM":{"Driver":"default","Options":{},"Config":[{"Subnet":"10.0.0.0/24","Gateway":"10.0.0.1"}]},"Internal":false,"Attachable":false,"Ingress":false,"ConfigFrom":{"Network":""},"ConfigOnly":false,"Containers":{},"Options":{},"Labels":{}}]4.6 使用overlay网络启动容器
分别在两台机器上使用overlay网络启动一个容器
#dockerrun-it--net=multi_hostbusybox
这两个节点上的容器的ip分别为:
[root@docker2~]#dockerrun-it--net=multi_hostbusybox/#ifconfigeth0Linkencap:EthernetHWaddr02:42:0A:00:00:02inetaddr:10.0.0.2Bcast:10.0.0.255Mask:255.255.255.0UPBROADCASTRUNNINGMULTICASTMTU:1450Metric:1RXpackets:0errors:0dropped:0overruns:0frame:0TXpackets:0errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:0(0.0B)TXbytes:0(0.0B)
/#ifconfigeth0Linkencap:EthernetHWaddr02:42:0A:00:00:03inetaddr:10.0.0.3Bcast:10.0.0.255Mask:255.255.255.0UPBROADCASTRUNNINGMULTICASTMTU:1450Metric:1RXpackets:0errors:0dropped:0overruns:0frame:0TXpackets:0errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:0(0.0B)TXbytes:0(0.0B)
它们之间是可以相互ping 通的
#ping10.0.0.2PING10.0.0.2(10.0.0.2):56databytes64bytesfrom10.0.0.2:seq=0ttl=64time=11.137ms64bytesfrom10.0.0.2:seq=1ttl=64time=0.251ms64bytesfrom10.0.0.2:seq=2ttl=64time=0.280ms
“Docker容器怎么实现跨主机通信”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。