之所以研究swarm overlay,是因为在研究边缘计算框架EdgeX时,他默认使用映射端口方式,尝试使用docker swarm解决不同主机分开部署服务时的docker互相访问问题

首先转载网上一张图

Docker进阶学习-2 swarm overlay测试_搜索

 

 

1、拓扑结构如下

Docker进阶学习-2 swarm overlay测试_字符串_02

管理节点:要将应用程序部署到swarm,需要向管理节点提交一个服务定义。管理节点将称为任务的工作单元分派给工作节点。执行所需的编排和群集管理功能,以保持群的所需状态。管理节点选择一个领导者来执行编排任务。

工作节点:接收并执行从管理节点调度的任务。默认情况下,管理节点也将服务作为工作节点运行,但您可以将它们配置为以独占方式运行管理任务并仅作为管理节点。代理在每个工作节点上运行,并报告分配给它的任务。worker节点将其分配任务的当前状态通知给manager节点,以便manager可以保持每个worker的所需状态。

2、在管理节点1上执行

docker swarm init

执行结果 

Swarm initialized: current node (8pbeemanze4hic086lg9vatgq) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-5u7vluy344umgyreimctpoeuvabz4yp5dz4xney55cypvsv15n-9r5e5at6z1ri63b2azy0ob81p 192.168.137.6:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

3、在管理节点1上创建overlay 网络net1

   docker network create -d overlay --attachable demo

返回一串数字

yxc3n42en2j8s2xewrmzax6es

以工作节点1为例: 

4、在工作节点1上执行加入主机

docker swarm join --token SWMTKN-1-5u7vluy344umgyreimctpoeuvabz4yp5dz4xney55cypvsv15n-9r5e5at6z1ri63b2azy0ob81p 192.168.137.6:2377

5、docker network ls

Docker进阶学习-2 swarm overlay测试_笔记_03

 只有一个名为ingreee的overlay网络

6、在管理节点1、工作节点1上分别执行

sudo docker run -it --rm  --name test1 --net demo busybox /bin/sh 
sudo docker run -it --rm  --name test2 --net demo busybox /bin/sh

然后从新开一个ssh连接,r可以看到名为demo的

Docker进阶学习-2 swarm overlay测试_原创_04

 如果docker删除掉,那么这个网络也会消失,说明是按需创建的。

 进入容器,退出容器前后(退出自动删除容器)对比

Docker进阶学习-2 swarm overlay测试_原创_05

 7、在两个容期间互相访问

Docker进阶学习-2 swarm overlay测试_搜索_06

 8、修改EdgeX docker compose文件,修改networks部分为

Docker进阶学习-2 swarm overlay测试_原创_07

 

 其它服务部分也改成

Docker进阶学习-2 swarm overlay测试_字符串_08

 

 9、启动

提示:ERROR: Network demo declared as external, but could not be found. Please create the network manually using `docker network create demo` and try again.

10、按第6步,随便启动一个基于demo网络的容器,可以启动了,查看地址,确实加入demo网络了

Docker进阶学习-2 swarm overlay测试_字符串_09

 

不知道算不算一个BUG。

11、适应场景

如果在不同节点创建一个相同的docker名称,将会绑定失败。

Docker进阶学习-2 swarm overlay测试_搜索_10

 12、Vi替换方法

vi模式批量替换字符串

:s/old_string/new_string/g

/word 自当前光标位置向下搜索名字为word的字符串
?word 自当前光标位置向上搜索名字为word的字符串
:n 1,n 2 s/word1/word2/g 在n1行与n2行之间搜索名字为word1的字符串,并将其替换成word2
:1,$s/word1/word2/g 在第一行与最后一行之间搜索名字为word1的字符串,并将其替换成word2