2017-02-17 88 views
10

我想繞過Docker,但我很難搞清楚它。我試圖在我的小型項目(MERN堆棧)中實現它,並且我在考慮如何區分開發(可能是分段)和生產環境。Docker多個環境

我看到一個example他們使用了2個Docker文件和2個docker-compose文件(每個對一個env,所以Dockerfile + docker-compose.yml用於prod,Dockerfile-dev + docker-compose-dev)。 yml for dev)。

但這對我來說似乎有點矯枉過正。我寧願只有兩個文件。

另外一個問題是,例如,對於開發,我想要全局安裝nodemon,但不能用於生產。

在完美的解決方案我想運行類似的東西

docker-compose -e ENV=dev build 
docker-compose -e ENV=dev up 

請記住,我還沒有完全得到泊塢窗,所以如果你抓住了一些有關碼頭工人雷誤解的,你可以點出來。

回答

11

你可以採取一些線索來自「Using Compose in production

你幾乎肯定要做出更適合於現場環境的變化,以您的應用程序的配置。這些變化可能包括:

  • 刪除應用程序代碼的任何音量綁定,從而使代碼保持容器內,不能從外部
  • 綁定到不同的端口主機
  • 設置環境變量的變化不同(例如,降低日誌的詳細程度,或使電子郵件發送)
  • 指定重新啓動策略(如重啓:總是),以避免停機
  • 增加額外的服務(如日誌聚合器)

的建議是,再不行頗爲相似,你所提到的例子:

出於這個原因,你可能要定義一個額外撰寫文件,說production.yml,指定生產合適組態。此配置文件只需包含您想要從原始撰寫文件中進行的更改。

docker-compose -f docker-compose.yml -f production.yml up -d 

overriding mechanism是不是試圖在撰寫文件混合開發和督促邏輯,環境變量,試圖選擇一個更好的。

注意:如果您命名第二個碼頭文件docker-compose.override.yml,則簡單docker-compose up會自動讀取覆蓋碼。
但在你的情況下,基於環境的名稱更清晰。

+0

太棒了,謝謝你的解釋! –

2

默認情況下,Docker Compose將讀取docker-compose.ymldocker-compose.override.ymlUnderstanding-Multiple-Compose-Files

您可以設置一個默認的docker-compose.yml和不同的覆蓋撰寫文件。例如,docker-compose.prod.ymldocker-compose.test.yml。讓他們在同一個地方。

然後爲每個env創建一個名爲docker-compose.override.yml的符號鏈接。
Track docker-compose.{env}.yml files and add docker-compose.override.yml to .gitignore
在督促ENV:ln -s ./docker-compose.prod.yml ./docker-compose.override.yml
在測試ENV:ln -s ./docker-compose.test.yml ./docker-compose.override.yml
然後,項目結構如下所示:

project\ 
    - docker-compose.yml  # tracked 
    - docker-compose.prod.yml # tracked 
    - docker-compose.test.yml # tracked 
    - docker-compose.override.yml # ignored 
      #linked to override composefile for current env 
    - src/ 
    - ... 

然後你做了。在每個環境中,您可以使用具有相同命令的撰寫文件docker-compose up

如果您不確定,請使用docker-compose config檢查它是否被正確覆蓋。