我的本地 docker 容器應用由 4 個影像組成,React、Django、nginx、postgres。它在本地完美運行,(當然我需要在本地計算機上手動轉到 127.1.1.0 才能查看應用程式)
我希望其他人也能夠查看這個應用程式,如果他們在本地計算機上安裝了 docker,因此,使用 docker 檔案中的步驟,我將所有四個影像推送到 docker hub。
我對檔案的其余部分感到困惑,就像我嘗試使用以下本地 docker 映像名稱的示例一樣
docker run -d -p 3000:8000 --restart=always --name myport myport_nginx,
只拉取了 nginx 鏡像服務,并且能夠作為單個容器啟動,但沒有呼叫其余服務。
因此,我的問題是:我如何定義這四個影像,以便它們以它們在我的本地計算機上的方式連接,因此任何擁有本地 docker 的人都可以通過訪問他的 127.0.0.1 來拉取我的存盤庫并檢查我的應用程式本地計算機。我知道 dockerbub 類似于 github,這應該是直截了當的,但不知何故,我的腦袋搞混了,我想澄清一下。
下面是用于在第一個實體中構建應用程式的 dockercompose.yml 檔案。我知道有可能修改我的 .yaml 以便一個影像可以呼叫并啟動所有其他三個影像,如果可能或好的做法,我希望得到幫助。
version: "3.7"
services:
django:
build:
context: ./backend
dockerfile: Dockerfile
volumes:
- django_static_volume:/usr/src/app/static
expose:
- 8000
env_file:
- ./backend/.env
command: gunicorn mainapp.wsgi:application --bind 0.0.0.0:8000
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:12.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
env_file:
- ./postgres/.env
react:
build:
context: ./frontend
dockerfile: Dockerfile
args:
- API_SERVER=${ENV_API_SERVER}
volumes:
- react_static_volume:/usr/src/app/build/static
expose:
- 3000
env_file:
- .env
command: serve -s build -l 3000
depends_on:
- django
nginx:
restart: always
build: ./nginx
volumes:
- django_static_volume:/usr/src/app/django_files/static
- react_static_volume:/usr/src/app/react_files/static
ports:
- 80:80
depends_on:
- react
- django
volumes:
postgres_data:
django_static_volume:
react_static_volume:
uj5u.com熱心網友回復:
讓我們專注于單一服務。您需要對所有這些進行類似的更改。
react:
build:
context: ./frontend
dockerfile: Dockerfile
這將在您的本地系統上構建frontend目錄。您需要將其替換為指向 Docker Hub 映像的線。image:
args:
- API_SERVER=${ENV_API_SERVER}
這會編譯到您推送到 Docker Hub 的映像的特定 URL。其他消費者可能無法使用它。如果您的nginx反向代理容器已經在同一主機和不同的 URL 路徑上同時為 React 應用程式和后端 API 提供服務,那么您可能能夠使用類似路徑的 URL/api并避免配置它。
volumes:
- react_static_volume:/usr/src/app/build/static
這會將應用程式中的靜態檔案替換為命名卷的內容。如果您在本地以某種方式對其進行了修改,那么您的其他消費者將不會擁有它;如果更新映像,命名卷將保持不變,并且映像中更新的檔案將不可見。我建議洗掉這樣的命名卷。(您的nginx容器需要COPY將靜態檔案放入其映像中。)
expose:
- 3000
這沒有任何作用,可以安全地洗掉。
env_file:
- .env
此.env檔案僅存在于您的本地系統上。您可以分發該檔案或將其轉換為行內environment:變數,或者根據設定,使用 DockerfileENV指令修復它們。
command: serve -s build -l 3000
這會覆寫影像CMD,并且不是必需的。
depends_on:
- django
這可以。
在清理完這一切之后,對于這項服務,我希望它更像:
react:
image: 2fresh/frontend
depends_on:
- django
您可能會發現docker-compose.override.yml在docker-compose.yml. 這提供了您只需要本地開發的定義,例如如何處理build:影像。這兩個檔案將被合并,并且將兩者合并build:在一起image:告訴 Compose 為構建的影像使用什么名稱。
# docker-compose.override.yml
version: '3.8'
services:
react:
build: ./frontend
# all other settings in main docker-compose.yml file
uj5u.com熱心網友回復:
命令應該是docker-compose up. docker run只會啟動一個容器。Docker 撰寫官方檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/472766.html
