8.7 Docker Stack

系列 - Docker集群
目录
摘要
Docker Stack 是 Docker Swarm 集群中用于部署和管理多容器应用的工具。它的语法与 Docker Compose 非常相似,都使用 YAML 格式的配置文件。但与 Compose 不同的是,Stack 运行在 Swarm 集群环境中,可以充分利用集群的高可用、负载均衡等特性。

准备工作
在开始之前,让我们先了解一下 Stack 和 Compose 的区别。
| 特性 | Docker Compose | Docker Stack |
|---|---|---|
| 运行环境 | 单机 | Swarm 集群 |
| 命令格式 | docker compose |
docker stack |
| 配置文件 | docker-compose.yml |
自定义 |
| 部署命令 | docker compose up -d |
docker stack deploy -c stack.yml 项目名 |
| 查看项目 | docker compose ls |
docker stack ls |
| 查看服务 | docker compose ps |
docker stack services 项目名 |
| 查看任务 | 无 | docker stack ps 项目名 |
| 删除项目 | docker compose down |
docker stack rm 项目名 |
任务一:使用Stack部署Typecho
1. 创建项目目录
首先,我们需要为项目创建一个专门的目录,用来存放配置文件。为了区分不同同学的项目,请在目录名后加上你的学号后两位。
# 将 [学号后两位] 替换为你的实际学号,例如:/srv/typecho-01
mkdir /srv/typecho-[学号后两位]
cd /srv/typecho-[学号后两位]
2. 编写 stack.yml 文件
在 /srv/typecho-[学号后两位] 目录下创建 stack.yml 文件,内容参考实验手册 5.2
关键配置:防止端口冲突
外部端口设置为 8000+学号后两位
# 以下是部分内容,仅供参考
volumes:
typecho-mysql-[学号后两位]:
driver_opts:
type: "nfs"
o: "addr=192.168.192.205,rw,nolock"
device: ":/data/[学号后两位]/typecho-mysql"
typecho-server-[学号后两位]:
driver_opts:
type: "nfs"
o: "addr=192.168.192.205,rw,nolock"
device: ":/data/[学号后两位]/typecho-server"
3. 部署 Stack
编写好配置文件后,就可以使用 docker stack deploy 命令来部署了。
# 命令格式:docker stack deploy -c 文件名 项目名
docker stack deploy -c stack.yml typecho-[学号后两位]

任务二:验证Stack部署
使用以下命令查看当前集群中部署的所有 Stack 项目:
docker stack ls

使用以下命令查看某个 Stack 中的所有服务:
docker stack services typecho-[学号后两位]

使用以下命令查看某个 Stack 中的所有任务:
docker stack ps typecho-[学号后两位]

任务三:安装和配置Typecho
服务部署成功后,我们就可以通过浏览器来安装 Typecho 了。
在浏览器中访问 http://<集群任一节点IP>:<8000+学号后两位>,自己动手进行安装


任务四:Stack的更新与删除
1. 更新 Stack
如果需要修改配置(比如调整副本数量),只需编辑 stack.yml 文件,然后重新执行部署命令:
docker stack deploy -c stack.yml typecho-[学号后两位]
Swarm 会自动检测配置的变化,并进行相应的更新。


2. 删除 Stack
如果不再需要整个应用,可以使用以下命令删除 Stack:
docker stack rm typecho-[学号后两位]
注意
删除 Stack 会停止并移除所有相关的服务和任务。但是,存储卷 (Volume) 不会被删除,这是为了保护数据安全。如果确实需要删除存储卷,可以手动执行。
作业:Stack专属参数
server:
deploy:
replicas: 2




