docker - 使用 docker 交付桌面应用程序是个好主意吗?
问题描述
我对向用户提供桌面应用程序的一些好方法感兴趣。该应用程序是使用 LAMP 制作的网络应用程序,但我需要和用户在桌面上运行它。我想为此选择一些好的跨平台解决方案。
我已经有这个应用程序的 docker 映像。
是否有使用 docker 向用户交付应用程序的做法?就像安装 docker(如果尚未安装)并运行 docker 映像的安装包。有这方面的经验吗?
解决方案
Docker 不适合这个用例。我的建议是选择一种广泛可用的脚本语言,如 Python 或 JavaScript 来实现,并使用 SQLite 等嵌入式数据库作为持久层;那么您的最终用户只需要安装语言解释器(他们可能已经拥有)和您的应用程序,他们就可以使用他们已经拥有的浏览器作为前端。
Docker 在这里提出了许多挑战;如果您浏览其他docker问题,您会看到人们经常遇到其中的一些问题:
在非 Linux 上,运行 Linux 应用程序的 Docker 需要一个 Linux VM,它将“轻量级容器系统”变成“成熟的资源占用虚拟机”。
在非 Linux 上,可访问的主机文件系统路径集是有限的。如果您的应用程序试图访问 Windows F: 驱动器上的用户数据以选择一个最近的问题,那么您的应用程序将无法工作。
如果您的应用程序管理着一定数量的“用户”数据,那么管理文件系统权限是很棘手的,并且在每个操作系统上都不同。
如果您的应用程序尝试呈现 GUI,并且您尝试构建“一个可移植映像”,那么您将被迫使用 Linux X11 平台;这需要主机上匹配的 X 服务器(额外的软件安装!),以及一些额外的挑剔绑定安装、环境变量和主机设置。
如果您的应用程序尝试呈现 GUI,则默认情况下它无法访问用户的非 Docker 桌面首选项,因此它的外观和行为可能与本机应用程序不同。
Docker 需要一定数量的升级权限才能运行,因此如果您遇到安全问题(尤其是在启动处理上述所有问题的容器的机制中),则更有可能危及整个系统。
这一切都不是不可克服的,但也很难看到所需的努力和额外的复杂性有什么特别的好处。
推荐阅读
- flutter - 颤振 if-else 语句
- html - Excel 宏 VBA 使用 HTML 标记粗斜体下划线在单元格中强
- python - 具有异步功能的装饰器
- php - 如何从 SQL 表中选择和显示最近添加的行?
- python - 使用 numpy.argsort 的结果对数组进行排序
- android - 什么是 /sys/class/gpio/export 和 `/sys/class/gpio/unexport 机制以及底层 sysfs 功能是什么?
- java - 如何在 onPostExecute 中调用 Map 方法?
- r - 如何使用字符向量迭代数据帧并计算 R 中匹配项的平均值
- python - 使用 pandas 和 matplotlib,当我排除某些行时如何绘制图表?
- javascript - React - 模块解析失败:意外的令牌。您可能需要适当的加载程序来处理此文件类型