網路與儲存

Vibe Prompt

「幫我設計一個微服務網路架構:前端在 public 網路,後端和資料庫在 internal 網路,後端可以連 DB,前端不行。」

網路隔離

services:
  frontend:
    networks:
      - frontend
  
  backend:
    networks:
      - frontend
      - backend
  
  postgres:
    networks:
      - backend

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
    internal: true  # 無法存取外部網路

Volume 類型

| 類型 | 範例 | 說明 | |------|------|------| | Named Volume | pgdata:/var/lib/postgresql/data | Docker 管理,持久化 | | Bind Mount | ./src:/app/src | 主機目錄掛載,hot reload | | Anonymous | /app/node_modules | 臨時儲存,容器刪除後消失 | | Tmpfs | /tmp:ro | 記憶體暫存,高效能 |

Volume 驅動

volumes:
  pgdata:
    driver: local
  
  s3data:
    driver: rclone
    driver_opts:
      remote: s3://my-bucket
      type: s3

關鍵要點

  • ✅ 請根據本章主題補充具體的學習重點
  • ✅ 建議加入比較表格、程式碼範例或流程圖
  • ✅ 確保內容扎實且有價值

Docker 網路驅動比較

| 驅動 | 隔離性 | 跨主機 | 適用場景 | |:----:|:------:|:------:|---------| | bridge | ✅ 每個容器獨立 IP | ❌ | 單一主機上的容器通訊(預設) | | host | ❌ 共用主機網路 | ✅ | 需要高效能網路的服務 | | overlay | ✅ | ✅ | Swarm / Kubernetes 跨主機網路 | | macvlan | ✅ 直接分配 MAC | ✅ | 需要直接連入實體網路 | | none | ❌ 無網路 | ❌ | 不需要網路的容器 |

自訂 Bridge 網路的好處

使用自訂 bridge 網路而非預設的 docker0

  • 內建 DNS 解析:容器可以透過服務名稱互相連線(如 ping db
  • 更好的隔離性:只有加入同一網路的容器才能通訊
  • 動態加入/離開:可以在容器執行中加入或移除網路
# 建立自訂網路
docker network create --driver bridge app-network

# 查看網路
docker network ls

# 將容器連接到網路
docker network connect app-network my-container

Docker 磁碟區類型

| 類型 | 儲存位置 | 生命週期 | 備份難度 | |:----:|---------|:--------:|:--------:| | Named Volume | /var/lib/docker/volumes/ | Docker 管理 | ❌ 需手動備份 | | Bind Mount | 主機任意路徑 | 主機管理 | ✅ 直接備份 | | tmpfs | 記憶體 | 容器停止即消失 | ❌ 不需備份 | | NFS Volume | 遠端 NFS 伺服器 | 外部管理 | ✅ 集中備份 |

選擇建議

  • 開發環境:使用 Bind Mount(方便即時修改)
  • 生產環境:使用 Named Volume(Docker 管理最安全)
  • 暫存資料:使用 tmpfs(效能最好)
  • 多主機共享:使用 NFS Volume 或雲端儲存


Docker Compose 實戰要點

Docker Compose 是定義和執行多容器 Docker 應用的工具。用 YAML 檔案設定服務、網路、磁碟區。

為什麼重要?

在 production 部署中,你很少只跑一個容器。Compose 讓你把 Web Server、資料庫、快取、佇列全部定義在同一個 YAML 中,一行指令全部啟動。

網路的隔離策略

Compose 預設為每個專案建立一個獨立的網路。不同專案的容器無法直接通訊——這提供了基本的隔離。

| 網路模式 | 隔離程度 | 使用場景 | |:--------|:--------|:--------| | 預設(bridge) | 專案內互通,跨專案隔離 | 大部分情況 | | 外部網路(external) | 跨專案共用網路 | 需要與其他專案通訊 | | 無網路(none) | 完全隔離 | 離線批次任務 |

Volumes 的持久化

容器重啟後資料會消失——除非你用 Volume。Volume 掛載到容器的某個路徑,容器刪除了 Volume 還在。

services:
  db:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:  # 宣告 volume

下一章預告:VPS 部署

學會 Compose 之後,最後一章教你部署到 VPS——用 Docker Compose 在雲端伺服器上啟動完整應用。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!