2016-08-22 50 views
3

我想dockerize我的生產軌道應用程序。碼頭工人,如何取代碼頭工人的卡皮斯特拉諾任務

當前應用程序使用Ansible配置並使用capistrano進行部署。

我研究了不同的碼頭工人部署策略的和思想的搬運工擺脫Capistrano的和將要使用泊塢窗與碼頭工人,組成

我寫dockerfile配置和部署應用程序,但它是有點複雜的部署類似於capistrano的應用程序,因爲deploy.rb使用少量rake任務來設置預先部署任務,如創建目錄設置應用程序名稱和獲取少量變量。

如何在dockerfile中重複上限任務,或者有沒有辦法在docker文件或運行docker容器中使用當前上限任務?

回答

1

現在是回顧並考慮Docker的好處是否超過了增加的複雜度,適合您的情況的好時機。假設是這樣,以下是關於如何使這些組件更好地協同工作的一些建議。

雖然Ansible是一個配置管理系統,它也是爲編排(即跨一系列遠程機器運行命令)而設計的。這與Capistrano有一些交叉,因此,您可能會發現將Capistrano任務移植到Ansible並從堆棧中消除工具(以及複雜性)很有用。這可能來自創建一個deploy.yaml劇本,您運行該劇本來部署您的應用程序。

泊塢窗也與Ansible重疊責任,但在不同的區域,配置。應用程序所需的任何系統配置部分都可以在容器內使用Dockerfile配置,而不是在使用Ansible的系統級別配置。

如果您有設置應用程序環境的rake任務,可以將它們放入Dockerfile中的RUN命令中。但請記住,這些只會在您執行構建圖片時執行,而不會在您運行時運行它。

一般來說,我這樣看待它:Docker設置了一個容器,其中包含運行一個應用程序所需的所有內容(包括特定的代碼簽出)。 Ansible配置您運行容器的環境並管理所有工作以更新它們並將它們放在正確的位置。

+0

是的你是對的,只有在構建dockerfile時纔會提取,但是現在我的痛苦是從capistrano獲取容器上的rake任務,還是應該簡單地將它們轉換爲shell腳本並從dockerfile中調用它們?順便說一句感謝您的詳細解釋,但我會使用Ansible只提供容器。 – slashRahul

+0

這取決於你的Cap命令在做什麼。如果它們只在本地機器上運行,那麼你可以簡單地在dockerfile中運行它們。如果它們被設計爲在遠程主機上運行,​​那麼你需要做一些工作來使你的docker容器可以通過像ssh這樣的標準編排方法來訪問,或者重寫它們以僅在本地機器上運行。 –