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

相关内容