Docker Compose 實(shí)戰(zhàn)指南:從入門到精通 🚀
一、Docker Compose 核心概念 🧠
Docker Compose 是 Docker 官方推出的容器編排工具,通過 YAML 文件定義多容器應(yīng)用。其核心優(yōu)勢在于:
- 單文件配置:用聲明式語法描述整個(gè)應(yīng)用棧
- 環(huán)境一致性:確保開發(fā)、測試、生產(chǎn)環(huán)境一致
- 高效管理:一條命令啟動(dòng)/停止所有服務(wù)
二、安裝與準(zhǔn)備 🔧
1. 安裝 Docker Engine
# Ubuntu 示例 sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io
2. 安裝 Docker Compose
# 下載最新穩(wěn)定版 sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 賦予執(zhí)行權(quán)限 sudo chmod +x /usr/local/bin/docker-compose # 驗(yàn)證安裝 docker-compose --version
三、編寫 Compose 文件 📝
1. 基礎(chǔ)結(jié)構(gòu)示例
創(chuàng)建 docker-compose.yml
文件:
version: '3.8' services: web: image: nginx:alpine ports: - "80:80" volumes: - ./html:/usr/share/nginx/html depends_on: - db db: image: postgres:13 environment: POSTGRES_PASSWORD: example volumes: - pg_data:/var/lib/postgresql/data volumes: pg_data:
2. 核心配置解析
配置項(xiàng) | 說明 | 常用值 |
---|---|---|
version | Compose 文件格式版本 | 3.8+ |
services | 定義容器服務(wù) | 每個(gè)服務(wù)對應(yīng)一個(gè)容器 |
volumes | 持久化數(shù)據(jù)卷 | 命名卷或主機(jī)路徑 |
networks | 自定義網(wǎng)絡(luò) | bridge, overlay |
四、常用操作命令 ⚡
1. 基礎(chǔ)命令
# 啟動(dòng)所有服務(wù)(后臺(tái)模式) docker-compose up -d # 停止并移除容器 docker-compose down # 查看運(yùn)行狀態(tài) docker-compose ps # 查看服務(wù)日志 docker-compose logs -f web
2. 進(jìn)階操作
# 單服務(wù)操作 docker-compose start web docker-compose stop db # 重建服務(wù) docker-compose up -d --build web # 執(zhí)行容器內(nèi)命令 docker-compose exec db psql -U postgres
五、高級配置技巧 🛠️
1. 多環(huán)境配置
# docker-compose.prod.yml services: web: environment: NODE_ENV: production deploy: resources: limits: cpus: '0.5' memory: 512M
2. 健康檢查
healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 30s timeout: 10s retries: 3
3. 依賴等待策略
# 使用 wait-for-it 腳本 command: ["./wait-for-it.sh", "db:5432", "--", "npm", "start"]
六、實(shí)戰(zhàn)案例 🌟
1. WordPress + MySQL 完整棧
version: '3.8' services: db: image: mysql:8.0 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: image: wordpress:latest ports: - "8000:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress depends_on: - db volumes: db_data:
2. 微服務(wù)架構(gòu)示例
version: '3.8' services: frontend: build: ./frontend ports: - "3000:3000" networks: - app-network api: build: ./api environment: DB_URL: "postgres://user:pass@db:5432/app" networks: - app-network depends_on: - db db: image: postgres:13 volumes: - pg_data:/var/lib/postgresql/data networks: - app-network networks: app-network: driver: bridge volumes: pg_data:
七、最佳實(shí)踐 💡
- 版本控制:
- 將
docker-compose.yml
納入版本控制 - 使用
.env
文件管理敏感變量
- 將
- 資源優(yōu)化:
deploy: resources: limits: cpus: '0.5' memory: 256M
- 安全建議:
- 避免使用 root 用戶運(yùn)行容器
- 定期更新基礎(chǔ)鏡像
- 調(diào)試技巧:
# 驗(yàn)證配置文件 docker-compose config # 查看服務(wù)依賴圖 docker-compose images
通過掌握這些 Docker Compose 技巧,您可以高效管理多容器應(yīng)用,實(shí)現(xiàn)開發(fā)到生產(chǎn)的無縫過渡。 🎯