Docker跨主机网络实践

Docker使用中网络管理是最麻烦的,在项目初始化前期就需要进行合理的规划,如果在比较理想的单主机的网络通信是比较简单的,但如果涉及到跨主机的网络就需要使用docker自带的overlay network或者第三方的网络插件,本文是以直接使用自带插件的方式实现容器跨主机访问。

基础条件
1.docker版本需要在1.9
2.Linux内核版本3.19以上(实际操作的centos内核是3.10,并未出现异常,需后期核实)
3.跨主机之间可以正常通信

consul服务搭建
Docker跨主机通信需要key value的服务来保存网络的信息,有很多可以选择的服务,如consul,etcd,zookeeper等都可以,本文是以官方推荐的consul服务作为key value的服务。

docker run -d --restart="always" --publish="8500:8500" --hostname="consul" --name="consul" index.alauda.cn/sequenceiq/consul:v0.5.0-v6 -server -bootstrap

 国外的镜像拉取很慢,选用了国内的灵雀云作为服务。

配置改造
因为已经使用了docker1.19版本了,在centos系统的/etc/sysconfig/docker已经不存在,但可以在/etc/systemd/system/multi-user.target.wants/docker.service中需要新增2个配置项
1.--cluster-store=consul://10.19.137.180:8500  #内网的IP地址加上consul的端口,提供给要加入跨网络通信的服务地址
2.--cluster-advertise=eth0:2375                         #以守护进程方式启动
在另外一台的服务器同样填写自身通信的网卡信息以及consul的服务地址,修改完成后服务器需要重新加载配置和重启docker容器。

systemctl daemon-reload
systemctl restart docker

创建overlay网络
使用命令创建overlay类别的网络

docker network create -d overlay leo

使用docker network ls命令后会发现两台服务器已经有leo这个网络了,说明一切顺利

测试网络
分别在两台服务器创建docker容器进行测试
服务器1

docker run -itd --name=leo_zhou1 --net=leo  busybox

服务器2

docker run -itd --name=leo_zhou2 --net=leo  busybox

进入leo_zhou1测试是否可以ping通leo_zhou2

posted @ 2019-12-05 10:02  周知非  阅读(1710)  评论(0编辑  收藏  举报
返回顶点