CodeGym /Adesua ahorow /Docker SELF /配置 docker-compose.yml 來啟動所有服務

配置 docker-compose.yml 來啟動所有服務

Docker SELF
等級 23 , 課堂 3
開放

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 中的設定,建立並啟動前端、後端和資料庫的容器。

檢查啟動

容器啟動後,確保所有的服務正常運行:

  1. Frontend: 打開瀏覽器,訪問 http://localhost:3000,檢查前端是否正常工作。
  2. Backend: 打開瀏覽器,訪問 http://localhost:5000,檢查後端是否正常工作。
  3. Database: 確保資料庫容器已啟動,並能通過與後端的網路交互進行訪問。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION