系列:容器部署基础
- Docker 安装与使用教程:从零部署第一个容器服务
- Dockerfile 入门:构建自己的应用镜像
- Docker Compose 使用指南:管理多容器服务
- Docker 数据卷与备份:数据库容器怎么保护数据
- Docker 网络与端口映射:容器之间怎么通信
- Docker 日志和排障:logs、exec、inspect、stats
- 用 Docker 部署一个 Python Web 项目
- Nginx 反向代理入门:静态文件、HTTPS 和 Web 服务转发
- HTTPS 和证书部署指南:Let’s Encrypt、Cloudflare、Nginx 怎么配
- Docker 生产环境部署注意事项:镜像、日志、数据卷和健康检查
前面几篇讲了 Dockerfile、Compose、数据卷和网络。这篇把它们串起来:部署一个 Python Web 项目。
Dockerfile
FROM python:3.12-slim
WORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .
CMD ["gunicorn", "wsgi:app", "--bind", "0.0.0.0:8000", "--workers", "3"]FastAPI 项目把 CMD 换成 Uvicorn:
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]Compose
Compose 这里先只放应用容器,把端口绑定到本机回环地址。这样外部流量必须先经过 Nginx,后面加 HTTPS、限流、静态资源缓存都更自然。
services: web: build: . ports: - "127.0.0.1:8000:8000" env_file: - .env restart: unless-stopped启动:
docker compose up -d --builddocker compose logs -f第一次部署一定要看日志,确认应用已经正常监听端口,再去配置 Nginx。
Nginx
location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme;}更完整的非容器部署背景可以看 Python Web 项目部署指南:Gunicorn、Uvicorn、Nginx 和 Docker。
常见问题
应用要监听 0.0.0.0,不是 127.0.0.1。环境变量放 .env,不要写进镜像。数据库数据单独用 volume,并按 Docker 数据卷与备份:数据库容器怎么保护数据 做备份。
总结
单机 Docker 部署的核心是:镜像负责运行环境,Compose 负责进程编排,Nginx 负责入口和 HTTPS。先把这个流程跑稳,再考虑更复杂的平台。