Docker部署Python应用完整指南

本文将通过一个 ‌Flask Web应用‌ 的实例,详细讲解如何使用Docker实现Python应用的 ‌容器化部署‌,涵盖环境配置、镜像优化、多阶段构建等实用技巧。


一、环境准备
  1. 安装Docker

    • Windows/Mac 下载Docker Desktop
    • Linux:
       

      bashCopy Code

      curl -fsSL https://get.docker.com | bash -s docker sudo systemctl enable --now docker

  2. 验证安装

     

    bashCopy Code

    docker --version # 输出版本信息如 Docker 24.0.7 docker run hello-world # 运行测试容器


二、创建Python应用
  1. 项目结构

     

    textCopy Code

    myapp/ ├── app.py ├── requirements.txt └── Dockerfile

  2. 示例代码 (app.py)

     

    pythonCopy Code

    from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello, Dockerized Python App!" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)

  3. 依赖文件 (requirements.txt)

     

    textCopy Code

    flask==3.0.2 gunicorn==21.2.0


三、编写Dockerfile
 

dockerfileCopy Code

# 第一阶段:构建环境 FROM python:3.11-slim as builder WORKDIR /app COPY requirements.txt . RUN pip install --user --no-cache-dir -r requirements.txt # 第二阶段:生产环境 FROM python:3.11-slim WORKDIR /app # 从builder阶段复制已安装的包 COPY --from=builder /root/.local /root/.local COPY . . # 确保脚本可执行并设置PATH ENV PATH=/root/.local/bin:$PATH # 暴露端口 & 启动命令 EXPOSE 5000 CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]

关键参数解析‌:

  • --user: 避免全局安装,减少权限问题
  • --no-cache-dir: 禁用缓存,减小镜像体积
  • 多阶段构建‌:分离构建与运行环境,最终镜像仅保留必要文件

四、构建与运行
  1. 构建镜像

     

    bashCopy Code

    docker build -t my-python-app:1.0 .

  2. 运行容器

     

    bashCopy Code

    docker run -d -p 5000:5000 --name myapp my-python-app:1.0

  3. 访问应用
    浏览器打开 http://localhost:5000,显示 "Hello, Dockerized Python App!"


五、高级配置技巧
  1. 使用.dockerignore

     

    textCopy Code

    __pycache__ *.pyc .git .env

  2. 设置中国时区

     

    dockerfileCopy Code

    RUN apt-get update && apt-get install -y tzdata ENV TZ=Asia/Shanghai

  3. 多服务编排 (docker-compose.yml)

     

    yamlCopy Code

    version: '3.8' services: web: build: . ports: - "5000:5000" environment: - FLASK_ENV=production redis: image: redis:alpine volumes: - redis_data:/data volumes: redis_data:


六、常见问题排查
问题现象解决方案
ModuleNotFoundError检查requirements.txt是否包含所有依赖
端口冲突修改主机端口 -p 8080:5000
容器立即退出添加-it参数查看实时日志
镜像体积过大使用Alpine基础镜像或多阶段构建

七、性能优化建议
  1. 选择更小的基础镜像

     

    dockerfileCopy Code

    FROM python:3.11-alpine # 镜像体积仅约120MB

  2. 合并RUN指令

     

    dockerfileCopy Code

    RUN apt-get update \ && apt-get install -y --no-install-recommends gcc python3-dev \ && pip install -r requirements.txt \ && apt-get purge -y gcc python3-dev \ && rm -rf /var/lib/apt/lists/*

  3. 使用Gunicorn配置

     

    bashCopy Code

    # 启动4个工作进程,监听5000端口 CMD ["gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "app:app"]


八、监控与管理
  1. 查看运行中的容器

     

    bashCopy Code

    docker ps

  2. 查看容器日志

     

    bashCopy Code

    docker logs -f myapp

  3. 进入容器调试

     

    bashCopy Code

    docker exec -it myapp /bin/bash


通过以上步骤,您已掌握 ‌Docker部署Python应用的核心流程‌。建议结合自身项目需求调整配置,并持续关注镜像安全与性能优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guzhoumingyue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值