跳轉至

Docker Compose

概述

docker Compose 係一個用於定義同執行多容器 docker 應用程式嘅工具。透過使用 YAML 檔案(通常命名為 docker-compose.yml),用戶可以喺單一、受版本控制嘅檔案入面配置應用程式服務、網絡同資料卷。呢種方法簡化咗複雜堆疊嘅編排,令到佢成為現代 gitops 同自架(self-hosting)工作流程嘅重要組成部分。

核心概念

  • 服務:堆疊入面嘅每個容器都充當一個服務。你可以在呢度定義映像、環境變數、依賴關係同網絡連線。
  • 網絡:Compose 會自動為你嘅服務建立一個默認網絡,令到佢哋可以通過服務名稱安全地互相通訊。
  • 資料卷:持久化儲存映射,確保數據喺容器重啟或更新之後仍然存在。

安全性與 secrets-management

喺生產環境中,將密碼或 API 金鑰等敏感資料直接硬編碼入 docker-compose.yml 係一個重大安全風險。對於喺 oracle-cloud 或其他 VPS 供應商等平台上管理基建嘅用戶,建議用專門嘅機密管理工具取代純文字 .env 檔案。

infisical 等工具提供咗一個更優越嘅替代方案,容許用戶喺執行時直接將機密注入容器。呢個做法,配合 git 版本控制,可以防止憑證暴露喺公開或私人儲存庫入面。

生產整合

對於透過 Dockhand 或自動化管道(例如 github-actions)部署堆疊嘅用戶,docker Compose 係基礎設施即程式碼(IaC)嘅基礎。為咗維持安全環境,確保所有服務透過隔離嘅內部網絡(例如使用 cloudflare-tunnel 時嘅 cf_network)通訊,並避免將服務連接埠直接映射到主機,除非絕對必要。

標準 YAML 結構範例

version: '3.8'

services:
  web-app:
    image: example/image:latest
    container_name: web_app
    restart: always
    volumes:
      - /home/opc/data:/data
    networks:
      - cf_network

networks:
  cf_network:
    external: true

最佳實踐

  • 容器隔離:將所有相關服務放置喺同一個自訂網絡入面,並依賴 cloudflare-tunnel 或反向代理進行外部路由。
  • 資源管理:使用 deploy.resources 限制 CPU 同記憶體使用量,確保喺 Oracle Ampere A1 (ARM64) 等實例上穩定執行。
  • 自動化:利用 n8nCodex CLI 等工具自動管理、監控同排查你嘅 compose 堆疊。
  • 持久化:始終將持久化數據映射到主機目錄,以確保喺容器更新或主機重新啟動期間數據完整性。

來源

另見