为什么选择 Docker Compose
在单体应用时代,一个 docker run 就能解决部署问题。但现代应用通常是多个服务的组合:Web 服务、数据库、缓存、消息队列...
Docker Compose 让你用一份 YAML 文件定义整个应用栈。
基础配置
一个典型的 Web 应用 Compose 配置:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/myapp
depends_on:
- db
- redis
db:
image: postgres:16-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=myapp
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
开发环境优化
开发环境和生产环境的需求不同。用 override 文件实现环境隔离:
# docker-compose.override.yml(仅开发环境生效)
services:
web:
volumes:
- .:/app # 热重载
- /app/node_modules
command: npm run dev
生产部署
生产环境建议:
- 使用 health check:确保服务真正就绪
- 资源限制:防止单个容器吃光资源
- 日志管理:集中收集和轮转
- 网络隔离:不同环境用不同网络
services:
web:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
restart_policy:
condition: on-failure
max_attempts: 3
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
retries: 3
总结
Docker Compose 是连接开发和运维的桥梁。掌握它,能让你的部署流程更标准化、更可重复。