8.7 Docker Stack

摘要
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 项目名

首先,我们需要为项目创建一个专门的目录,用来存放配置文件。为了区分不同同学的项目,请在目录名后加上你的学号后两位。

bash

# 将 [学号后两位] 替换为你的实际学号,例如:/srv/typecho-01
mkdir /srv/typecho-[学号后两位]
cd /srv/typecho-[学号后两位]

在 /srv/typecho-[学号后两位] 目录下创建 stack.yml 文件,内容参考实验手册 5.2

关键配置:防止端口冲突
外部端口设置为 8000+学号后两位

yaml

# 以下是部分内容,仅供参考
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"

编写好配置文件后,就可以使用 docker stack deploy 命令来部署了。

bash

# 命令格式:docker stack deploy -c 文件名 项目名
docker stack deploy -c stack.yml typecho-[学号后两位]

使用以下命令查看当前集群中部署的所有 Stack 项目:

bash

docker stack ls

使用以下命令查看某个 Stack 中的所有服务:

bash

docker stack services typecho-[学号后两位]

使用以下命令查看某个 Stack 中的所有任务:

bash

docker stack ps typecho-[学号后两位]

服务部署成功后,我们就可以通过浏览器来安装 Typecho 了。

在浏览器中访问 http://<集群任一节点IP>:<8000+学号后两位>,自己动手进行安装

如果需要修改配置(比如调整副本数量),只需编辑 stack.yml 文件,然后重新执行部署命令:

bash

docker stack deploy -c stack.yml typecho-[学号后两位]

Swarm 会自动检测配置的变化,并进行相应的更新。

如果不再需要整个应用,可以使用以下命令删除 Stack:

bash

docker stack rm typecho-[学号后两位]
注意
删除 Stack 会停止并移除所有相关的服务和任务。但是,存储卷 (Volume) 不会被删除,这是为了保护数据安全。如果确实需要删除存储卷,可以手动执行。

yaml

server:
  deploy:
    replicas: 2