目 录
- 1. 简 介
- 2. Swarm的工作模式
- 3. Swarm的使用示例
- 3.1 准备工作
- 3.2 创建集群
- 3.3 使用集群
- 3.4 部署项目
1. 简 介
Docker Compose用于在单一的服务器或者主机上,创建并运行多个容器;而Docker Swarm则用于在多个服务器或者主机上,创建并运行集群服务。
最简单的理解类似于一个Docker Swarm操作多个Docker Compose,每个Docker Compose创建多个容器,从而实现集群服务。
Docker Swarm的官方文档,由于Docker已经自带了Docker Swarm,所以安装好Docker后,直接使用就好,不用额外安装Docker Swarm。
2. Swarm的工作模式
- 节点(Node)
- 服务(Service)与任务(Task)
- 任务与调度
- 副本与全局服务
3. Swarm的使用示例
3.1 准备工作
1、购买同一个地域即在同一个安全组的阿里云服务器4台,可以选择按小时或者按日、月计费,配置好服务器的网络、登录密码等等,总之先准备好能用的安装有CentOS的服务器
2、在各个服务器上安装好Docker
以上是主要的准备工作,为了描述方便,这里假设,4台服务器的ip以及作用如下:
- 服务器-1:172.26.82.140 ----准备设置为manager
- 服务器-2:172.26.82.141 ----准备设置为worker
- 服务器-3:172.26.82.142 ----准备设置为worker
- 服务器-4:172.26.82.143 ----准备设置为manager
3.2 创建集群
1、在服务器-1上,执行如下命令,表示要将服务器-1设置为manager节点,并且设置自身的通讯ip为172.26.82.140
docker swarm init --advertise-addr 172.26.82.140
命令执行完成后,大致会得到类似下面的信息:
Swarm initialized: current node (s0eoali1x32ly22jo85ebeb0w) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-57msikozxxt44uxz5r8hihmakp4zh1cr89v7zlxhyc8b5iojkt-5ea8uh68jcuy8m6f9ma7x0zg5 172.26.82.140:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
2、将服务器-2设置为worker节点。在服务器-2上,执行如下命令:
docker swarm join --token SWMTKN-1-57msikozxxt44uxz5r8hihmakp4zh1cr89v7zlxhyc8b5iojkt-5ea8uh68jcuy8m6f9ma7x0zg5 172.26.82.140:2377
3、同样的,将服务器-3设置为worker节点。在服务器-3上,执行以下命令:
docker swarm join --token SWMTKN-1-57msikozxxt44uxz5r8hihmakp4zh1cr89v7zlxhyc8b5iojkt-5ea8uh68jcuy8m6f9ma7x0zg5 172.26.82.140:2377
4、将服务器-4设置为manager节点。
- 步骤一:在服务器-1执行下面的命令,获取一个添加manager的令牌
docker swarm join-token manager
- 假设得到的令牌信息如下:
docker swarm join --token SWMTKN-1-4a1sikozxxt44uxz5r8hihmakp4zh1cr89v7zlxhyc8b5iojkt-5ea8uh68jcuy8m6f9ma7x0zg5 172.26.82.140:2377
- 步骤二:将上面的令牌信息复制到服务器-4,执行。服务器-4机会得到如下信息:
This node joined a swarm as a manager.
至此,两个manager、两个worker的swarm集群就搭建完毕。后面如果还要扩展集群,增加manager、worker节点的,类似的方式进行添加即可。
按官网所述,一个标准的集群,起码要有3个或3个以上的manager节点,多个worker节点。
假如集群中标识为Leader的manager节点挂掉,那么集群会自动通过Raft协议从其它manager节点中,选择出一个Leader。
Raft协议:保证大多数节点存活,才可以使用,保证高可用性。
5、获取令牌的命令
# 获取manager令牌的命令
docker swarm join-token manager
# 获取worker令牌的命令
docker swarm join-token worker
3.3 使用集群
manager节点是管理集群的入口,在集群环境中,docker命令只能在manager节点上执行,worker节点是无法执行docker命令的。
下面的操作,都需要在manager节点上进行,这里假设都在服务器-1上。
- 查看当前节点信息
docker node ls
- 创建服务
# 使用nginx镜像,创建1个名字为my-nginx的服务,给这个服务起3个副本(也就是同时运行3个容器)
docker service create --replicas 3 --name my-nginx -p 8088:80 nginx:latest
- 查看运行中的服务列表
docker service ls
- 查看具体某个服务运行信息
docker service ps my-nginx
- 查看运行了哪些容器
docker ps
- 动态扩缩容某个服务的容器个数
# 运行my-nginx的容器的个数,扩展到7个
docker service scale my-nginx=7
#也可用update这个命令进行扩缩容,缩减到2个
docker service update --replicas 2 my-nginx
- 上线、下线节点
# 下线服务器-2节点
docker node update --availability drain 服务器-2
# 上线服务器-2节点
docker node update --availability active 服务器-2
- 移除一个服务
docker service rm my-nginx
- 节点退出集群
# 这个命令可以在所有节点上执行
docker swarm leave
#强制退出集群
docker swarm leave -f
当最后一个manager节点离开集群,则swarm集群自动删除。
3.4 部署项目
之前在单机上部署项目,使用的是docker-compose,如下:
docker-compose up -d xxxxx.yaml
现在,在集群里部署项目,使用命令docker stack
,如下:
docker stack deploy xxxxx.yaml