3 回答

TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊
最佳實踐是將它們作為三個獨立的容器啟動。這是雙重正確的,因為您正在使用三個獨立的應(yīng)用程序,將它們捆綁到一個容器中,然后嘗試從中啟動三個獨立的東西。
在您的每個項目子目錄中創(chuàng)建一個單獨的 Dockerfile。這些可以更簡單,特別是對于只包含已編譯二進(jìn)制文件的
# execproject/Dockerfile
FROM ubuntu:18.04
WORKDIR /app
COPY . ./
CMD ["./gowebapp"]
然后在您的docker-compose.yml文件中有三個單獨的節(jié)來啟動容器
version: '3'
services:
pythonic_project1:
build: ./pythonic_project1
ports:
- 8008:8008
env:
PY2_URL: 'http://pythonic_project2:8009'
GO_URL: 'http://execproject:8010'
pythonic_project2:
build: ./pythonic_project2
execproject:
build: ./execproject
如果你真的不能重新排列你的 Dockerfiles,你至少可以從docker-compose.yml文件中的同一個鏡像啟動三個容器:
services:
pythonic_project1:
build: .
workdir: /app/pythonic_project1
command: ./__main__.py
pythonic_project2:
build: .
workdir: /app/pythonic_project1
command: ./__main__.py
使用多個容器和圖像構(gòu)建項目有幾個很好的理由:
如果您運行自己的 shell 腳本并使用后臺進(jìn)程(就像其他答案一樣),它只是不會注意到其中一個進(jìn)程是否死亡;在這里你可以使用 Docker 的重啟機制來重啟單個容器。
如果您對其中一個程序進(jìn)行了更新,則只能更新并重新啟動該單個容器,而其余部分保持不變。
如果您使用過更復(fù)雜的容器編排器(Docker Swarm、Nomad、Kubernetes),不同的組件可以在不同的主機上運行,并且在單個節(jié)點上需要較小的 CPU/內(nèi)存資源塊。
如果您使用過更復(fù)雜的容器編排器,您可以單獨擴(kuò)展使用更多 CPU 的組件。
添加回答
舉報