Docker Compose 生产可用性检查清单:从开发环境到上线的 12 个要点

核心配置检查

  1. 版本与语法version 对齐当前 Compose/Engine 版本,避免弃用字段。
  2. 网络隔离:自定义 networks,不同环境/服务分网,减少横向风险。
  3. 卷与权限:最小化挂载,区分只读/读写;避免将 /var/run/docker.sock 暴露给无关容器。
  4. 资源限制:为关键服务设定 deploy.resources.limits(CPU/内存),防止互相抢占。
  5. 健康检查healthcheck + restart 策略,失败时自动重启或退出。
  6. 环境变量与密钥:使用 .envsecrets,避免把密钥写进镜像和 Git。
  7. 日志策略logging.driver(如 json-file/loki),控制 max-size/max-file,避免磁盘爆满。
  8. 依赖顺序depends_on + 健康检查而不是仅启动顺序,确保上游可用。
  9. 时区与时钟:对有审计/过期逻辑的服务统一时区或使用 UTC。
  10. 端口暴露:仅暴露必要端口;内部流量走 overlay/bridge。
  11. 持久化与备份:标记关键数据卷,建立定时备份(DB/对象存储)。
  12. CI/CD 集成:Build cache、镜像签名、漏洞扫描(Trivy/Grype),上线前阻断高危风险。

示例片段(精简)

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
39
40
41
42
43
44
services:
app:
image: myapp:latest
deploy:
resources:
limits:
cpus: "1.0"
memory: 1g
environment:
- APP_ENV=prod
secrets:
- db_password
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 5s
retries: 3
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"

db:
image: postgres:16
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db_password
volumes:
- dbdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5

secrets:
db_password:
file: ./secrets/db_password

volumes:
dbdata:

运维与监控

  • 监控/日志:采集容器 metrics(cAdvisor/Node Exporter)+ 日志(Loki/EFK);关键指标建告警。
  • 镜像治理:定期清理 dangling 镜像/无用卷;扫描 CVE。
  • 蓝绿/滚动:在 CI/CD 中用标签控制滚动发布,支持回滚。
  • 故障演练:模拟容器故障/网络隔离,验证自动恢复与告警链路。

结论

Compose 可以跑生产,但需要资源限制、健康检查、日志/监控、密钥、备份等一整套约束与配套。按上面 12 条检查并持续演练,你的 Compose 栈会更稳、更可观测。***