[心得] 自動更新執行中的 Docker 容器解決方案
部落格: 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
--
讚讚
這個滿讚的欸
這東西不就寫個幾行shell實現一樣東西就能解決了
決了 特別搞個大專案推說好用...
推
以前程式大佬的眼界真的高多了...
程式也搞貴古啊
何不 podman ,有內建
image 有 version tag 就不能用 watchtower
這很早前就有類似的東西囉。
當然不是純貴古 現在太多東西都太臃腫了
整天大砲打小鳥 簡潔優雅省時間更好
只是以前的東西有經過淬鍊過 比較多精美的
回 samsumg: tag 可以只吃 v1,這樣 tag v1.0.0 或
v1.0.1 或 v1.1.2 都可以吃到。
可能不喜歡 Kerberos ,想要小一點
好奇這工具,現代化 docker swarm、k8s
都可以在 upload docker image 後
執行一行指令,更新所有機器的 image
應該不會 connect to remote host
感覺不是很實用, 一般一個新的 deployment 都要至少 one
box + bake + monitor alarm, 有必要還要 rollback
如果只是單純每個 host 自己拉新的 image, happy path 當
然很好, 萬一多人合作 或是機器數量一大問題就很多
公司的就用公司的方法 自己的會用私寫的工具全遠控
全遠控 遠端乾凈到不能再乾凈
共用的狀況開放登入 改登入shell 真unix way
別人登入的時候給選項選或用變量選擇
只要是深度unix用戶應該都會這招
統一使用方式和根據記錄的機器操作 只有爽
看流程應該服務還是有 downtime 吧,有 rolling upd
ate 嗎?
to toothlesses: no rolling update function.
23
[請益] 容器自學目前自學容器相關技術,想請教方向 Docker 還會是未來主流嗎? Kubernetes 不再支援 docker-shim (雖然仍有第三方的 cri-dockerd 能讓docker 繼續兼容,但也不確定會支持多久) 現在我應該直接學習用 CRI-O 或是 containerd 嗎?20
Re: [心得] 個人自組NAS的心得大家好,看大家分享的設置真的很有趣,這篇小弟就野人獻曝一下,著重在軟體方面 的分享。自從開始學習 Docker 容器虛擬化技術之後,就想著能不能夠將所有的軟體跑 在 Docker 裡面,學習了一段時間終於有一些小心得。 使用 Ubuntu、Debian 之類的常見的 Linux 都可以跑 Docker。 首先這是我跑的所有容器1
[心得] Docker圖解教學 - 什麼是Docker?影片連結: 架構圖: 這邊跟大家分享,正式開課後限時免費開放的單元「什麼是Docker?」 幫助大家了解Docker這項容器化技術出現的原因與目的,是一段有趣的小故事。 (雖然是一支只有五分鐘的影片,但其實從搜集資料、構想、畫圖、錄製、剪輯的整個過程9
[請益] Docker compose 使用 postgres 問題請問一下 我創建了 postgres 的容器,然後寫了一個 python 的程式去連接這個資料庫(python 的程式一樣在 docker 上) 然後我目前是使用 docker build run 的方式去啟動,但是如果我連資料庫的 IP 填 127.0.0.1 的話會無法連線,如果改成了資料庫容器裡的 IP(這裡是 172.17.0.2) 就可以成功,為什麼阿? 但是當我換成用 docker-compose 執行時,使用 127.0.0.1 跟 172.17.0.2 都失敗,反而使用電腦的IP(192.168.0.102(跑在虛擬機上)),就可以連成功? 請問問題出在哪裡啊? 我找資料找了一整天找不到類似的文章,來這裡問問大神8
Re: [請益] 有關虛擬化選擇我會建議vmware,商業的東西,還是找大家都在用的,發生問題也比較好解決,或是找業 務來談談。 另外你的需求建議先使用虛擬機就好,看起來你們應該沒有很多人力可以維護,用虛擬機 跟原本用實體機的操作差不多, 碰到的阻力也會比較少。5
[心得] 容器化與Box86執行exe心得: 也許手機未來能執行Steam商店,看是要用Box86硬跑x86 Linux版的Steam,還是隔一層Wine 跑Win32版本的Steam,至少樹莓派台灣已有成功案例。 以內核支援docker的手機,用Termux執行32位元的Ubuntu容器,接著編譯Box86(x86指令轉A1X
[心得] Docker Debug 挑戰題 - 網頁跑板了!?Docker Debug 挑戰題 - 網頁跑板了!? 小容器 我要進來囉 封面圖: iT邦幫忙圖文好讀版: 軟體版大家好,這邊根據實際工作經驗,特別設計了一道 Docker Debug 挑戰題目。1
[心得] Docker Debug 挑戰題 - 網頁跑板了!?Docker Debug 挑戰題 - 網頁跑板了!? 小容器 我要進來囉 封面圖: iT邦幫忙文章好圖版: 大家好,這邊根據實際工作經驗,特別設計了一道 Docker Debug 挑戰題目。 初始環境有所設置錯誤,試試看妳能否找出 Dockerfile 哪邊需要修改?X
[心得] 容器化技術分享 Podman vs Docker【Podman x 取代 Docker 的潛力股?】 封面圖: 架構圖: