作者appleboy46 (小恶魔)
看板Soft_Job
标题[心得] 自动更新执行中的 Docker 容器解决方案
时间Sat Mar 4 19:20:49 2023
部落格:
https://bit.ly/3KY6NZc
看影片:
https://www.youtube.com/watch?v=u-ge5V6CN6w
现在大家在部署服务肯定都已经容器化,而如何有效管理及升级容器不影响现有的服务,
这就是一个重要的议题,然而在 CI/CD 的流程内,肯定有两个步骤是必须的,第一就是
将环境打包成 Docker Image 并上传到公司内私有的 Docker Registry,以及上传完毕後
,也许透过 SSH 方式连上机器,并且拉取新的映像档,再透过 Graceful Shutdown 机制
重新启动正在执行的服务。可以参考这篇了解什麽是 Graceful Shutdown。本篇就是要带
给大家一个全新的工具 Watchtower 用来自动升级更新执行中的容器,让 CD 流程可以再
简化一步,开发者只要上传完 Docker Image,远方的伺服器就可以自动更新。
原本流程:
https://i.imgur.com/XbonwAZ.png
改变後流程:
https://i.imgur.com/sPCVa57.png
## 什麽是 Watchtower
Watchtower 是一个用 Go 语言开发的应用程序,它会监视正在运行的 Docker 容器,并
观察这些容器最初启动时所使用的映像档 (Docker Image) 是否有更改。如果
watchtower 检测到映像档已更改,它将自动使用新映像档重新启动容器。
透过 watchtower,开发者可以通过将新的映像档推送到 Docker Hub 或您自己的
Docker Registry,简单地更新容器化应用程序的运行版本。Watchtower 将下载您的新映
像,优雅地关闭现有容器,然後使用最初部署时使用的相同选项重新启动它。
例如,假设您正在运行 watchtower 以及一个名为 ghcr.io/go-training/example53 的
映像实例:
每隔几分钟,watchtower 将下载最新的 ghcr.io/go-training/example53 映像档并将其
与用於运行 “example53” 容器的映像进行比较。如果它发现映像档已更改,它将停止/
删除 “example53” 容器,然後使用新映像和最初启动容器时使用的相同 docker run
选项重新启动它。
## 使用心得
未来团队在 CI/CD 流程,就可以专注在打包 Image,并且上传到 Docker Registry 即可
,机器上面所有的服务全部透过 Watchtower 来监控,上传的 Image 也遵循 semver 原
则。减轻不少撰写 Shell Script 工作流程。
--
AppleBoy Blog:
http://blog.wu-boy.com
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.254.209.125 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1677928855.A.0FF.html
1F:推 jack0204: 赞赞 03/04 19:28
2F:推 FXW11314: 这个满赞的欸 03/04 19:59
3F:→ superpandal: 这东西不就写个几行shell实现一样东西就能解决了 03/05 00:49
4F:→ superpandal: 决了 特别搞个大专案推说好用... 03/05 00:50
5F:推 imhaha: 推 03/05 00:50
6F:→ superpandal: 以前程式大佬的眼界真的高多了... 03/05 01:03
7F:→ MoonCode: 程式也搞贵古啊 03/05 03:02
8F:→ xatier: 何不 podman ,有内建 03/05 03:23
9F:推 samsumg: image 有 version tag 就不能用 watchtower 03/05 17:38
10F:→ indexcome: 这很早前就有类似的东西罗。 03/05 18:10
11F:→ superpandal: 当然不是纯贵古 现在太多东西都太臃肿了 03/05 20:10
12F:→ superpandal: 整天大炮打小鸟 简洁优雅省时间更好 03/05 20:11
13F:→ superpandal: 只是以前的东西有经过淬链过 比较多精美的 03/05 20:12
14F:→ appleboy46: 回 samsumg: tag 可以只吃 v1,这样 tag v1.0.0 或 03/05 22:13
15F:→ appleboy46: v1.0.1 或 v1.1.2 都可以吃到。 03/05 22:13
16F:→ s860134: 可能不喜欢 Kerberos ,想要小一点 03/05 22:45
17F:→ f496328mm: 好奇这工具,现代化 docker swarm、k8s 03/06 10:15
18F:→ f496328mm: 都可以在 upload docker image 後 03/06 10:16
19F:→ f496328mm: 执行一行指令,更新所有机器的 image 03/06 10:16
20F:→ f496328mm: 应该不会 connect to remote host 03/06 10:17
21F:→ KeyFSN: 感觉不是很实用, 一般一个新的 deployment 都要至少 one 03/06 13:01
22F:→ KeyFSN: box + bake + monitor alarm, 有必要还要 rollback 03/06 13:02
23F:→ KeyFSN: 如果只是单纯每个 host 自己拉新的 image, happy path 当 03/06 13:04
24F:→ KeyFSN: 然很好, 万一多人合作 或是机器数量一大问题就很多 03/06 13:05
25F:→ superpandal: 公司的就用公司的方法 自己的会用私写的工具全远控 03/06 16:35
26F:→ superpandal: 全远控 远端乾净到不能再乾净 03/06 16:36
27F:→ superpandal: 共用的状况开放登入 改登入shell 真unix way 03/06 16:42
28F:→ superpandal: 别人登入的时候给选项选或用变量选择 03/06 16:46
29F:→ superpandal: 只要是深度unix用户应该都会这招 03/06 16:58
30F:→ superpandal: 统一使用方式和根据记录的机器操作 只有爽 03/06 17:05
31F:→ toothlesses: 看流程应该服务还是有 downtime 吧,有 rolling upd 03/07 02:11
32F:→ toothlesses: ate 吗? 03/07 02:11
33F:→ appleboy46: to toothlesses: no rolling update function. 03/07 09:52