1、购买4台阿里云
按量付费买四台
2、都安装docker
Xshell右键 可以将命令发送到所有会话
3、查看官网
地址:https://docs.docker.com/engine/swarm/
4、工作模式
5、搭建集群
私网不需要流量,省钱
172.27.88.127
5.1 搭建主机
# 初始化节点 docker001操作
[root@mydocker0001 ~]# docker swarm init --advertise-addr 172.27.88.127
5.2 将从机添加到主机
初始化节点 :docker swarm init
加入一个节点:docker swarm join
# 获取令牌 主节点 工作节点
docker swarm join-token manager
docker swarm join-token worker
5.3.1 docker2 进行join操作
docker swarm join --token SWMTKN-1-1l0w32nbpe6hje5ajrdx4z31skh0fxcu16luqgmkh4ouvcxd1b-5i3qk6rjsxc8qq3uhrrk4ke97 172.27.88.127:2377
5.3.2 docker1 生成一个工作节点 docker3运行
5.3.3 docker1生成一个管理节点 docker4运行
5.3 主机查看节点
docekr node ls
1、生成主节点 init
2、加入(管理者、worker)
搭建了双主双从
6、Raft协议
双主双从:假设一个节点挂了!其他节点是否可以!
Raft协议:保证大多数节点存活才可以用。只要>1,集群至少大于3台
实验:
6.1 将docker1停止,宕机! 双主,发现另外一台主节点也不能使用了
6.2 可以将其他节点离开
6.3 3台机器设置为管理节点
挂掉一台,剩下两台,管理节点可以操作
挂掉两台,剩下一台,管理节点不可操作
结论:
集群可用! 至少要有三个管理节点。 大于1台管理节点存活!
Raft协议:保证大多数节点存活,才可以使用,保证高可用!
7、操作体会一下集群
弹性!扩缩容!集群!
以后告别docker run
docker-compose up 启动一个项目。单机!
集群:docker swarm docker service
容器 => 服务
集群:高可用,比如web应用需要用redis(3台,在不同的机器上!)
容器 => 服务 => 副本
redis服务 => 10个副本 (同时开始10个redis容器)
体验:创建服务、动态扩展服务、动态更新服务。
7.1 灰度发布:金丝雀发布!
docker service create -p 8888:80 --name my-nginx nginx
# docker ps 发现这个服务随机分配到了docker2 上
docker run 容器启动!不具有扩缩容器!
docker service 服务! 具有扩缩容器,滚动更新
查看服务 REPLICAS
docekr service ps my-nginx
docker service ls
docker service inspect my-nginx
7.2 为my-nginx 创建三个副本
docker service update --replicas 3 my-nginx
7.3 访问一下
7.4 动态扩缩容
方法一:
# 扩容到10个
docker service update --replicas 10 my-nginx
服务,集群中的任意节点都可以访问。服务可以有多个副本动态扩容实现
# 缩容到1个
docker service update --replicas 1 my-nginx
方法二
# 扩容到5个
docker service scale my-nginx=5
7.5 移除服务
docker service rm my-nginx
8、概念总结
Swarm :
集群的管理和编号。docker可以初始化一个swarm集群,其他节点可以加入。(管理节点、工作节点)
Node
就是一个docker节点。多个节点就组成了一个网络集群。
Service
任务,可以在管理节点或者工作节点来运行!
Task
容器内的命令,细节任务
9、拓展
网络模式:“PublishMode”:“ingress”
Swarm:
Overlay:
ingress: 特殊的Overlay网络!负载均衡功能! IPVS VIP
虽然docker在四台机器上,实际上用的是同一个网络!ingress网络,是一个特殊的Overlay网络
[root@mydocker0001 ~]# docker network inspect ingress
10、Docker Stack
docker-compose 单机部署项目
Docker Stack 集群部署
# 单机
docker-compose up -d wordpress.yaml
# 集群
docker stack deploy wordpress.yaml
# docker-compose.yaml文件
version: "3.9"
services:
service1:
image: "service1"
deploy:
replicas: 2
ports:
- "8080:8080"
service2:
image: "service2"
deploy:
replicas: 3
ports:
- "8081:8081"
11、Docker Stack
安全!配置!证书!
12、Docker Config
配置