使用 docker 部署应用程序在单机上怎么实现热更新

2022-06-21 09:07:10 +08:00
 dzdh

不考虑 stack / swarm / k*s 。单机场景。只能自己做蓝绿吗

2763 次点击
所在节点    Docker
19 条回复
dzdh
2022-06-21 09:21:16 +08:00
抛砖引玉看好不好使。

compose 运行两个服务,一个是 tcp 转发服务,另一个是真正的服务,scale=N 不直接对外暴露任何端口。

比如:

forward: 80:80, forward: 80->nginx:80
nginx(scale=N): :80

然后 forward 不用动,更新 nginx 就行?
securityCoding
2022-06-21 09:35:44 +08:00
既然都单机了,你为啥还追求热更新。。。
dzdh
2022-06-21 09:56:31 +08:00
@securityCoding 总想希望 0 停机时间嘛 (doge
ttyn
2022-06-21 10:07:40 +08:00
@dzdh 不需要 tcp 转发服务,直接 Nginx 负责两个服务的端口,看情况启动其中一个就可以了吧

另外,单节点也可以使用 Swarm ,更新、回滚也很方便
kangkang
2022-06-21 10:10:11 +08:00
为啥只考虑 docker-compose 不考虑 k3s ?
dzdh
2022-06-21 10:15:59 +08:00
@ttyn 本机运行个 swarm 倒也是可以。podman 有啥方案吗
vast0906
2022-06-21 10:16:17 +08:00
emmmm ,之前做过这个奇怪的东西。暴露 host 的端口,haproxy 去监听 host 的端口,通过 haproxy 直接转发到 container 的 bridge ip 中。
ttyn
2022-06-21 10:21:34 +08:00
@dzdh 我的理解是,podman 没有守护进程,容器生命周期由第三方管理,比如 k8s ,所以定位更适合集群,单机还是 docker 方便点
ttyn
2022-06-21 10:22:58 +08:00
@vast0906 是不是感觉和 Traefik 工作模式很像
ospider
2022-06-21 10:43:42 +08:00
docker 妙就妙在 immutable ,你再来个热更新,不是倒退回去了……
sadfQED2
2022-06-21 10:50:35 +08:00
服务前面套个 haproxy ?使用 ha 检查服务存活
sadfQED2
2022-06-21 10:51:25 +08:00
@sadfQED2 如果你只有 http 服务的话那就更好办,nginx 就行了
Chad0000
2022-06-21 11:00:04 +08:00
同样建议 op 试试 k3s 。我的线上系统就部署在虚拟机里面的 k3s 上。
vast0906
2022-06-21 11:13:10 +08:00
@ttyn 我们前面还有一层 ng ,所以我就觉得这个做的有点多此一举
THESDZ
2022-07-18 10:53:12 +08:00
Traefik+docker network?
dzdh
2022-07-18 12:35:31 +08:00
@Chad0000 k3s 和 k8s 区别是啥
Chad0000
2022-07-18 13:19:24 +08:00
@dzdh k3s 移除了云商的库,替换成更轻量的实现,对系统要求更少。甚至可以在嵌入式系统运行。
dzdh
2022-07-18 13:33:46 +08:00
@Chad0000 k3s 适合跑在大型集群上吗
Chad0000
2022-07-18 14:13:46 +08:00
@dzdh 个人认为不适合,大型集群应该使用 k8s

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/861030

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX