容器宿主机数据库_docker同宿主机容器和不同宿主机容器之间怎么通信?

第一部分 docker有四种网络模式
第一种:bridge 模式
当docker进程启动时,主机上会创建一个名为docker0的虚拟网桥,容器内部会创建一个只能容器内部看到的接口eth0,eth0 和docker0工作方式就像物理二层交换机一样,可以互相通信。

01b05efbb5c530cf0570ba210b99f3c4.png

命令执行过程:

#docker run -tid --net=bridge --name docker_bri1 ubuntu-base:v3
#docker run -tid --net=bridge --name docker_bri2 ubuntu-base:v3

#brctl show
#docker exec -ti docker_bri1 /bin/bash
#docker exec -ti docker_bri1 /bin/bash

#ifconfig –a
#route –n

第二种:host模式
容器启动时候用host模式,那么容器不会像第一张那样有个独立Network NameSpace。而是和主机共享一个Network NameSpace。
使用宿主机的ip和端口,但是容器的系统,进程列表等还是和主机隔离。

43b09671a2cca6e41a28faaa78e1a952.png

命令执行:

#docker run -tid --net=host --name docker_host1 ubuntu-base:v3
#docker run -tid --net=host --name docker_host2 ubuntu-base:v3

#docker exec -ti docker_host1 /bin/bash
#docker exec -ti docker_host1 /bin/bash

#ifconfig –a
#route –n

第三种模式 Container 
congtainer容器指定和已经存在的容器共享一个network namespace。
不配置ip,指一个已经存在容器共享ip,其他

a7dd235efcb483dfaf32cea9f69c789d.png

第四种:none模式

none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。

ed32a5152ba4e6ca997ebccf9c624b38.png


#docker run -tid --net=none --name docker_non1 ubuntu-base:v3


#docker exec -ti docker_non1 /bin/bash

#ifconfig –a
#route -n

第二部分 跨主机通信
单台主机上面的docker容器通过docker0来通信。不同主机上面的容器只能在主机上做端口映射来完成。种端口映射方式对很多集群应用来说极不方便。

方法一:现在用docker主机上添加静态路由直接实现跨宿主机容器之间通信:

e538f27fc879db8fedb1b45d560a1a30.png

方法二:借助pipework容器网络配置工具。

通过使用ip、brctl、ovs-vsctl等命令来为Docker容器配置自定义的网桥、网卡、路由等。

使用新建的bri0网桥代替缺省的docker0网桥

7d51f548276707195dac702bf8c0af18.png

第三种:Flannel(Flannel + UDP 或者 Flannel + VxLAN)

Flannel实现的容器的跨主机通信通过如下过程实现:

每个主机上安装并运行etcd和flannel;
在etcd中规划配置所有主机的docker0子网范围;
每个主机上的flanneld根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入etcd库中,这样etcd库中就保存了所有主机上的docker子网信息和本主机IP的对应关系;
当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP);
将原始数据包封装在VXLAN或UDP数据包中,IP层以outip为目的IP进行封装;
由于目的IP是宿主机IP,因此路由是可达的;
VXLAN或UDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器

b67ea0b34fbb6909df4590d184cdd53e.png

#/opt/bin/etcdctl get /coreos.com/network/config
#/opt/bin/etcdctl ls /coreos.com/network/subnets
#/opt/bin/etcdctl get /coreos.com/network/subnets/172.16.49.0-24

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值