我在開發環境中使用 docker-compose 和一個docker-compose.yml
文件,其中列出了我需要的所有容器。
此外,我還有一個集中式 git 儲存庫、Jenkins 伺服器和另一台伺服器,我將在其中保留暫存和生產。
那麼問題是如何更好地組織部署過程。
現在,git push
在 git 伺服器端觸發 Jenkins 建置作業。根據分支名稱(暫存或生產),將觸發不同的作業。
建置作業使用 docker-compose 來啟動整個環境並執行測試。那麼如何將新容器推送到暫存/生產環境呢?
一種方法是將它們推送到私人或公共 Docker 註冊表,但是在生產中更新容器的最佳實踐是什麼? Jenkins 伺服器是否應該只使用 ssh 並執行 raw 、kill
和rm
指令?我沒有看到周圍的例子。pull
run
答案1
Kubernetes、Docker Swarm 或 Rancher 可能是實現滾動更新的最佳方式。
基本上,滾動更新將採用一組容器(稱為服務)並逐一更新它們。因此,假設您有三個容器運行您的應用程序,滾動更新將關閉第一個容器並更新它,依此類推,直到服務完全更新。這意味著您可以有效地獲得應用程式的零停機時間,因為這些產品中的負載平衡器是智慧的,不會重新導向到更新容器。
此連結為您提供了 Swarm 運行服務然後更新它的基本實作。
對於一些最簡單的設定和實施 - 根據我的經驗,Rancher 是掌握所有這些概念的一個很好的起點。它基本上是 Kubernetes 等不同 Docker 技術之上的介面。