【Python】 如何用 Docker 打包一个 Python 脚本


这是我父亲 日记里的文字

这是他的生命 留下留下来的散文诗

几十年后 我看着泪流不止

可我的父亲已经 老得像一个影子

🎵 许飞《父亲写的散文诗》


如何用 Docker 打包一个 Python 脚本

Docker 是一个开源的容器化平台,允许开发者将应用程序及其所有依赖项打包成一个标准化的单元,以便在任何环境中一致地运行。在这篇博客中,我们将演示如何使用 Docker 来打包一个简单的 Python 脚本,使其可以在任何支持 Docker 的环境中运行。

步骤 1:准备 Python 脚本

首先,我们需要一个简单的 Python 脚本。为了演示,我们创建一个名为 app.py 的脚本,内容如下:

python 复制代码
# app.py
import requests

def fetch_github():
    response = requests.get("https://api.github.com")
    if response.status_code == 200:
        print("GitHub API is reachable.")
    else:
        print("Failed to reach GitHub API.")

if __name__ == "__main__":
    fetch_github()

这个脚本使用 requests 库来请求 GitHub API,并打印出相应的消息。

步骤 2:创建 requirements.txt

接下来,我们需要创建一个 requirements.txt 文件,列出我们的 Python 脚本所需的依赖项。在当前目录下创建 requirements.txt 文件,内容如下:

复制代码
requests
步骤 3:编写 Dockerfile

Dockerfile 是 Docker 用来构建镜像的指令文件。在项目的根目录下创建一个名为 Dockerfile 的文件,内容如下:

Dockerfile 复制代码
# 使用官方 Python 基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录的内容到容器中的 /app 目录
COPY . /app

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 运行 Python 脚本
CMD ["python", "app.py"]

这份 Dockerfile 文件包含以下几个部分:

  • FROM 指令指定了基础镜像,这里使用的是轻量级的 python:3.9-slim。
  • WORKDIR 指令设置了容器中的工作目录。
  • COPY 指令将当前目录的所有内容复制到容器中的 /app 目录。
  • RUN 指令运行 pip install 命令来安装依赖项。
  • CMD 指令指定了容器启动时执行的命令,这里是运行 app.py 脚本。
步骤 4:构建 Docker 镜像

在项目根目录下打开终端,运行以下命令构建 Docker 镜像:

bash 复制代码
docker build -t python-app .

这将使用当前目录中的 Dockerfile 构建一个名为 python-app 的镜像。

步骤 5:运行 Docker 容器

构建完成后,可以使用以下命令运行 Docker 容器:

bash 复制代码
docker run --rm python-app
  • --rm 标志表示容器在退出时会自动删除。

运行上述命令后,你应该会看到类似如下的输出:

csharp 复制代码
GitHub API is reachable.

这表示我们的 Python 脚本已经成功运行,并且能够访问 GitHub API。

总结

通过以上步骤,我们演示了如何使用 Docker 将一个简单的 Python 脚本打包成一个可移植的容器镜像。Docker 不仅可以简化开发和部署流程,还能确保在不同环境中的一致性,使得应用程序更加稳定和可靠。

相关推荐
我的xiaodoujiao1 分钟前
快速学习Python基础知识详细图文教程17--类型注解和断点调试
开发语言·python·学习·测试工具
每天吃饭的羊1 小时前
Chrome DevTools MCP
python
leoZ2312 小时前
AI 辅助开发的五道坎
开发语言·人工智能·视觉检测·bert·php·超分辨率重建·openvino
程序员老陆2 小时前
Qt的QThread::usleep和FFmpeg的libavutil模块的av_usleep哪个精度高一些?
开发语言·qt·ffmpeg·音视频
2601_963869953 小时前
【计算机毕业设计】基于Java的相框定制系统的设计与实现
java·开发语言·课程设计
水獭比特3 小时前
localhost 不是安全边界:给 Agent Web 入口补上四层门禁
人工智能·python
Generalzy3 小时前
Whisper + VAD + TTS:一套完整的 Python 本地语音处理流水线
python·whisper·语音识别
qpsj3 小时前
让 LLM 控制 AutoCAD/ZWCAD:COM 自动化 + MCP 封装
python·llm
赟爸3 小时前
直播切片素材杂乱不好复用,易元AI要怎么处理
大数据·人工智能·python
名字还没想好☜3 小时前
Go 的 unsafe.Pointer 实战:零拷贝 []byte↔string 转换与三条铁律
开发语言·后端·golang·go·unsafe