我有一個關於最佳實踐的問題。使用Docker-compose和vcs的Dockerfile的最佳實踐
比方說,我有一個web前端開發的angularjs和API來獲取數據。我把這兩個放在不同的倉庫中。 現在我想要dockerize整個事情。我的想法是在每個指定其環境的項目中放入一個Dockerfile。到現在爲止它很好,但是當我還有一個docker-compose文件時,它同時啓動了這兩個服務?首先,我應該把這個文件放在哪個回放中,其次我該如何保證圖像始終是最新的?
我有一個關於最佳實踐的問題。使用Docker-compose和vcs的Dockerfile的最佳實踐
比方說,我有一個web前端開發的angularjs和API來獲取數據。我把這兩個放在不同的倉庫中。 現在我想要dockerize整個事情。我的想法是在每個指定其環境的項目中放入一個Dockerfile。到現在爲止它很好,但是當我還有一個docker-compose文件時,它同時啓動了這兩個服務?首先,我應該把這個文件放在哪個回放中,其次我該如何保證圖像始終是最新的?
可以使用的結構是這樣的:
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腳本來解決。您的第二項服務將使用該腳本並檢查第一項服務何時啓動。當它啓動時,它將開始自己的服務。
嗨lorenzvth7感謝您的回覆。在這種情況下,我必須創建另一個存儲庫,其中包含另外兩個項目(前端和api)作爲子模塊? – hesyar
我認爲這將是最好的/最簡單的解決方案。 – lvthillo