一、Docker Compose 簡介
Docker Compose 是 Docker 官方提供的多容器編排工具,通過 YAML 文件(docker-compose.yml
)定義應用程序的服務、網絡和卷,實現一鍵式容器管理。其核心優勢包括:
- 簡化多容器管理:通過單一文件管理多個關聯容器。
- 開發環境標準化:團隊共享相同的環境配置。
- 快速環境搭建:一條命令啟動復雜應用棧。
- 服務依賴管理:自動處理服務間的依賴關系。
- 配置即代碼:版本控制環境配置。
二、安裝 Docker Compose
-
前置條件:
- 已安裝 Docker Engine(版本需與 Compose 兼容)。
- Linux 系統建議配置鏡像加速器(如阿里云、清華源)。
-
安裝步驟:
- Linux/macOS:
# 下載最新版二進制文件(替換版本號) sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 添加執行權限 sudo chmod +x /usr/local/bin/docker-compose # 驗證安裝 docker-compose --version
- Windows:通過 Docker Desktop 內置安裝(需啟用 WSL2 或 Hyper-V)。
- Linux/macOS:
三、核心概念與文件結構
-
docker-compose.yml
文件結構:version: '3.8' # 指定 Compose 版本 services: # 容器服務定義web: # 服務名稱image: nginx:latest # 使用官方鏡像ports:- "80:80" # 端口映射(宿主機:容器)volumes:- ./html:/usr/share/nginx/html # 掛載數據卷depends_on:- db # 依賴其他服務networks:- custom_network # 使用自定義網絡db:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: 123456 # 環境變量networks:- custom_network networks:custom_network:driver: bridge # 使用 bridge 網絡驅動ipam:config:- subnet: 172.16.238.0/24 # 指定子網范圍
-
核心配置字段:
- 服務字段(services):定義容器配置,如鏡像、端口、卷等。
- 網絡與存儲配置(networks/volumes):管理容器間的網絡和數據持久化。
四、環境變量管理
-
.env
文件:- 集中管理環境變量,使配置與代碼分離。
- 文件格式為鍵值對(每行一個變量,不支持多行值):
# .env 文件示例 DB_PASSWORD=mysecret WEB_PORT=8080 ENVIRONMENT=dev
-
在
docker-compose.yml
中引用變量:- 使用
${變量名}
或${變量名:-默認值}
(若變量未定義,使用默認值)。 - 示例:
version: "3.8" services:db:image: mysql:${MYSQL_VERSION:-5.7}environment:MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}web:image: nginxports:- "${WEB_PORT}:80"
- 使用
-
多環境配置切換:
- 開發環境(
.env.dev
):ENVIRONMENT=dev WEB_PORT=8080
- 生產環境(
.env.prod
):ENVIRONMENT=prod WEB_PORT=80
- 啟動時指定環境文件:
docker-compose --env-file .env.prod up
- 開發環境(
五、常用命令實戰
-
基礎命令:
- 啟動所有服務(后臺模式):
docker-compose up -d
- 查看運行狀態:
docker-compose ps
- 停止服務:
docker-compose stop
- 停止并刪除容器:
docker-compose down
- 重建服務:
docker-compose up -d --build
- 啟動所有服務(后臺模式):
-
調試命令:
- 查看服務日志:
docker-compose logs -f web
- 執行一次性命令:
docker-compose run --rm web python manage.py migrate
- 進入運行中容器:
docker-compose exec db psql -U postgres
- 查看服務日志:
-
擴展操作:
- 水平擴展服務實例:
docker-compose up -d --scale web=3
- 查看服務資源使用:
docker-compose top
- 驗證配置文件:
docker-compose config
- 水平擴展服務實例:
六、進階技巧與最佳實踐
-
YAML 語法規范:
- 使用空格縮進(禁止 Tab),鍵值對冒號后加空格。
- 數字/特殊字符環境變量需用引號包裹(如
"8080:80"
)。
-
性能優化:
- 使用
restart: unless-stopped
實現容器自動重啟。 - 通過
deploy/resource/limits
限制 CPU/內存。
- 使用
-
多環境配置:
- 使用
.env
文件管理環境變量。 - 分環境編寫多個 Compose 文件(如
docker-compose.prod.yml
)。
- 使用
-
多機管理部署:
- Docker Swarm:使用
docker swarm
進行多機部署。 - Kubernetes:結合
Kompose
工具將 Compose 文件轉換為 Kubernetes 配置。
- Docker Swarm:使用