在集群初始化后,这个 Docker 实例就自动成为了集群的管理节点,而其他 Docker 实例可以通过运行这里所打印的 docker swarm join 命令来加入集群。
加入到集群的节点默认为普通节点,如果要以管理节点的身份加入到集群中,我们可以通过 docker swarm join-token 命令来获得管理节点的加入命令。
1 2 3 4 | $ sudo docker swarm join -token manager
To add a manager to this swarm, run the following command :
docker swarm join --token SWMTKN-1-60am9y6axwot0angn1e5inxrpzrj5d6aa91gx72f8et94wztm1-7lz0dth35wywekjd1qn30jtes 192.168.1.5:2377
|
我们通过这些命令来建立用于我们服务开发的 Docker 集群,并将相关开发同事的 Docker 加入到这个集群里,就完成了搭建跨主机网络的第一步。
建立跨主机网络
接下来,我们就通过 docker network create
命令来建立 Overlay 网络。
1 | $ sudo docker network create --driver overlay --attachable mongodbs
|
在创建 Overlay 网络时,我们要加入 --attachable 选项以便不同机器上的 Docker 容器能够正常使用到它。
在创建了这个网络之后,我们可以在任何一个加入到集群的 Docker 实例上使用 docker network ls 查看一下其下的网络列表。我们会发现这个网络定义已经同步到了所有集群中的节点上。
1 2 3 4 5 | $ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
y89bt74ld9l8 mongodbs overlay swarm
|
接下来我们要修改 Docker Compose 的定义,让它使用这个我们已经定义好的网络,而不是再重新创建网络。
我们只需要在 Docker Compose 配置文件的网络定义部分,将网络的 external 属性设置为 true,就可以让 Docker Compose 将其建立的容器都连接到这个不属于 Docker Compose 的项目上了。
1 2 3 | networks:
mesh:
external: true
|
通过这个实现,我们在开发中就使整个服务都处于一个可以使用别名映射网络中,避免了要对不同功能联调时切换服务 IP 的烦琐流程。在这种结构下,我们只需要让我们开发的 Docker 退出和加入不同的集群,就能马上做到切换不同联调项目。
二、编写 docker-compose 文件
主节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | version: "3"
services:
master:
image: mongo:4.1
container_name: master
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
TZ: "Asia/Shanghai"
volumes:
# 挂载 MongoDB 数据目录
- "/data/docker/mongodb/data/mongo:/data/db:rw"
# 挂载 KeyFile
- "/data/docker/mongodb/data/mongodb.key:/data/mongodb.key"
ports:
- "27018:27017"
networks:
- mongodbs
command:
# 密码
--auth
# 副本集名称
--replSet testSet
--oplogSize 128
--keyFile /data/mongodb.key
# Swarm 跨主机网络网络
networks:
mongodbs:
external: true
|
副节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | version: "3"
services:
secondary:
image: mongo:4.1
container_name: secondary
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
TZ: "Asia/Shanghai"
volumes:
- "/data/docker/mongodb/data/mongo:/data/db:rw"
- "/data/docker/mongodb/data/mongodb.key:/data/mongodb.key"
ports:
- "27018:27017"
networks:
- mongodbs
command:
--auth
--replSet testSet
--oplogSize 128
--keyFile /data/mongodb.key
networks:
mongodbs:
external: true
|