1.基础Dockerfile
1 | FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9 |
- 使用官方预构建镜像,内置Gunicorn+Uvicorn组合
- 项目文件需放置在
/app目录,自动加载main.py中的app对象 - 默认暴露80端口,支持WebSocket和HTTP/2协议
- 流程图:
graph TD A[编写Dockerfile] --> B[构建镜像] B --> C[运行容器] C --> D[访问网站]
2.多阶段构建优化
1 | FROM python:3.9-slim as builder |
- 第一阶段安装依赖,第二阶段仅复制必要文件
- 镜像体积减少约60%(从1.2GB → 450MB)
- 使用
--user参数避免全局安装污染系统路径
3.生产环境配置
3.1 环境变量管理
1 | ENV MAX_WORKERS=8 |
- 通过环境变量动态调整worker数量
- 推荐参数配置:
参数 推荐值 说明 –workers (-w) CPU核心数×2 例如4核CPU设置8 workers –timeout 120秒 防止慢请求阻塞整个进程
3.2 健康检查
1 | HEALTHCHECK --interval=30s --timeout=3s \ |
- 每30秒检查/health端点,超时3秒视为失败
- 容器状态可通过
docker inspect --format='{{.State.Health.Status}}'查看
4.生产建议
- 安全加固:
- 使用非root用户运行容器
1
2RUN useradd -m appuser && chown -R appuser /app
USER appuser
- 使用非root用户运行容器
- 日志管理:
- 挂载日志卷避免容器重启丢失数据
1
docker run -v ./logs:/var/log/gunicorn fastapi-app
- 挂载日志卷避免容器重启丢失数据
- 资源限制:
1
docker run --memory=512m --cpus=2 fastapi-app
- 镜像更新:
- 使用语义化版本标签(如
fastapi-app:v1.2.3) - 定期扫描镜像漏洞(Trivy/Clair)
- 使用语义化版本标签(如
测试命令示例:
1
2
3
4
5
6
7
8 # 构建镜像
docker build -t fastapi-app .
# 运行容器
docker run -d -p 8000:80 --name myapp fastapi-app
# 查看日志
docker logs -f myapp