如何基于docker构建和发布Python应用程序?

如何基于docker构建和发布Python应用程序?,第1张

基于 Docker 构建和发布 Python 应用程序通常需要以下步骤:

编写 Python 应用程序代码。可以使用任何你熟悉的 Python 框架,如 Flask、Django 等。

创建一个 Dockerfile,用于定义 Docker 镜像的构建过程。在 Dockerfile 中,需要指定基础镜像、安装 Python 库、将应用程序代码复制到镜像中等 *** 作。以下是一个示例 Dockerfile:

# 使用 Python 3.9 作为基础镜像

FROM python:3.9

# 设置工作目录

WORKDIR /app

# 复制应用程序代码到镜像中

COPY . /app

# 安装依赖库

RUN pip install --no-cache-dir -r requirements.txt

# 暴露端口号

EXPOSE 8000

# 设置启动命令

CMD ["python", "app.py"]

构建 Docker 镜像。在 Dockerfile 所在的目录下,运行以下命令:

docker build -t my-python-app .

其中,my-python-app 是镜像的名称,. 表示使用当前目录中的 Dockerfile 进行构建。构建完成后,你可以使用以下命令查看镜像列表:

docker images

运行容器。在运行容器时,你需要指定容器名称、端口映射等参数。以下是一个示例命令:

docker run -d --name my-app -p 8000:8000 my-python-app

其中,my-app 是容器的名称,8000:8000 表示将容器的 8000 端口映射到宿主机的 8000 端口,my-python-app 是镜像的名称。

访问应用程序。运行容器后,你可以在浏览器中访问应用程序。如果应用程序使用了 Flask 等框架,你需要在应用程序代码中指定监听的端口号为 0.0.0.0。

以上就是基于 Docker 构建和发布 Python 应用程序的一般步骤。需要注意的是,在实际应用中,可能还需要进行日志管理、数据备份等 *** 作,以确保应用程序的可靠性和安全性。

如何发布一个Python程序:

1、安装一个pyInstaller

在pycharm里点 file—–>setting—–>Project workspace——>Interpreter——>点pip右边的+号,进入下面这个界面:

搜索pyInstaller, 点击左下方Install package安装(出现错误了可以多安装几次)

(或者在命令提示符界面 用 pip install pyinstaller命令安装)

2、将.py文件打包成.exe文件

在完成第一步的安装后,就开始我们的打包。在打包之前可以先运行一下你要打包的.py文件是否可以运行,然后进行打包。

在pycharm中右键点击你将要打包的文件,找到Open in terminal点一下。

在下面出现的Local框内输入命令:pyinstaller -F 文件名,运行。

然后进行打包

打包完成后,稍等一下会刷新出一个dist文件夹, 点击 ,在里面有一个 .exe文件,右键,点击里面的 Show in Explore 找到一个.exe文件(如果不一样的可以看一下你下面打包成功后出现的路径。)

3、发送

将打包好的.exe文件拉到你之前.py文件所在的文件夹,将所有需要的素材一起发送。

别人收到后就能打开你的.exe文件运行你的程序。

众多python培训视频,尽在python学习网,欢迎在线学习!

原文: https://zhuanlan.zhihu.com/p/30555962

从根本上说, ENTRYPOINT和CMD都是让用户指定一个可执行程序, 这个可执行程序在container启动后自动启动. 实际上, 如果你想让自己制作的镜像自动运行程序(不需要在docker run后面添加命令行指定运行的命令), 你必须在Dockerfile里面, 使用ENTRYPOINT或者CMD命令

比如执行运行一个没有调用ENTRYPOINT或者CMD的docker镜像, 一定返回错误

大部分Linu发行版的基础镜像里面调用CMD命令, 指定容器启动后执行/bin/sh或/bin/bash. 这样镜像启动默认进入交互式的shell

[图片上传失败...(image-10e0a4-1649389009146)]

译注: 3个不同的Linux镜像(ubuntu, busybox, debian)都在Dockerfile的最后调用 CMD '/bin/bash'

启动Linux发行版的基础container后, 默认调用shell程序, 符合大多数人的习惯.

但是, 作为开发者, 你希望在docker镜像启动后, 自动运行其他程序. 所以, 你需要用CMD或者ENTRYPOINT命令显式地指定具体的命令.

在写Dockerfile时, ENTRYPOINT或者CMD命令会自动覆盖之前的ENTRYPOINT或者CMD命令.

在docker镜像运行时, 用户也可以在命令指定具体命令, 覆盖在Dockerfile里的命令.

比如, 我们写了一个这样的Dockerfile:

如果根据这个Dockerfile构建一个新image, 名字叫demo

可以看出 ping 命令在docker启动后自己执行, 但是我们可以在命令行启动docker镜像时, 执行其他命令行参数, 覆盖默认的CMD

docker启动后, 并没有执行 ping 命令, 而是运行了 hostname 命令

和CMD类似, 默认的ENTRYPOINT也在docker run时, 也可以被覆盖. 在运行时, 用--entrypoint覆盖默认的ENTRYPOINT

因为CMD命令很容易被docker run命令的方式覆盖, 所以, 如果你希望你的docker镜像的功能足够灵活, 建议在Dockerfile里调用CMD命令. 比如, 你可能有一个通用的Ruby镜像, 这个镜像启动时默认执行irb ( CMD irb ).

如果你想利用这个Ruby镜像执行任何Ruby脚本, 只需要执行这句话:

译注: ruby -e 'puts "Hello" 覆盖了 irb 命令

相反, ENTRYPOINT的作用不同, 如果你希望你的docker镜像只执行一个具体程序, 不希望用户在执行docker run的时候随意覆盖默认程序. 建议用ENTRYPOINT.

Docker在很多情况下被用来打包一个程序. 想象你有一个用python脚本实现的程序, 你需要发布这个python程序. 如果用docker打包了这个python程序, 你的最终用户就不需要安装python解释器和python的库依赖. 你可以把所有依赖工具打包进docker镜像里, 然后用

ENTRYPOINT指向你的Python脚本本身. 当然你也可以用CMD命令指向Python脚本. 但是通常用ENTRYPOINT可以表明你的docker镜像只是用来执行这个python脚本,也不希望最终用户用这个docker镜像做其他 *** 作.

在后文会介绍如何组合使用ENTRYPOINT和CMD. 他们各自独特作用会表现得更加明显.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7820199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存