4.1 初始化
在這一步中,我們會配置 compose.yaml
檔案來啟動我們多容器應用程式的所有服務。compose.yaml
檔案會包含前端、後端和資料庫的設定,以及網路和磁碟卷的定義。
定義 Docker Compose 的版本
我們先從指定 Docker Compose 的版本開始。在這個例子中使用版本 3:
Yaml
version: '3'
4.2 定義服務
服務 1: Frontend (ReactJS)
定義前端服務,該服務會從 frontend 資料夾構建並在埠口 3000 上可用:
Yaml
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
服務 2: Backend (Flask)
定義後端服務,該服務會從 backend 資料夾構建。它依賴於數據庫服務並在埠口 5000 上可用:
Yaml
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
說明:
- depends_on: 指定 backend 服務依賴於 database 服務。這意思是數據庫會在後端啟動之前啟動。
- environment: 配置連接數據庫所需的環境變量。
服務 3: Database (PostgreSQL)
定義數據庫服務,使用官方映像 postgres:13。設定環境變量來創建數據庫和用戶憑據:
Yaml
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
說明:
-
environment
: 配置在容器啟動時創建數據庫和用戶的環境變量。 -
volumes
: 掛載 db-data 卷以持久化存儲數據。
4.3 配置網路和卷
我們來定義將被我們的服務使用的網路和卷:
Yaml
networks:
task-network:
driver: bridge
volumes:
db-data:
其中:
- networks: 定義名稱為
task-network
的網路,使用的驅動類型是bridge
,用於容器之間的通訊。 - volumes: 定義名稱為
db-data
的卷,用於存儲資料庫數據。
4.4 完整文件 docker-compose.yml
現在把所有部分合併成一個文件 docker-compose.yml
:
Yaml
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
networks:
task-network:
driver: bridge
volumes:
db-data:
設定說明
-
build
: 指定帶有Dockerfile
的目錄路徑來構建映像。 -
ports
: 開放主機上的端口以訪問服務。 -
depends_on
: 指定服務依賴於其他服務,以確保啟動的順序。 -
environment
: 配置服務的環境變數。 -
networks
: 定義容器之間的通信網絡。 -
volumes
: 定義數據持久存儲的卷。
4.5 啟動應用程式
現在 compose.yaml
文件已經配置好了,我們可以用一條指令啟動所有服務:
Terminal
docker compose up
這條指令會依據 compose.yaml
中的設定,建立並啟動前端、後端和資料庫的容器。
檢查啟動
容器啟動後,確保所有的服務正常運行:
- Frontend: 打開瀏覽器,訪問 http://localhost:3000,檢查前端是否正常工作。
- Backend: 打開瀏覽器,訪問 http://localhost:5000,檢查後端是否正常工作。
- Database: 確保資料庫容器已啟動,並能通過與後端的網路交互進行訪問。
GO TO FULL VERSION