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秒左右开始反应





原文地址:https://www.cnblogs.com/g2thend/p/11723000.html