2016-09-11 32 views
0

我容納了一個具有容器依賴關係的Web應用程序。容器配置和啓動的Docker依賴設計

容器在這裏列出它們的依賴順序,後者依賴於前者。

  1. 有一個mysql容器編譯mysql,安裝它並配置它。

  2. 有一個learnintouch容器,它將定製產品數據文件和種子定製到mysql容器中。

  3. 有一個learnintouch.com容器,它將自定義網站數據的文件和種子安裝到mysql容器中。

數據種子是應用程序安裝的一部分,只需在應用程序生命週期中進行一次即可。

數據播種相當長,實際上很長。

將應用程序創建並由位於learnintouch.com目錄中的docker-compose.yml文件啓動將是一件好事。首先,我希望只有三個容器,所有依賴項,每個依賴容器等待其依賴項完成其數據播種,然後運行自身,最後啓動應用程序。

我現在看到這將很難實現,如果不是不可能的話。碼頭合成等待啓動服務已經非常困難,但更重要的是要檢查數據傳播是否已完成。

我認爲一種方法是在容器依賴樹中有兩個分支,一個用於應用程序安裝,執行數據播種,另一個只啓動應用程序。

這是常見的做法嗎?

回答

0

最佳做法是刪除依賴項,以便容器可以按任意順序啓動。如果一個容器在它使用的另一個容器之前啓動,那麼如果嘗試使用它,它應該優雅地返回一個錯誤,但只要依賴關係聯機就開始工作。這允許各種微服務獨立升級,替換或遷移,而無需重新啓動整個基礎架構。

如果這是不可能的,請認識到docker-compose對它的功能非常棒,但它的功能在範圍上有限。所以你需要用你自己的腳本來擴展它。因此,您可能有多個撰寫文件,第一個將運行以播種數據直到它完成,然後當它返回時,腳本將繼續到您啓動其他容器的位置。

最後,對於大型數據結構,最好作爲外部捲進行管理,您可以獨立於其他容器創建,更新和備份。

+0

當你說'你可能有幾個組合文件',你的意思是幾個docker-compose.yml文件?我以爲每個目錄只能有一個?我有一個目錄的Docker容器。我想知道如何運行幾個Docker Compose文件。 – Stephane

+0

你可以運行'docker-compose -f docker-compose.dev.yml'來運行你的dev docker-compose文件。爲避免在同一環境中運行多個組合時發生衝突,您還需要使用'docker-compose -p dev -f docker-compose.dev.yml up'來更改項目。這就是如果一切都在同一個目錄中。你總是可以組織不同的目錄。 – BMitch

+0

好的,看到你的一個示例項目會很有趣,關於容器傾聽其依賴性的部分將在網上發佈,並且反過來非常整潔。我會嘗試閱讀如何在微服務docker然後。 – Stephane