Python: 关于打包应用程序的问题 docker vs pyinstaller
Python: Question about packaging applications docker vs pyinstaller
我有一个 python 应用程序,我使用 pyinstaller 创建了一个可执行文件。整个 python 解释器连同其所有 pip 依赖项一起打包到可执行文件中。
所以现在我的应用程序可以 运行 在 python 或 python 模块可能未安装的环境中,但仍然存在一些依赖项:
1) MongoDB - 这是我的应用程序使用的数据库,它当然需要安装在系统上才能正常工作。
2) Mosquitto - 此服务是必需的,因为应用程序使用 MQTT 来执行 receive/send 命令。
我目前处理这个问题的方法是使用 shell 脚本,当我的应用程序部署在某个地方时,它会在第一次安装 mongodb 和 mosquitto。我刚刚发现 docker,我想知道它是否能够将这些 'external' 依赖项打包到 docker 图像中?
我是否可以拥有一个独立的 "thing",它可以 运行 在任何环境中,无论是否安装了 mongoDB 或 mosquitto?
我将如何做呢?
(不相关,但此应用程序用于 raspberry pi 上的 运行)
如果您在此处采用Docker:
您仍然需要 "separately" 运行 外部服务;它们无法打包成一个单独的工件 本身 。不过,有一个名为 Docker Compose 的标准工具可提供此功能,您通常会分发一个 docker-compose.yml
文件来描述如何 运行 相关容器集。
将 Docker 图像作为文件分发是不常见的;相反,您会将构建的映像推送到 registry(如 Docker Hub,但主要的 public-cloud 提供商将其作为托管服务提供,有几个独立的服务,或者你可以 运行 你自己的)。 Docker 然后可以通过 HTTP 检索图像。
Docker 容器只能由 root 等效用户 运行。由于您正在谈论安装数据库作为启动过程的一部分,这可能不是您关心的问题,但您可以 运行 普通用户 Python 或 pyinstallered 应用程序作为普通用户。任何可以 运行 任何 Docker 命令的人都可以在主机上获得不受限制的根级访问权限。
我有一个 python 应用程序,我使用 pyinstaller 创建了一个可执行文件。整个 python 解释器连同其所有 pip 依赖项一起打包到可执行文件中。
所以现在我的应用程序可以 运行 在 python 或 python 模块可能未安装的环境中,但仍然存在一些依赖项:
1) MongoDB - 这是我的应用程序使用的数据库,它当然需要安装在系统上才能正常工作。
2) Mosquitto - 此服务是必需的,因为应用程序使用 MQTT 来执行 receive/send 命令。
我目前处理这个问题的方法是使用 shell 脚本,当我的应用程序部署在某个地方时,它会在第一次安装 mongodb 和 mosquitto。我刚刚发现 docker,我想知道它是否能够将这些 'external' 依赖项打包到 docker 图像中?
我是否可以拥有一个独立的 "thing",它可以 运行 在任何环境中,无论是否安装了 mongoDB 或 mosquitto?
我将如何做呢?
(不相关,但此应用程序用于 raspberry pi 上的 运行)
如果您在此处采用Docker:
您仍然需要 "separately" 运行 外部服务;它们无法打包成一个单独的工件 本身 。不过,有一个名为 Docker Compose 的标准工具可提供此功能,您通常会分发一个 docker-compose.yml
文件来描述如何 运行 相关容器集。
将 Docker 图像作为文件分发是不常见的;相反,您会将构建的映像推送到 registry(如 Docker Hub,但主要的 public-cloud 提供商将其作为托管服务提供,有几个独立的服务,或者你可以 运行 你自己的)。 Docker 然后可以通过 HTTP 检索图像。
Docker 容器只能由 root 等效用户 运行。由于您正在谈论安装数据库作为启动过程的一部分,这可能不是您关心的问题,但您可以 运行 普通用户 Python 或 pyinstallered 应用程序作为普通用户。任何可以 运行 任何 Docker 命令的人都可以在主机上获得不受限制的根级访问权限。