作为冉冉博客的运维教程系列,今天分享 Docker Compose 的实战经验。容器化部署已成为现代开发的标准配置,掌握 Compose 能让你的部署流程事半功倍。
一、Docker Compose 基础回顾
Docker Compose 通过 YAML 文件定义多容器应用,一键启动完整开发环境:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- db
- redis
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: myapp
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
redis:
image: redis:7-alpine
command: redis-server --requirepass mypassword
volumes:
postgres_data:
二、开发环境 vs 生产环境配置
使用多文件覆盖策略区分环境:
# docker-compose.yml - 基础配置
services:
web:
build: .
# docker-compose.dev.yml - 开发环境
services:
web:
volumes:
- .:/app
- /app/node_modules
command: npm run dev
db:
ports:
- "5432:5432"
# docker-compose.prod.yml - 生产环境
services:
web:
restart: always
command: npm start
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
db:
restart: always
启动时选择环境:
# 开发环境
docker-compose up -d
# 生产环境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
三、健康检查与依赖管理
确保服务按正确顺序启动:
services:
web:
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
db:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
retries: 5
四、网络配置与服务发现
Compose 自动创建网络,容器间通过服务名通信:
services:
web:
networks:
- frontend
- backend
labels:
- "traefik.http.routers.web.rule=Host(api.example.com)"
api:
networks:
- backend
db:
networks:
- backend
volumes:
- db_data:/var/lib/postgresql/data
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true # 隔离网络,不访问外网
五、资源限制与性能优化
services:
web:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
db:
deploy:
resources:
limits:
cpus: '1.0'
memory: 2G
六、常用命令速查
docker-compose up -d– 后台启动所有服务docker-compose logs -f web– 查看 web 服务日志docker-compose exec db psql– 进入数据库容器docker-compose down -v– 停止并删除数据卷docker-compose restart web– 重启 web 服务docker-compose scale web=3– 扩容 web 服务
七、生产环境注意事项
- 使用 Docker Swarm 或 K8s 进行 orchestration
- 配置日志轮转,防止磁盘占满
- 设置资源限制,避免单容器耗尽主机资源
- 使用 healthcheck 确保服务可用性
- 敏感信息使用 Docker Secrets 或环境变量
- 定期备份数据卷
Docker Compose 是容器化部署的利器,掌握这些最佳实践能让你在开发和生产环境都游刃有余。更多运维干货,欢迎持续关注冉冉博客。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END














暂无评论内容