[心得] 自動更新執行中的 Docker 容器解決方案

看板Soft_Job作者 (小惡魔)時間1年前 (2023/03/04 19:20), 編輯推噓4(4029)
留言33則, 13人參與, 1年前最新討論串1/1
部落格: 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://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
這東西不就寫個幾行shell實現一樣東西就能解決了
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
何不 podman ,有內建
03/05 03:23, 8F

03/05 17:38, 1年前 , 9F
image 有 version tag 就不能用 watchtower
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
回 samsumg: tag 可以只吃 v1,這樣 tag v1.0.0 或
03/05 22:13, 14F

03/05 22:13, 1年前 , 15F
v1.0.1 或 v1.1.2 都可以吃到。
03/05 22:13, 15F

03/05 22:45, 1年前 , 16F
可能不喜歡 Kerberos ,想要小一點
03/05 22:45, 16F

03/06 10:15, 1年前 , 17F
好奇這工具,現代化 docker swarm、k8s
03/06 10:15, 17F

03/06 10:16, 1年前 , 18F
都可以在 upload docker image 後
03/06 10:16, 18F

03/06 10:16, 1年前 , 19F
執行一行指令,更新所有機器的 image
03/06 10:16, 19F

03/06 10:17, 1年前 , 20F
應該不會 connect to remote host
03/06 10:17, 20F

03/06 13:01, 1年前 , 21F
感覺不是很實用, 一般一個新的 deployment 都要至少 one
03/06 13:01, 21F

03/06 13:02, 1年前 , 22F
box + bake + monitor alarm, 有必要還要 rollback
03/06 13:02, 22F

03/06 13:04, 1年前 , 23F
如果只是單純每個 host 自己拉新的 image, happy path 當
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
共用的狀況開放登入 改登入shell 真unix way
03/06 16:42, 27F

03/06 16:46, 1年前 , 28F
別人登入的時候給選項選或用變量選擇
03/06 16:46, 28F

03/06 16:58, 1年前 , 29F
只要是深度unix用戶應該都會這招
03/06 16:58, 29F

03/06 17:05, 1年前 , 30F
統一使用方式和根據記錄的機器操作 只有爽
03/06 17:05, 30F

03/07 02:11, 1年前 , 31F
看流程應該服務還是有 downtime 吧,有 rolling upd
03/07 02:11, 31F

03/07 02:11, 1年前 , 32F
ate 嗎?
03/07 02:11, 32F

03/07 09:52, 1年前 , 33F
to toothlesses: no rolling update function.
03/07 09:52, 33F
文章代碼(AID): #1a0ocN3_ (Soft_Job)