将Python项目打包成Docker镜像的全过程

 更新时间:2025年08月04日 10:35:19   作者:工程师丶佛爷  
在日常开发中,我们经常需要部署Python应用到服务器、测试环境或交付他人使用,Docker作为容器化技术的代表,能够打包整个项目及其依赖,保证“在哪跑都一样”,这篇文章将从零开始,记录我如何将一个 Python项目打包为Docker镜像的全过程,需要的朋友可以参考下

一、前言

在日常开发中,我们经常需要部署 Python 应用到服务器、测试环境或交付他人使用。传统方式依赖本地环境配置,一旦换机器或多人协作,很容易出现“本地运行没问题、远程报错一堆”的情况。为了解决这种“环境地狱”问题,Docker 作为容器化技术的代表,能够打包整个项目及其依赖,保证“在哪跑都一样”。这篇文章将从零开始,记录我如何将一个 Python 项目打包为 Docker 镜像的全过程,适合有基本 Python 基础但对 Docker 不熟悉的开发者参考。

二、项目简介与结构

三、创建requirements.txt

pip freeze > requirements.txt

使用上面命令可能会打包很不需要的包,简洁一点打包方式

pip install pipreqs
pipreqs . --encoding=utf8 --use-local

四、编写 Dockerfile 

# 使用官方 Python 基础镜像
FROM python:3.10-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install -r requirements.txt

# 安装依赖(官方源速度较慢,使用阿里源)
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

# 复制项目代码
COPY . .

# 启动程序
CMD ["python", "app.py"]

当前我的项目的Dockerfile是这样的

# 使用官方的 Python 3.9 slim 镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 将当前目录的内容复制到容器中
COPY asr_http_server.py /app/
COPY trans_utils.py /app/
COPY requirements.txt /app/

# 更新包管理器并安装必要的系统依赖
RUN apt-get update && apt-get install -y \
    ffmpeg \
    libsndfile1 \
    build-essential \
    curl \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/


# 暴露 Flask 服务的端口
EXPOSE 7869

# 设置启动命令
CMD ["python", "asr_http_server.py"]

五、构建 Docker 镜像

docker build -t my-python-app .

构建过程截图

六、运行容器并访问服务

docker run -d -p 5000:5000 my-python-app

若 app.py 使用 Flask,可在 127.0.0.1:5000 访问服务。

七、遇到的问题与解决

这里记录在构建过程中遇到的坑,比如:

  • pip 安装失败(网络问题 / 缺少 build 工具)
  • 镜像太大(优化建议:alpine / 多阶段构建)
  • 时区问题
  • 文件没复制进去 / 编码问题

八、总结

本文从零开始,介绍了如何将 Python 项目打包成 Docker 镜像,并记录了构建过程中的关键步骤与注意事项。希望能帮助你快速掌握 Python 项目的容器化部署思路。

以上就是将Python项目打包成Docker镜像的全过程的详细内容,更多关于Python项目打包Docker镜像的资料请关注脚本之家其它相关文章!

相关文章

  • conda虚拟环境默认路径的修改方法

    conda虚拟环境默认路径的修改方法

    最近发现我linux系统中的/dev/root目录利用率占用了100%,这对后面文件的操作带来了一些麻烦,下面这篇文章主要给大家介绍了关于conda虚拟环境默认路径的修改方法,需要的朋友可以参考下
    2022-07-07
  • 关于Pytorch的MLP模块实现方式

    关于Pytorch的MLP模块实现方式

    今天小编就为大家分享一篇关于Pytorch的MLP模块实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python confluent kafka客户端配置kerberos认证流程详解

    Python confluent kafka客户端配置kerberos认证流程详解

    这篇文章主要介绍了Python confluent kafka客户端配置kerberos认证流程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 详解Golang 与python中的字符串反转

    详解Golang 与python中的字符串反转

    这篇文章主要介绍了详解Golang 与python中的字符串反转的相关资料,这里提供了实现的实例以便大家学习理解,需要的朋友可以参考下
    2017-07-07
  • Pandas库之DataFrame使用的学习笔记

    Pandas库之DataFrame使用的学习笔记

    这篇文章主要介绍了Pandas库之DataFrame使用的学习笔记,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • python opencv实现图像边缘检测

    python opencv实现图像边缘检测

    这篇文章主要为大家详细介绍了python opencv实现图像边缘检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • python得到qq句柄,并显示在前台的方法

    python得到qq句柄,并显示在前台的方法

    今天小编就为大家分享一篇python得到qq句柄,并显示在前台的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 通过python将大量文件按修改时间分类的方法

    通过python将大量文件按修改时间分类的方法

    今天小编就为大家分享一篇通过python将大量文件按修改时间分类的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Django中URL视图函数的一些高级概念介绍

    Django中URL视图函数的一些高级概念介绍

    这篇文章主要介绍了Django中URL视图函数的一些高级概念,Django是Python重多人气框架中最为著名的一个,需要的朋友可以参考下
    2015-07-07
  • python用socket传输图片的项目实践

    python用socket传输图片的项目实践

    使用python在网络上传送图片数据,需要以byte格式读取图片,这样才可以通过socket传输,本文就来介绍了python用socket传输图片的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02

最新评论