2017-05-23 26 views
0

我正在開發一個小型網站(Ruby/Sinatra),用於我工作的內部。 (簡單地說,它嘎吱嘎吱一些源數據並生成報告。)帶Docker的CI/CD - 最後的部署步驟是什麼?

我想要使用Docker進行部署,並設置了適用於我的開發環境的設置,但我試圖瞭解「生產「部署(我們正在使用詹金斯)。

我已經閱讀了許多關於使用Docker的部署工作流的文章,但他們似乎都停在「然後將您的映像推送到Docker註冊表」。似乎缺少的是如何拍攝該圖像並實際更新應用程序。

我明白,每一個應用程序可能會有所不同,但下一步是什麼?我知道很多不同的框架,比如Chef,Puppet,Ansible都可以使用,但我的問題確實是 - 我如何將它集成到我的CI/CD管道中?例如。是否有工作會將更改推送到生產服務器,或者應該在生產服務器上運行Jenkins從服務器以直接在服務器上執行作業?

回答

1

有許多編排工具,如碼頭羣,kubernetes和牧場主。例如,在docker swarm中,您可以創建服務,並且可以使用藍綠色部署方式更新版本,僅用於一個實例(然後不存在藍綠色:)),如果您只是使用docker run,則應檢查運行的容器,停止如果它運行了一個啓動你的碼頭容器與更新的圖像版本,將其刪除。

0

這取決於您的應用程序如何配置運行。在我的情況下,我在systemd腳本中調用了「docker run」。如果它停止,它被配置爲重新啓動。因此,在我的Jenkins文件中,在將圖像推送到註冊表後,我執行了一個「docker pull」(我的Jenkins代理與應用程序運行在同一個框上),然後執行「docker stop 」。這會導致應用程序退出,然後重新啓動,這會導致它獲得剛剛被拖動的新版本,現在它正在運行新版本。

+0

謝謝大衛。我能否清楚,但是當你說「我做碼頭拉」時 - 是手動步驟嗎?或者是詹金斯的工作?如果後者是什麼觸發詹金斯的工作?它是你的管道的一部分嗎? –

+0

哦,順便說一句 - 我知道你可以配置docker包含重啓策略 - 例如https://blog.codeship.com/ensuring-containers-are-always-running-with-dockers-restart-policy/ systemd中的'docker run'可能是不必要的? –

相關問題