好的,阿杰 👍,下面给你整理一份 “手把手用 Docker 部署 Python 应用”详细教程,兼顾开发与生产环境,完整流程讲解。
🧩 一、前置条件
1️⃣ 操作系统
- Ubuntu / macOS / Windows(Windows 推荐 Docker Desktop + WSL2)
2️⃣ 软件要求
- Docker Engine ≥ 20.10
- Docker Compose 插件
验证安装:
docker -v
docker compose version
🏗️ 二、准备 Python 应用
示例项目结构:
my-python-app/
├── app.py
├── requirements.txt
└── src/
app.py
示例:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello 阿杰, Python Docker 已就绪!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
requirements.txt
示例:
Flask==2.3.3
🐳 三、编写 Dockerfile
在项目根目录创建 Dockerfile
:
# 使用官方 Python 镜像
FROM python:3.12-slim
# 设置工作目录
WORKDIR /usr/src/app
# 复制依赖文件并安装
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
说明:
python:3.12-slim
镜像轻量化--no-cache-dir
避免 pip 缓存浪费空间
🏗️ 四、构建与运行镜像
1️⃣ 构建镜像
docker build -t my-python-app:latest .
2️⃣ 运行容器
docker run -d -p 5000:5000 --name python-container my-python-app:latest
访问:
http://localhost:5000
3️⃣ 查看日志
docker logs -f python-container
🗂️ 五、挂载本地代码(开发模式)
docker run -it -p 5000:5000 \
-v $(pwd):/usr/src/app \
-w /usr/src/app \
python:3.12-slim bash
容器内安装依赖并启动:
pip install -r requirements.txt
pip install flask --upgrade
python app.py
这样修改代码可以立即生效,无需重新构建镜像。
🧰 六、使用 Docker Compose 管理
创建 docker-compose.yml
:
version: '3.8'
services:
python-app:
build: .
container_name: python-app
ports:
- "5000:5000"
volumes:
- ./src:/usr/src/app/src
- ./requirements.txt:/usr/src/app/requirements.txt
environment:
- FLASK_ENV=development
启动:
docker compose up -d
停止:
docker compose down
⚡ 七、多环境部署建议
1️⃣ 环境变量管理
- 开发环境
.env.dev
- 生产环境
.env.prod
docker-compose.yml
引用:
env_file:
- .env.prod
2️⃣ 生产优化
- 使用 多阶段构建,减少镜像体积
- 配置 uWSGI / Gunicorn + Nginx 做反向代理
多阶段构建示例:
# Stage 1: build
FROM python:3.12-slim as build
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --user -r requirements.txt
COPY . .
# Stage 2: runtime
FROM python:3.12-slim
WORKDIR /usr/src/app
COPY --from=build /usr/src/app .
EXPOSE 5000
CMD ["python", "app.py"]
🧹 八、常用 Docker 命令
功能 | 命令 |
---|---|
查看运行容器 | docker ps |
停止容器 | docker stop python-app |
删除容器 | docker rm python-app |
查看镜像 | docker images |
删除镜像 | docker rmi my-python-app |
查看日志 | docker logs -f python-app |
进入容器 | docker exec -it python-app bash |
🌐 九、部署生产环境优化
1️⃣ Nginx 反向代理
- 将 80/443 端口映射到 Python 容器
- 提供 HTTPS 支持
2️⃣ 使用 Gunicorn
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app
-w 4
:使用 4 个 worker
3️⃣ 自动重启容器
restart: always
4️⃣ 持久化卷
- 保存日志或上传文件,防止容器删除丢失数据
✅ 十、Python Docker 部署流程总结
- 准备 Python 应用代码
- 编写 Dockerfile 构建镜像
- 启动容器并映射端口
- 开发模式挂载本地卷实现热更新
- 使用 Docker Compose 管理多容器
- 配置生产环境变量、反向代理与多进程
- 优化镜像、持久化数据与自动重启
发表回复