[心得] 自动更新执行中的 Docker 容器解决方案

楼主: appleboy46 (小恶魔)   2023-03-04 19:20:49
部落格: 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 工作流程。
作者: jack0204 (Jarbar王朝)   2023-03-04 19:28:00
赞赞
作者: FXW11314 (soukai)   2023-03-04 19:59:00
这个满赞的欸
作者: superpandal   2023-03-05 00:49:00
这东西不就写个几行shell实现一样东西就能解决了决了 特别搞个大专案推说好用...
作者: imhaha (嘿嘿)   2023-03-05 00:50:00
作者: superpandal   2023-03-05 01:03:00
以前程式大佬的眼界真的高多了...
作者: MoonCode (MoonCode)   2023-03-05 03:02:00
程式也搞贵古啊
作者: xatier (一切重来就好了...)   2023-03-05 03:23:00
何不 podman ,有内建
作者: samsumg (松松)   2023-03-05 17:38:00
image 有 version tag 就不能用 watchtower
作者: indexcome (My Happiness)   2023-03-05 18:10:00
这很早前就有类似的东西囉。
作者: superpandal   2023-03-05 20:10:00
当然不是纯贵古 现在太多东西都太臃肿了整天大砲打小鸟 简洁优雅省时间更好只是以前的东西有经过淬炼过 比较多精美的
楼主: appleboy46 (小恶魔)   2023-03-05 22:13:00
回 samsumg: tag 可以只吃 v1,这样 tag v1.0.0 或v1.0.1 或 v1.1.2 都可以吃到。
作者: s860134 (s860134)   2023-03-05 22:45:00
可能不喜欢 Kerberos ,想要小一点
作者: f496328mm (为什么会流泪)   2023-03-06 10:15:00
好奇这工具,现代化 docker swarm、k8s都可以在 upload docker image 后执行一行指令,更新所有机器的 image应该不会 connect to remote host
作者: KeyFSN ( ~☼☽✩☁~ )   2023-03-06 13:01:00
感觉不是很实用, 一般一个新的 deployment 都要至少 onebox + bake + monitor alarm, 有必要还要 rollback如果只是单纯每个 host 自己拉新的 image, happy path 当然很好, 万一多人合作 或是机器数量一大问题就很多
作者: superpandal   2023-03-06 16:35:00
公司的就用公司的方法 自己的会用私写的工具全远控全远控 远端干净到不能再干净共用的状况开放登入 改登入shell 真unix way别人登入的时候给选项选或用变量选择只要是深度unix用户应该都会这招统一使用方式和根据记录的机器操作 只有爽
作者: toothlesses (toothless)   2023-03-07 02:11:00
看流程应该服务还是有 downtime 吧,有 rolling update 吗?
楼主: appleboy46 (小恶魔)   2023-03-07 09:52:00
to toothlesses: no rolling update function.

Links booklink

Contact Us: admin [ a t ] ucptt.com