Skip to content
返回部署

Docker Compose 多服务

用 docker-compose.yml 定义运行多容器应用,用于开发和小型生产。

容器进阶

为什么

Docker Compose 一 YAML 文件定义多服务应用(web + db + cache + worker)。一命令带起整个栈含网络和 volume。

Docker is used by 59% of professional developers per the Stack Overflow 2024 survey,Kubernetes 在生产中运行 60% 的容器化工作负载(CNCF 2024 调查)。容器编排通过声明式滚动发布将部署相关事故减少 35%。

何时使用

本地开发、CI 和小型生产用 Compose。大规模生产避免 — 用 K8s/Swarm。

如何做

1. 编写 — docker-compose.yml 配 services、networks、volumes 2. 启动 — docker compose up -d(后台) 3. 停止 — docker compose down -v(删 volume) 4. 日志 — docker compose logs -f service 5. 执行 — docker compose exec service sh 6. 构建 — docker compose build 7. 覆盖 — docker-compose.override.yml 开发

示例

# docker-compose.yml services: web: build: . ports: ["3000:3000"] environment: DATABASE_URL: postgres://user:pass@db:5432/app depends_on: [db, redis] db: image: postgres:16 volumes: [pgdata:/var/lib/postgresql/data] environment: { POSTGRES_PASSWORD: pass } redis: { image: redis:7 } worker: build: . command: npm run worker depends_on: [redis] volumes: { pgdata: } # 命令 docker compose up -d # 启动全部 docker compose logs -f web # 跟踪 web 日志 docker compose exec db psql -U user app # db 中 psql

常见问题

  • ⚠服务无法互解 — 须同网络,Compose 创建默认网络
  • ⚠down 丢数据 — volume 未持久化,用命名 volume 非绑定挂载
  • ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致

最佳实践

  • ✓数据用命名 volume — compose down/up 持久
  • ✓depends_on 配 healthcheck — 等 DB 就绪再启应用
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答