Python:关于打包应用程序 docker vs pyinstaller 的问题

标签 python mongodb docker pyinstaller

我有一个 python 应用程序,我使用 pyinstaller 创建了一个可执行文件。整个 python 解释器与所有 pip 依赖项一起打包到可执行文件中。

所以现在我的应用程序可以在可能没有安装 python 或 python 模块的环境中运行,但仍然存在一些依赖项:

1) MongoDB - 这是我的应用程序使用的数据库,它当然需要安装在系统上才能正常工作。

2) Mosquitto - 该服务是必需的,因为应用程序使用 MQTT 来接收/发送命令。

我目前处理这个问题的方法是使用一个 shell 脚本,当我的应用程序部署在某个地方时,它会第一次安装 mongodb 和 mosquitto。我刚刚发现了 docker,我想知道它是否能够将这些“外部”依赖项打包到 docker 镜像中?

我是否有可能拥有一个独立的“东西”,它可以在任何环境中运行,无论那里是否安装了 mongoDB 或 mosquitto?

我到底该怎么做呢?

(无关,但此应用程序旨在在树莓派上运行)

最佳答案

如果你在这里采用了 Docker:

您仍然必须“单独”运行外部服务;它们本身不能被打包成单个工件。不过,有一个名为 Docker Compose 的标准工具可以提供此功能,您通常会分发 docker-compose.yml描述如何运行一组相关容器的文件。

将 Docker 镜像作为文件分发是不常见的。相反,您会将构建的镜像推送到注册表(如 Docker Hub,但主要的公共(public)云提供商将其作为托管服务提供,有几个独立的服务,或者您可以运行自己的服务)。然后 Docker 可以通过 HTTP 检索图像。

Docker 容器只能由等效于 root 的用户运行。由于您正在谈论安装数据库作为启动过程的一部分,这可能不是您关心的问题,但您可以以普通用户身份运行纯 Python 或 pyinstallered 应用程序。任何可以运行任何 Docker 命令的人都可以在主机上拥有不受限制的根级别访问权限。

关于Python:关于打包应用程序 docker vs pyinstaller 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55116677/

相关文章:

python - Django REST Framework 教程不工作

python - 在 Python 3.5 中,无法导入 zenity

node.js - MongoDB Node native 驱动程序创建重复文档

javascript - Mongoose 具有相同的保存和更新中间件功能

git - Docker 将变量传递给运行 git clone 的 shell 脚本

docker - 设置无人机与 github 持续集成

python - 如何在多个条件下对 Pandas 的数据进行分组?

html - Node.js Web 应用程序中的 ECONNRESET、MongoNetworkError

Docker 容器无法连接到互联网

python - 如何列出您在谷歌 Protocol Buffer 中定义的属性?