[心得] 自動更新執行中的 Docker 容器解決方案
現在大家在部署服務肯定都已經容器化,而如何有效管理及升級容器不影響現有的服務,
這就是一個重要的議題,然而在 CI/CD 的流程內,肯定有兩個步驟是必須的,第一就是
將環境打包成 Docker Image 並上傳到公司內私有的 Docker Registry,以及上傳完畢後
,也許透過 SSH 方式連上機器,並且拉取新的映像檔,再透過 Graceful Shutdown 機制
重新啟動正在執行的服務。可以參考這篇了解什麼是 Graceful Shutdown。本篇就是要帶
給大家一個全新的工具 Watchtower 用來自動升級更新執行中的容器,讓 CD 流程可以再
簡化一步,開發者只要上傳完 Docker Image,遠方的伺服器就可以自動更新。
原本流程:
https://i.imgur.com/XbonwAZ.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://www.ptt.cc/bbs/Soft_Job/M.1677928855.A.0FF.html
推
03/04 19:28,
1年前
, 1F
03/04 19:28, 1F
推
03/04 19:59,
1年前
, 2F
03/04 19:59, 2F
→
03/05 00:49,
1年前
, 3F
03/05 00:49, 3F
→
03/05 00:50,
1年前
, 4F
03/05 00:50, 4F
推
03/05 00:50,
1年前
, 5F
03/05 00:50, 5F
→
03/05 01:03,
1年前
, 6F
03/05 01:03, 6F
→
03/05 03:02,
1年前
, 7F
03/05 03:02, 7F
→
03/05 03:23,
1年前
, 8F
03/05 03:23, 8F
推
03/05 17:38,
1年前
, 9F
03/05 17:38, 9F
→
03/05 18:10,
1年前
, 10F
03/05 18:10, 10F
→
03/05 20:10,
1年前
, 11F
03/05 20:10, 11F
→
03/05 20:11,
1年前
, 12F
03/05 20:11, 12F
→
03/05 20:12,
1年前
, 13F
03/05 20:12, 13F
→
03/05 22:13,
1年前
, 14F
03/05 22:13, 14F
→
03/05 22:13,
1年前
, 15F
03/05 22:13, 15F
→
03/05 22:45,
1年前
, 16F
03/05 22:45, 16F
→
03/06 10:15,
1年前
, 17F
03/06 10:15, 17F
→
03/06 10:16,
1年前
, 18F
03/06 10:16, 18F
→
03/06 10:16,
1年前
, 19F
03/06 10:16, 19F
→
03/06 10:17,
1年前
, 20F
03/06 10:17, 20F
→
03/06 13:01,
1年前
, 21F
03/06 13:01, 21F
→
03/06 13:02,
1年前
, 22F
03/06 13:02, 22F
→
03/06 13:04,
1年前
, 23F
03/06 13:04, 23F
→
03/06 13:05,
1年前
, 24F
03/06 13:05, 24F
→
03/06 16:35,
1年前
, 25F
03/06 16:35, 25F
→
03/06 16:36,
1年前
, 26F
03/06 16:36, 26F
→
03/06 16:42,
1年前
, 27F
03/06 16:42, 27F
→
03/06 16:46,
1年前
, 28F
03/06 16:46, 28F
→
03/06 16:58,
1年前
, 29F
03/06 16:58, 29F
→
03/06 17:05,
1年前
, 30F
03/06 17:05, 30F
→
03/07 02:11,
1年前
, 31F
03/07 02:11, 31F
→
03/07 02:11,
1年前
, 32F
03/07 02:11, 32F
→
03/07 09:52,
1年前
, 33F
03/07 09:52, 33F