当前位置: 首页 > news >正文

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


这是我父亲 日记里的文字
这是他的生命 留下留下来的散文诗
几十年后 我看着泪流不止
可我的父亲已经 老得像一个影子
                     🎵 许飞《父亲写的散文诗》


如何用 Docker 打包一个 Python 脚本

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

步骤 1:准备 Python 脚本

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

# app.py
import requestsdef 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 的文件,内容如下:

# 使用官方 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 镜像:

docker build -t python-app .

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

步骤 5:运行 Docker 容器

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

docker run --rm python-app
  • –rm 标志表示容器在退出时会自动删除。

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

GitHub API is reachable.

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

总结

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

http://www.lryc.cn/news/415391.html

相关文章:

  • 从“幕后”到“台前”:一文读懂API经济如何促进企业的创新与增长
  • 解锁PDF新姿势:2024年PDF转图片工具精选
  • Node.js(8)——Express的基本使用
  • Linux--应用层协议HTTP
  • Flux:Midjourney的新图像模型挑战者
  • RabbitMQ高级特性 - 消费者消息确认机制
  • PermX-htb
  • 解密RCE漏洞:原理剖析、复现与代码审计实战
  • 打造智能家居:用React、Node.js和WebSocket构建ESP32设备控制面板(代码说明)
  • 计网:从输入URL到网页显示期间发生了什么
  • 龚宇引以为傲的“爆款制造营”,爱奇艺怕是要爽约了
  • org.springframework.web.client.HttpClientErrorException$NotFound异常
  • 在开关电源转换器中充分利用碳化硅器件的性能优势
  • QObject::connect: Cannot queue arguments of type ‘QList<QString>‘
  • 基于K8S部署安装Jenkins
  • 24-8-4-读书笔记(十三)-《莎士比亚全集》(第一卷(续)) [英] 威廉·莎士比亚 [译]朱生豪
  • linux nicstat
  • 程序员如何积累人脉?光靠技术不行了~
  • 初识增强现实(AR)
  • 开关电源起振是什么看了就知道
  • Modbus_Ascii协议
  • 树莓派在功能和成本之间的 “惊人平衡 “支持了全球数字标牌的成功故事!
  • C++ 学习记录
  • C#中的TCP和UDP
  • Spring中使用嵌套事务及事务保存点
  • SFT、RLHF、DPO、IFT —— LLM 微调的进化之路
  • 【数据结构】LinkedList与链表
  • 《LeetCode热题100》---<5.①普通数组篇五道>
  • 根据id查找树形结构中匹配数据与上级所有数据
  • 探索亚马逊Amazon S3:无缝存储管理与极速数据传输的奥秘