Docker Compose 编排说明 🐳

📖 目录导航
✨ Docker Compose 特点与优势
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,具有以下特点:
- 🏗️ 简化部署:使用 YAML 文件定义多容器应用,一键部署
- 🔄 环境一致性:确保开发、测试和生产环境的一致性
- 📋 声明式配置:通过配置文件管理应用服务、网络和卷
- ⚡ 快速启动:一条命令即可启动整个应用栈
- 🔗 服务依赖:自动处理服务间的依赖关系和启动顺序
- 🌐 网络管理:自动创建容器网络,方便服务间通信
- 📦 版本控制:配置文件可纳入版本控制系统
- 🔧 灵活扩展:支持多环境配置和扩展字段
- 📊 资源管理:可限制容器使用的 CPU 和内存资源
🚀 一、快速创建 Docker Compose 文件
1 2 3 4 5 6 7 8 9 10
| mkdir -p /mnt/mydisk/home/toolbox && cd $_ && \ cat > /mnt/mydisk/home/toolbox/docker-compose.yml <<'EOF' services:
EOF
cd /mnt/mydisk/home/toolbox && docker-compose up -d
|
📝 二、Docker Compose 文件详细说明
基本结构示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| version: "3.8"
services: toolbox: container_name: toolbox image: cleverest/toolbox:latest restart: unless-stopped network_mode: bridge ports: - "8383:80" volumes: - /var/run/docker.sock:/var/run/docker.sock - ./app/data:/app/data - /mnt:/mnt environment: - TZ=Asia/Shanghai - PUID=1000 - PGID=1000 extra_hosts: - "api.telegram.org:149.154.167.220" - "api.tmdb.org:18.66.102.107" hostname: toolbox command: ["--debug"] depends_on: - database - redis
database: image: postgres:13 environment: - POSTGRES_DB=mydb - POSTGRES_USER=user - POSTGRES_PASSWORD=pass volumes: - db_data:/var/lib/postgresql/data
volumes: db_data:
|
⚙️ 三、配置项详解
1️⃣ Docker 重启策略
1 2 3 4
| restart: "no" restart: always restart: on-failure restart: unless-stopped
|
2️⃣ 端口映射
1 2 3 4 5 6
| ports: - "8383:80" - "8443:443" - "9000:9000/tcp" - "9000:9000/udp" - "49100-49200:3000-3100"
|
3️⃣ 卷映射
1 2 3 4 5 6 7 8 9 10 11 12 13
| volumes: - /host/path:/container/path - ./relative/path:/container/path - named_volume:/container/path - /container/path - /host/path:/container/path:ro
|
4️⃣ 环境变量
1 2 3 4 5 6 7 8 9 10 11 12
| environment: - TZ=Asia/Shanghai - PUID=1000 - PGID=1000 - DEBUG=true - MAX_CONNECTIONS=100
environment: TZ: Asia/Shanghai PUID: 1000 PGID: 1000
|
5️⃣ 网络模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| network_mode: bridge
network_mode: host
network_mode: service:service_name
networks: - frontend - backend
networks: frontend: driver: bridge backend: driver: bridge internal: true
|
6️⃣ 主机映射
1 2 3 4
| extra_hosts: - "api.telegram.org:149.154.167.220" - "api.tmdb.org:18.66.102.107" - "local.example.com:127.0.0.1"
|
7️⃣ 容器主机名
1 2
| hostname: my-container domainname: example.com
|
🛠️ 四、高级配置示例
资源限制
1 2 3 4 5 6 7 8
| deploy: resources: limits: memory: 2G cpus: '2.0' reservations: memory: 512M cpus: '1.0'
|
健康检查
1 2 3 4 5 6
| healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s
|
日志配置
1 2 3 4 5
| logging: driver: "json-file" options: max-size: "200k" max-file: "10"
|
💡 五、实用技巧与最佳实践
1. 使用环境变量文件
1 2 3 4 5 6 7 8 9 10 11
| env_file: - .env - .env.production
TZ=Asia/Shanghai PUID=1000 PGID=1000 DB_HOST=database DB_PORT=5432
|
2. 多环境配置
1 2 3 4 5 6 7 8 9
| version: "3.8" services: app: image: myapp:${TAG:-latest} ports: - "${HOST_PORT}:8080" environment: - DB_HOST=${DB_HOST}
|
1 2 3 4 5 6
|
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
|
3. 扩展配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| x-common-environment: &common-env TZ: Asia/Shanghai PUID: 1000 PGID: 1000
services: app1: environment: <<: *common-env SPECIFIC_VAR: value1 app2: environment: <<: *common-env SPECIFIC_VAR: value2
|
🚦 六、常用命令
启动服务
1 2 3 4 5 6 7 8
| docker-compose up -d
docker-compose up -d service_name
docker-compose up -d --force-recreate
|
停止服务
1 2 3 4 5 6 7 8
| docker-compose down
docker-compose down --volumes
docker-compose down --rmi all --volumes --remove-orphans
|
查看状态
1 2 3 4 5 6 7 8 9 10
| docker-compose ps
docker-compose logs docker-compose logs -f docker-compose logs service_name
docker-compose top
|
管理服务
1 2 3 4 5 6 7 8
| docker-compose restart
docker-compose up -d --scale service_name=3
docker-compose exec service_name command
|
🎯 七、故障排除与调试
1. 验证配置文件
2. 查看详细日志
1 2 3 4 5
| docker-compose logs --tail=100 -f
docker-compose exec service_name sh
|
3. 清理资源
1 2 3 4 5 6 7 8
| docker-compose down --remove-orphans
docker container prune
docker image prune
|
📚 总结
Docker Compose 是一个强大的工具,可以大大简化多容器应用的管理和部署。通过合理的配置和最佳实践,你可以轻松管理复杂的应用环境。
关键要点:
- ✅ 使用声明式 YAML 文件定义服务
- ✅ 合理配置网络、卷和环境变量
- ✅ 利用多环境配置提高灵活性
- ✅ 实施资源限制确保系统稳定性
- ✅ 定期清理未使用的资源
快乐编排! 🚀✨
💡 提示:始终将你的 docker-compose.yml 文件纳入版本控制系统,以便跟踪更改和协作开发。定期更新 Docker 镜像以确保安全性和性能。