繁体   English   中英

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

[英]Developing Java (Maven) application on Docker container

对于一个新的 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 IDEA) 中,我正在配置远程调试配置以在容器上执行调试。

正如您可能猜想的那样,为我想在项目中调试的每个小编辑执行这些步骤有点尴尬。

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

您可以实施的一些想法:

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

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

  1. 使用 IntelliJ 在 DEV 机器上运行和调试您的项目

在 DEV 机器上使用 Docker 运行项目几乎没有任何好处,只会带来很多麻烦。

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

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

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

这是迄今为止我可以推荐的最佳解决方案。 您在问题中描述的方式更适合调试远程服务器(读取就绪环境)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM