部落格: 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 工作流程。