前言
Docker 已成为应用交付的标准方式。本文从镜像构建、编排、监控三个层面分享最佳实践。
一、Dockerfile 最佳实践
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
关键点:1. 用 slim 镜像减小体积 2. 先复制 requirements 再复制代码,利用缓存 3. 不用 root 运行
二、多阶段构建
构建阶段用完整镜像编译,运行阶段用 alpine 镜像。最终镜像可减小到 100MB 以内。
三、docker-compose 编排
version: "3.9"
services:
web:
build: .
ports: ["8000:8000"]
depends_on: [db, redis]
env_file: .env
db:
image: mysql:8
volumes: ["db_data:/var/lib/mysql"]
redis:
image: redis:7-alpine
volumes:
db_data:
四、健康检查
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8000/health || exit 1
五、监控方案
1. cAdvisor - 容器资源监控
2. Prometheus + Grafana - 指标可视化
3. Loki - 日志聚合
六、常见坑
1. 镜像体积过大 → 多阶段构建
2. 容器内时区不对 → 设置 TZ 环境变量
3. 数据丢失 → 数据卷正确挂载
总结
Docker 让部署标准化、可重现。掌握镜像优化和编排是生产环境的核心能力。