【问题标题】:Python: Question about packaging applications docker vs pyinstallerPython:关于打包应用程序 docker vs pyinstaller 的问题
【发布时间】:2019-03-12 08:04:10
【问题描述】:

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

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

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

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

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

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

那我到底该怎么做呢?

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

【问题讨论】:

  • 你能澄清一下吗?您写到您的应用程序需要 MongoDB 和 Mosquito 才能运行,然后您询问是否可以在没有这 2 个工具的环境中运行它。
  • @Adonis 我的意思是,我可以将 MongoDB 和 Mosquitto 打包到 docker 映像中,以便它可以在没有安装这两个的系统上运行吗?就像我对 pip 依赖项所做的那样?感谢 pyinstaller,我可以在没有安装 python 的系统上运行我的 python 程序。这有意义吗?

标签: python mongodb docker pyinstaller


【解决方案1】:

如果你在这里采用了 Docker:

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

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

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

【讨论】:

  • 感谢您的解释!听起来很有趣,你能推荐一些我可以用来容器化我的 python 应用程序的资源吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2019-09-27
  • 2018-08-20
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
相关资源
最近更新 更多