Docker Compose 的详细使用指南,涵盖安装、核心功能及多容器应用编排示例:
1. 安装 Docker Compose
bash
# Linux 系统
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version2. 核心命令
| 命令 | 作用 |
|---|---|
docker-compose up | 启动所有服务(后台运行加 -d) |
docker-compose down | 停止并删除所有容器、网络、卷 |
docker-compose build | 重新构建镜像 |
docker-compose logs | 查看容器日志(加服务名过滤) |
docker-compose ps | 查看运行中的容器状态 |
docker-compose exec | 进入容器(如 exec web bash) |
3. 编写 docker-compose.yml
基础示例(Web + Redis)
yaml
version: '3.8'
services:
web:
build: .. # 使用当前目录的 Dockerfile 构建镜像
ports:
- "5000:5000"
volumes:
- .:/code # 挂载代码目录
environment:
- FLASK_ENV=development
depends_on:
- redis
redis:
image: redis:alpine
volumes:
- redis_data:/data # 持久化数据卷
ports:
- "6379:6379"
volumes:
redis_data: # 声明数据卷4. 多服务实战(Flask + Celery + PostgreSQL)
yaml
version: '3.8'
services:
web:
build: .
command: flask run --host=0.0.0.0
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgresql://user:pass@db/mydb
depends_on:
- db
- redis
worker:
build: .
command: celery -A tasks worker --loglevel=info
environment:
- CELERY_BROKER_URL=redis://redis:6379/0
depends_on:
- redis
db:
image: postgres:13
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydb
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:alpine
volumes:
postgres_data:5. 配置详解
网络管理
yaml
services:
web:
networks:
- frontend
- backend
db:
networks:
- backend
networks:
frontend:
backend:健康检查
yaml
services:
web:
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:5000/health" ]
interval: 30s
timeout: 10s
retries: 36. 环境变量管理
使用 .env 文件
bash
# .env
DB_USER=admin
DB_PASS=secretdocker-compose.yml 中引用:
yaml
environment:
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASS}7. 常见问题解决
端口冲突:
- 检查
ports配置,或使用docker-compose down清理旧容器。
- 检查
服务启动顺序问题:
- 使用
depends_on+ 健康检查确保依赖服务就绪:yamldepends_on: db: condition: service_healthy
- 使用
构建缓存问题:
- 强制重新构建镜像:
docker-compose build --no-cache
- 强制重新构建镜像:
8. 高级技巧
扩展配置(多环境)
yaml
# docker-compose.prod.yml
services:
web:
environment:
- FLASK_ENV=production
ports:
- "80:5000"启动时合并配置:
bash
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up资源限制
yaml
services:
web:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M9. 实战场景
部署 Django 应用
yaml
services:
web:
image: my-django-app:latest
ports:
- "8000:8000"
depends_on:
- db
environment:
- DATABASE_URL=postgres://user:pass@db/dbname
db:
image: postgres:13
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: dbname
volumes:
pgdata:通过 Docker Compose,可快速定义和管理多容器应用,适用于开发、测试和生产环境的服务编排。结合 CI/CD 流程可实现自动化部署。