docker跨主机通信-overlay
使用consul
1,让两个网络环境下的容器互通,那么必然涉及到网络信息的同步,所以需要先配置一下consul。
直接运行下面命令。启动consul。
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
2,同步网络信息的工具安装好了,那么肯定需要容器能够使用这个同步工具,以便consul能够找到各个服务器的docker节点。修改各个节点 docker的启动配置文件/lib/systemd/system/docker.service。在 ExecStart 最后添加
--cluster-store=consul://<consul服务的ip地址>:8500
--cluster-advertise=eth0(当前对外ip使用的网卡名或者直接使用当前ip):2376
3,保证所有主机的docker配置文件都与2一致,这样就能保证所有的docker overlay网络同步在consul上。
基本上需要配置的工作我们都已经完成了。
4,在随机一台机器上创建overlay网络(比如我想创建的docker的mongo集群网络互通,我创建了一个mongo的overlay的网络):
docker network create -d overlay mongo
这个时候,你在别的机器上执行docker network ls,你将能够看到在上一台机器创建的overlay网络
使用docker swarm 的overlay 网络
非集群即docker swarm 创建的服务(docker service create 这种),也就是使用docker run 启动的容器附加到此网络上。
注意:在管理节点创建overlay 网络后,只有在管理节点创建服务后,在工作节点才能出现overlay 网络,然后将容器网络附加到docker swarm 网络上即可。
## 在管理节点创建overlay 网络
docker network create --opt encrypted --driver overlay --attachable tt
#管理节点查看网络情况
[xxxx@centos-m ~]$ docker network ls
NETWORK ID NAME DRIVER SCOPE
f583b9e65520 bridge bridge local
5af05ec8c792 docker_gwbridge bridge local
ebfdd7fb8719 host host local
r4geqg1szdc1 ingress overlay swarm
88c236d07e7c none null local
lug5me4dil6u tt overlay swarm
2a320895c372 walle_walle-net bridge local
#工作节点1查看网络
[xxxx@centos-s ~]$ docker network ls
NETWORK ID NAME DRIVER SCOPE
5302500564b4 bridge bridge local
550f3511d5b4 docker_gwbridge bridge local
3905db71d4f5 host host local
r4geqg1szdc1 ingress overlay swarm
da68ab23664b none null local
#工作节点2查看网络
[xxxx@centos-s2 ~]$ docker network ls
NETWORK ID NAME DRIVER SCOPE
e716d217eb0f bridge bridge local
fa6a911939b4 docker_gwbridge bridge local
9f837a936ccf host host local
r4geqg1szdc1 ingress overlay swarm
49ac475ae221 none null local
##创建服使工作节点出现创建的overlay 网络
docker network create --opt encrypted --driver overlay --attachable tt
非加密网络
docker network create -d overlay --attachable tt2
##创建用于激活工作节点overlay 网络的镜像
dockerfile
[xxxx@centos-m ~]$ cat Dockerfile
FROM busybox
MAINTAINER yon@xxxx.com
ENTRYPOINT ["tail","-f","/etc/hosts"]
docker build -t busybox-swarm . swarm 集群都要操作
##激活overlay 网络
docker service create --replicas 3 --name busybox-net --network tt busybox-swarm
查看服务
[xxxx@centos-m ~]$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
2gzw41kxbiau busybox-net replicated 3/3 busybox-swarm:latest
查看节点
[xxxx@centos-m ~]$ docker service ps busybox-net
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
10mmg3xh23rn busybox-net.1 busybox-swarm:latest centos-s Running Running 20 seconds ago
0h2z09vh34jp busybox-net.2 busybox-swarm:latest centos-s2 Running Running 20 seconds ago
vuosx2rrpgyr busybox-net.3 busybox-swarm:latest centos-m Running Running 21 seconds
##在其他节点起容器附加至overlay网络
docker run -it --rm --net=tt busybox /bin/sh
测试 ping busybox-net 过20秒左右开始反应