2016-09-30 28 views
2

我們正在開發一個由mongodb,java後端和基於express-js的前端組成的小型項目。我們選擇了docker-compose作爲除生產用途以外的所有部署工具,迄今爲止它已經相當不錯,只有一個例外。管理docker-compose覆蓋文件

目前,我們使用它:

  • 運行本地開發集羣;
  • 運行集成測試(有一些調整和額外的依賴);爲負載測試準備環境(更多調整);
  • 在單獨的雲計算機上運行臨時/演示環境。

以處理每個環境,我們已經推導出一套泊塢窗,撰寫文件中的所有這些不同的調整:docker-compose.ymld-c.override.ymld-c.test.ymld-c.load.ymld-c.demo.ymldocker-composed-c爲了簡潔代替)。

這讓我們使用enourmously長的命令行調用做任何事情,除了基本任務。例如:

docker-compose -f docker-compose.yml -f docker-compose.test.yml up -d --build 
docker-compose -f docker-compose.yml -f docker-compose.test.yml exec test_container ./do_tests.sh 

而且情況變得更糟。

有關提高,到目前爲止,我們已經有了幾個思路:

  1. 採用全泊塢窗,撰寫文件,而不是部分存起來打字 - 但應用結構的變化/引入額外的參數時,額外的維護;
  2. (前者的變體)使用extends用於服務並最小化複製粘貼(但增加了額外的複雜性);
  3. 將所有那些冗長的命令存儲在Makefile(或bash腳本)中。使用方便,但感覺像地毯下的複雜性;
  4. (前者的變體)開發docker-compose插件/自己的工具 - 可能在處理我們的需求時更加明確,但額外的維護和部署複雜性。

所有這些想法都有它們的缺點 - 我想知道什麼是適當的解決方案,以及已經存在的工具。

+0

同樣在這裏,我們已將它們拆分成單獨的文件夾..保持簡單;)cd stage/docker-compose up :-) – opHASnoNAME

回答

1

我覺得3聽起來很不錯。這不是「隱藏複雜性」,它只是自動執行重複任務(輸入長命令行)。

一個Makefile會的工作,但你可能也有興趣dobi(免責聲明:我是這個工具的作者)。 dobi允許您在yaml文件中定義所有項目任務,包括使用不同文件和項目名稱運行Compose。配置爲您的項目一個例子可能是這個樣子

compose=dev: 
    files: [docker-compose.yaml, d-c.override.yml] 

compose=test: 
    files: [docker-compose.yaml, d-c.test.yml] 

compose=load: 
    files: [docker-compose.yaml, d-c.load.yml] 

然後你可以用dobi dev運行任務等

你甚至可能會發現一些一次性的任務可以移動到dobi配置,不需要額外撰寫覆蓋。