当前位置: 首页 > 知识库问答 >
问题:

docker - 使用 Docker 开发本地软件是否可行?

罗安和
2024-05-15

使用 Docker 开发本地软件是否可行?

我知道的开发本地软件的技术有:Qt,Electron,微软的WPF,Winform,Java 的 Swing,JavaFX....

这些我大概都了解过,也用过 Electron,winform 开发过一两款自己的小工具。

我个人的技术栈主要是 Java,在学完 Docker后,我就在想,能否用 Docker来开发本地工具?

例如,在Docker里安装数据库,Java等环境,然后开发自己的应用(例如 JavaWeb 项目)并上传镜像;
而用户只需下载Docker + 镜像(这个我认为可以用一些脚本来运行,例如Windows的.bat文件,降低用户安装难度),然后即可运行镜像;而不用客户早就安装数据库,Java等环境

这样的方式是否可行?有相关的案例吗?(我试着搜索了下,不知道用什么关键字好,没搜到类似的案例)

我试过 Electron,然后本地应用的话,不太能让客户去安装数据库,因此用的是 SQLite,然后操作数据库起来远远没有 Java 操作数据库方便(Java有很多成熟的 orm 框架)

也试过 winform,感觉有点难用... winform 里的很多控件是写死了的,不能自定义功能

共有3个答案

齐嘉庆
2024-05-15

完全可以啊,你上github上搜很多知名的开源项目为了方便你部署不都是这么干的吗,可以说docker诞生的一大目的就是为了简化部署环节、保证环境的一致。
你说的本地软件我的理解是桌面应用程序吧?
如果是像Electron这样最终要打包成可执行文件的,把数据库和它本身打包成一个镜像不太现实,可以考虑就单独构建一个MySQL数据库的容器作为服务端,Electron只作为客户端和它去交互就可以了。
如果是你说的JavaWeb项目,那完全可以把所有东西都打成一个镜像,构建成一个容器启动,浏览器访问就完事了。

况浩邈
2024-05-15

我知道一个软件,linkding,应该符合你说那种方式。它就在容器里有一个服务器,在宿主机上用浏览器访问。

但我觉得如果是一个“小工具”的话,就没有必要用 Docker 这样“重”的工具了。或者可以试试在 GUI 中嵌入 WebView。

龚志
2024-05-15

更建议你用docker compose组织你的容器依赖关系,将所有依赖都打包到一个镜像中不是一个好的做法,会导致镜像容量剧增,参考其他开源项目的docker compose做法就知道了

 类似资料:
  • null 因此,发生的事情可以在环回中解决,但不会通过ssh隧道。如何从docker调用,使其通过ssh隧道? 附:我用的是macOS High Sierra

  • 我有慢的互联网连接,但我已经有我需要的docker映像。: 或使用通用的: 但结果是错误的: 如何优化testcontainers以使用本地映像?

  • 我在一个docker compose文件中运行两个不同的服务。我通过引用容器的服务名称来谈论每个服务。 现在我希望我的容器A也能访问localhost。为此,我添加了network_mode=host的配置,但这会创建一个错误,说明容器A无法与容器B通信。 对于每个撰写文件docker-composs创建一个网络,所以在这种情况下,我应该手动将容器分配到一个专用网络吗?或者是否有任何变通方法来访问

  • 澄清: 我有一台安装了Docker的macbook 我有一个带有MySQL的docker容器 我想从MacBook上的终端连接到在上述容器上运行的mysql实例 我不想使用命令来实现此操作。相反,我想直接从终端使用客户机(而不通过docker容器隧道进入)。 我没有在本地运行MySQL,所以端口3306应该是打开的,可以随时使用。 我用来启动容器的命令是:

  • 问题内容: 我有一个docker / jvm实例,可从命令行使用它来编译和运行Java代码。IntelliJ的项目配置要求我指向文件系统上的jvm。 所以,我想知道,我可以配置intellij以使用此docker容器吗?我想我可以配置一个docker容器,使其保持运行状态,并挂载/共享其文件系统,但是我不希望这样- 我想使用我的临时容器实例。 我对使用maven有相同的想法- 我可以在intell

  • 我想在python上使用lib发送邮件。我知道它在端口号25上使用本地smtp服务。我有以下代码。这些代码在我的本地运行没有任何问题,邮件发送成功。但是当我将它们移动到docker容器时,邮件不会发送,也不会给出任何错误。 我的代码: 运行这些代码后,我将空格({})作为值。在sendmail方法描述中有这样的: ...消息被接受传递到四个地址中的三个,其中一个被拒绝,错误代码为550。如果所有地