好的,阿杰 👍,下面给你整理一份 “手把手用 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 部署流程总结

  1. 准备 Python 应用代码
  2. 编写 Dockerfile 构建镜像
  3. 启动容器并映射端口
  4. 开发模式挂载本地卷实现热更新
  5. 使用 Docker Compose 管理多容器
  6. 配置生产环境变量、反向代理与多进程
  7. 优化镜像、持久化数据与自动重启