CodeGym /Adesua ahorow /Docker SELF /為應用程序設置網絡和卷

為應用程序設置網絡和卷

Docker SELF
等級 23 , 課堂 4
開放

5.1 設置網路

我們再來仔細看看如何為我們的多容器應用設置網路和卷。這將確保服務之間的正確交互和數據的持久存儲。

Docker網路允許容器彼此交互。在我們的應用中,我們會使用 bridge-網路來連接前端、後端和數據庫。

創建網路

我們已經在 docker-compose.yml 文件中定義了網路 task-network:

Yaml

networks:
  task-network:
    driver: bridge

這裡:

  • task-network: 網路的名字,將用於容器之間的交互。
  • driver: bridge: 網路的類型。 bridge 網路是單個宿主機上容器間通信的標準類型。

將服務連接到網路

我們已經在 docker-compose.yml 文件中將所有服務連接到了這個網路。確認每個服務都正確連接:

前端示例:

Yaml

frontend:
  build: ./frontend
  ports:
    - "3000:3000"
  networks:
    - task-network

後端示例:

Yaml

backend:
  build: ./backend
  ports:
    - "5000:5000"
  depends_on:
    - database
  networks:
    - task-network
  environment:
    - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb

數據庫示例:

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

5.2 配置卷

Docker 卷讓我們可以將容器的數據保存在主機系統上,確保數據的長期存儲。在我們的應用中,我們會使用卷來存儲 PostgreSQL 資料庫的數據。

創建卷

我們已經在 compose.yaml 文件中定義了卷 db-data:

Yaml

volumes:
  db-data:

含義如下:

  • db-data: 卷的名稱,用於存儲 PostgreSQL 資料庫的數據。

將卷掛載到資料庫服務

我們已經在 docker-compose.yml 文件中把卷 db-data 挂載到了資料庫服務。請確認這部分設置正確:

資料庫範例:

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  

含義如下:

  • volumes: 定義哪些卷將被掛載到容器上。
  • db-data:/var/lib/postgresql/data: 把卷 db-data 與容器內的目錄 /var/lib/postgresql/data 進行綁定。這個目錄是 PostgreSQL 用於存儲數據的地方。

5.3 完整的 compose.yaml 文件

為了更清楚和完整,我們提供了包含網路和卷設置的完整 compose.yaml 文件:

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:

檢查網路和卷設置

設定網路和卷後,請確保所有配置正確並正常運行:

  1. 1. 啟動容器:
    Terminal
    
    docker compose up
                
  2. 2. 檢查網路:
    • 使用命令 docker network ls,確認網路 task-network 已被創建。
    • 使用命令 docker network inspect task-network,檢查所有容器是否已連接到該網路。
  3. 3. 檢查卷:
    • 使用命令 docker volume ls,確認卷 db-data 已被創建。
    • 使用命令 docker volume inspect db-data,查看卷的詳細資訊。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION