在Docker容器上开发Java(Maven)应用程序

时间:2019-12-05 09:59:23

标签: java maven docker intellij-idea

对于一个新的Spring项目,我想设置一个Docker容器来构建+运行+调试我的应用程序。

此刻我正在使用此Dockerfile:

FROM maven:3.6.2-jdk-8-slim
COPY . /app/
WORKDIR /app/
RUN mvn clean package

FROM maven:3.6.2-jdk-8-slim
COPY target/app.jar app.jar
ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", "-jar","/app.jar"]
EXPOSE 5005

第一步是构建项目。在第二步中,运行该应用程序,暴露一个5005端口以进行“远程”调试。

然后从我的IDE(IntelliJ)中配置远程调试配置以在容器上执行调试。

您可以想象,对于我想在项目中调试的每个小编辑执行这些步骤都有些尴尬。

因此,我想知道是否存在使用IntelliJ来自动构建调试器并将其附加到我的应用程序的更实用方法,就像直接在我的开发机上进行开发时一样...

2 个答案:

答案 0 :(得分:0)

您可以实现以下两个想法:

  1. 使用CI / CD构建您的docker映像

让您的CI / CD管道构建您的工件,然后将其打包到docker映像中,而不是将这项工作卸载到docker文件中(您将对该过程有更多的控制权)。最后,您也可以将其部署到目标环境。

  1. 使用IntelliJ在DEV计算机上运行和调试项目

在DEV计算机上使用Docker运行项目几乎不会带来任何好处。

答案 1 :(得分:0)

首先,您可以直接从IntelliJ打开pom.xml并运行应用程序,而无需运行maven(IntelliJ具有出色的maven插件)。

由于您以java -jar的身份运行它,因此甚至不需要最终版本的IntelliJ。

现在这就是我们通常的发展方式,甚至在行家之前也是如此。例如,如果您想检查测试是否已运行,也可以在本地运行mvn clean package(同样,也可以在Idea中进行此操作)。当您进行更改时,创建一个docker并部署在服务器上。

到目前为止,这是我可以推荐的最佳解决方案。您在问题套件中描述的方式更多是调试远程服务器(已就绪的环境)。

如果绝对需要这种方式,您仍然可以使用JVM的HotSwap功能进行小的更改(只要这些更改在方法内部即可):通过远程调试器连接时,右键单击并“重新编译”具有以下内容的类:更改。它将自动加载到远程JVM,因此您实际上不需要触发所有此过程。

您也不必在maven(mvn clean package -Dmaven.tests.skip)中运行所有测试