浅析Docker Stack常用命令、Docker Compose和Docker Stack区别及Docker Stack部署web集群流程
一、Docker Stack 常用命令
命令 | 描述 |
---|---|
docker stack deploy | 部署新的堆栈或更新现有堆栈 |
docker stack ls | 列出现有堆栈 |
docker stack ps | 列出堆栈中的任务 |
docker stack rm | 删除一个或多个堆栈 |
docker stack services | 列出堆栈中的服务 |
二、Docker Compose和Docker Stack区别
1、Docker stack会忽略了“构建”指令,您无法使用stack命令构建新镜像,它是需要镜像是预先已经构建好的,所以docker-compose更适合于开发场景。
2、还有一些compose-file规范被docker-compose或stack命令忽略。
3、Docker Compose是一个Python项目。 最初,有一个名为 fig 的Python项目,用于解析 fig.yml 文件,你猜对了 - 堆栈的Docker容器。每个人都喜欢它,特别是Docker的追随者,最后它慢慢的融入了docker 产品中,但它仍然在Python中,运行在Docker引擎之上。
在内部,它使用 Docker API 规范来操作容器,所以您仍然需要分别安装Docker-compose,以便与Docker一起在您的计算机上使用。
4、Docker Stack功能包含在Docker引擎中,你不需要安装额外的包来使用它,docker stacks 只是 swarm mode 的一部分,它支持相同类型的 compose 文件,但实际的处理是发生在 Docker Engine(docker引擎)内部的Go代码中。
在使用堆栈命令之前,还必须创建一个单机版的“swarm”,但这并不是什么大问题。
5、如果你的docker-compose.yml 是基于第二版写的(在docker-compose.yml中指定version: "2"),那么Docker stack是不支持的。
你必须使用最新版本,也就是version版本至少为3,然而Docker Compose对版本为 2 和 3 的文件仍然可以处理。
docker-compose 和新命令 docker stack commands 都可以处理版本号为 3 的 docker-compose.yml 文件。对于版本号为2的文件,你不得不继续使用docker-compose,如果你想升级,也不需要做太多的工作。
由于 docker stack 把 docker compose 的所有工作都做完了,因此可以肯定 docker stack 将占主导地位,这意味着 docker-compose 可能会被弃用,最终不会被支持。然而,对于大多数用户来说,切换到使用 docker stack 既不困难,也不需要太多的开销,您可以在将docker compose从版本2升级到版本3的同时轻松完成。如果您是Docker新手,或正在选择用于新项目的技术 - 无论如何,请坚持使用docker stack deploy。
三、Docker Stack部署web集群流程
1、环境:两台centos7的虚拟机或服务器,一个作为主服务器,一个作为服务器2
2、设置Docker Swarm:
docker swarm init
执行命令后会给出加入这个swarm的命令

然后在服务器2上执行上述这个命令加入swarm
这样我们就建好了swarm,两台主机现在建立好了关系。
3、web服务
4、dockerfile文件用于生成镜像
5、镜像提交到镜像仓库
因为集群的上机器是自动从仓库取镜像然后再运行程序,所以需要将我们上面生成的镜像推送到我们的镜像仓库上去。
// 使用tag重新命名
docker tag goweb:1.0 lpxxn.com:5000/goweb:1.0
// 推送
docker push lpxxn.com:5000/goweb:1.0
6、docker-compose 文件
接下来创建docker-compose.yml文件:image 就是我们上面创建好的镜像。运行5个应用程序,docker 会自己做负载,端口映射8111,失败时自动重启服务,并且创建了自己的网络,当有多个server服务时这个非常有用。
version: "3"
services:
web:
image: lpxxn.com:5000/goweb:1.0
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "8111:8000"
networks:
- gowebnet
networks:
gowebnet:
7、部署应用:到了最后的阶段了,部属一样很简单,执行deploy命令
docker stack deploy -c docker-compose.yml mygoweb
查看启动的服务
docker service ps mygoweb
参考文章:李鹏 - https://www.cnblogs.com/li-peng/p/8144372.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2018-07-06 绝对定位常见误区:position:absolute相对于谁定位、及当溢出时怎么隐藏
2018-07-06 vue嵌套路由总结
2018-07-06 Springboot读取自定义配置文件的几种方法