2017-02-22 16 views
0

我有一個關於最佳實踐的問題。使用Docker-compose和vcs的Dockerfile的最佳實踐

比方說,我有一個web前端開發的angularjs和API來獲取數據。我把這兩個放在不同的倉庫中。 現在我想要dockerize整個事情。我的想法是在每個指定其環境的項目中放入一個Dockerfile。到現在爲止它很好,但是當我還有一個docker-compose文件時,它同時啓動了這兩個服務?首先,我應該把這個文件放在哪個回放中,其次我該如何保證圖像始終是最新的?

回答

1

可以使用的結構是這樣的:

project/ 
- project/docker-compose.yaml 
- project/frontend/ (contains Dockerfile + necessary files) 
- project/api/ (contains Dockerfile + necessary files) 

在你docker-compose.yaml你可以寫這樣的事情對每個圖像:

frontend: 
    build: ./frontend #folder in which Dockerfile of frontend is saved (to build the image) 
    image: my-frontend:1.0 #give a name to your image 
container_name: frontend-container #containername when a container instance of your image is running 

開始docker-compose可以運行docker-compose up --build--build標記將在有更改時重新創建圖像,以便在dockerfile(圖像)發生更改時保持最新的構圖。

Docker-compose是從上到下的「閱讀」。因此,您首先在docker-compose.yaml中描述的服務將首先創建。我認爲這是你的API,因爲它可能獨立存在,你的前端需要與它連接。有時你的第一個服務啓動太慢,這意味着第二個服務已經啓動,但找不到第一個服務(連接)並且崩潰。這可以通過使用wait-for-it.sh腳本來解決。您的第二項服務將使用該腳本並檢查第一項服務何時啓動。當它啓動時,它將開始自己的服務。

+0

嗨lorenzvth7感謝您的回覆。在這種情況下,我必須創建另一個存儲庫,其中包含另外兩個項目(前端和api)作爲子模塊? – hesyar

+1

我認爲這將是最好的/最簡單的解決方案。 – lvthillo