使用Docker设置Java开发环境

6
最近,我花了很多时间研究 Docker。我对能够在开发中使用与生产环境相同的环境印象深刻!
目前,我想从小处开始,改善开发流程。我们正在开发部署在 Tomcat 上的 Java 应用程序。开发人员使用 Eclipse 和 IntelliJ 等 IDE 进行开发。
在开发过程中,需要在 IDE 中配置 tomcat 环境,以便自动部署和调试代码。因此,必须提供 tomcat 基目录来进行设置。
目前,我有一个安装了 tomcat 的 Debian Docker 镜像,位于 /opt/tomcat 目录下。
我希望能够将容器 /opt/tomcat 目录的内容链接到主机内的某个目录。不幸的是,这个功能似乎不存在。使用 -v 选项只能将主机目录挂载到容器中,而不能反过来。
目前,我唯一看到的解决方案是挂载容器的 webapps 目录,并将 war 文件放入其中,但在我看来,这相当低效。
你需要手动启动和重启 tomcat,只能进行远程调试,IDE 控制台中没有日志记录。
那么,有没有人对使用 Docker 优化 Java Web 应用程序开发工作流程有什么想法呢?

2
这似乎仍然没有一个真正的解决方案。我知道Docker对于隔离环境非常棒,但是我真的希望我们在本地Docker容器上开发时可以使用本地IDE调试器,而不是远程调试器。每次更改jsp或某些java类时都要重新部署应用程序,这很低效,我不想坐在那里。 - bluesockets
2
我完全同意您的想法。我希望在我的IDE中配置运行时环境,并将日志输出到我的控制台,而不需要手动打包软件。 - daniel
根据我的经验,运行docker + tomcat设置的最简单方法是使用嵌入式tomcat。因此,您不需要运行tomcat并部署war文件,而是创建一个包含tomcat并运行它的远程jar文件。主要好处是:您可以在开发和生产中调试/运行相同的设置,并且非常容易创建docker镜像。我使用spring-boot生成样板代码,但这是可选的。也可以只用maven实现。您对这样的设置感兴趣吗? - Jan
我为此编写了Docker Shell - http://dockershell.io/。不幸的是,它还不支持运行X应用程序,因此您仍然需要使用远程调试。 - mzedeler
你能在问题中添加环境信息吗?你的IDE主机是什么?Mac/Windows还是Linux,这将对解决方案产生很大影响。如果是Windows,我可以提供一个解决方案。 - Larry Cai
3个回答

2

1

你可能需要在同一个容器中运行Eclipse和Tomcat,但我肯定会先尝试让它们在两个单独的容器中运行。也许可以从这个基础镜像开始,然后尝试使用共享卷将其链接到Tomcat镜像。


1
嘿,将IDE安装在同一个容器中并不是一个真正的选择,因为我希望将来也可以在生产环境中重复使用该容器。我也真的不想为IDE创建一个容器,因为开发人员应该使用他想要的任何IDE和任何操作系统。 - daniel
1
这就是我建议采用双容器方法的原因。这样你就可以在开发过程中将Tomcat容器链接到IDE容器中。 - Abdullah Jibaly
但我不想把IDE放在容器里面。 - daniel

-1
如果我正确理解了您的问题,为什么不使用-v选项来挂载war文件本身呢?这在使用wildfly时对我有效。
基本上,我使用maven构建war并将target/myapp.war映射到/opt/wildfly/myapp.war。然后,每当我在应用程序中进行更改时,我只需运行mvn clean package,应用程序容器就会重新部署,因为war已经发生了变化。
现在,这是利用了wildfly的部署扫描器,但也可能适用于tomcat。如果不行,也许您可以使用一个展开的war运行tomcat,然后将构建文件夹target/myapp挂载到tomcat的webapps文件夹中。

1
一般来说,您可以使用Tomcat进行自动重新部署,但在实际生活中,这会带来更多的问题而不是解决它。经常会导致内存泄漏或Web应用程序的奇怪行为... - daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接