目录
一、工作模式
主要是分成两种节点,一个管理节点,一个工作节点,操作在管理节点上。
二、搭建集群
四台阿里云服务器
1.配置管理节点,配置自己的ip地址
docker swarm init --advertise-addr 172.16.2.176
2.其他节点加入管理节点中
工作节点
# 加入成为工作节点
docker swarm join --token SWMTKN-1-3lxtmz61k5zy62u7w42a0wxan8y08r9j8cl90c6c8l8gqni3m6-etym2ans20zf4u8b5vffnri4u 172.16.2.176:2377
# 查看是否加入成功
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
r6a6kr6vim4cwbyku6oqkcs3i iZuf6ejgqhj1us1mu9aue2Z Ready Active 20.10.14
uhfwu7g0fz3eo1tohkfo1id0u * iZuf6ejgqhj1us1mu9aue4Z Ready Active Leader 20.10.14
管理节点
# 生成加入管理节点token
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3lxtmz61k5zy62u7w42a0wxan8y08r9j8cl90c6c8l8gqni3m6-djn81xulnxlf1wciudn7jqukk 172.16.2.176:2377
生成加入token
# 管理节点
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3lxtmz61k5zy62u7w42a0wxan8y08r9j8cl90c6c8l8gqni3m6-djn81xulnxlf1wciudn7jqukk 172.16.2.176:2377
# 工作节点
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3lxtmz61k5zy62u7w42a0wxan8y08r9j8cl90c6c8l8gqni3m6-etym2ans20zf4u8b5vffnri4u 172.16.2.176:2377
查看节点情况
# 查看节点
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
jf89a7hleaznfn4gvri2nqcff iZuf6ejgqhj1us1mu9aue1Z Ready Active Reachable 20.10.14
r6a6kr6vim4cwbyku6oqkcs3i iZuf6ejgqhj1us1mu9aue2Z Ready Active 20.10.14
q3jtib8o046x7ezy8i2l2ykqd iZuf6ejgqhj1us1mu9aue3Z Ready Active 20.10.14
uhfwu7g0fz3eo1tohkfo1id0u * iZuf6ejgqhj1us1mu9aue4Z Ready Active Leader 20.10.14
三、集群部署服务
1.创建一个服务
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker service create -p 6000:80 --name mynginx nginx
govvq5j2iwamqs1icdzb096j0
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker service ps mynginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
pw178f83qskl mynginx.1 nginx:latest iZuf6ejgqhj1us1mu9aue4Z Running Running about a minute ago
2.进行扩缩
# 扩到5个
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker service update --replicas 5 mynginx
mynginx
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5: running [==================================================>]
5/5: running [==================================================>]
verify: Service converged
# 缩到2个
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker service scale mynginx=2
mynginx scaled to 2
overall progress: 2 out of 2 tasks
1/2: running [==================================================>]
2/2: running [==================================================>]
verify: Service converged
3.删除服务
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker service rm mynginx
mynginx
[root@iZuf6ejgqhj1us1mu9aue4Z ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
三、Raft协议
Raft协议: 保证大多数节点存活才可以用。 只要>1 ,集群至少大于3台!
四、Docker Stack
docker-compose 单机部署项目!
docker stack部署,集群部署!
# 单机
docker-compose up -d wordpress.yaml
# 集群
docker stack deploy wordpress.yaml
# docker-compose 文件
version: '3.3'
services:
mongo:
image: mongo
restart: always
networks:
- mongo_network
deploy:
restart_policy:
condition: on-failure
replicas: 2
mongo-express:
image: mongo-express
restart: always
networks:
- mongo_network
ports:
- target: 8081
published: 80
protocol: tcp
mode: ingress
environment:
ME_CONFIG_MONGODB_SERVER: mongo
ME_CONFIG_MONGODB_PORT: 27017
deploy:
restart_policy:
condition: on-failure
replicas: 1
networks:
mongo_network:
external: true
五、总结
docker可以初始化一个 swarm 集群,其他节点可以加入。(管理、工作)
Node 就是一个docker节点。多个节点就组成了一个网络集群。(管理、工作)
Service 任务,可以在管理节点或者工作节点来运行。核心。
Task 容器内的命令,细节任务!