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

如何编写dockerfile以在包含jdk的现有spring boot项目上添加maven build

何博涛
2023-03-14

我的老板去度假了几天,我是一个java开发人员,我对docker不太了解(只有基础知识)

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

我以前从stackoverflow得到的资源很少,但我不能做实验,我需要的代码可以运行,认为给定的jdk脚本前面提到。

FROM maven:3.6.0-jdk-11-slim AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package

我请求您,请为Maven clean package提供一个等效的脚本,以便我可以将它添加到构建我的映像的dockerfile中。

共有1个答案

萧芷阳
2023-03-14

我以前从stackoverflow得到的资源很少,但我不能做实验,我需要的代码可以运行,认为给定的jdk脚本前面提到。

如果我理解得很好,您的问题是希望在docker构建中添加maven打包步骤,同时在运行时仍然使用JDK:from openjdk:8-jdk-alpine的确切版本,并且不依赖于基础映像:from maven:3.6.0-jdk-11-slim AS build

第一件事:不必担心依赖于docker构建中的另一个基础docker映像。
docker构建自17.05 docker版本(05/2017)以来就具有多阶段构建功能,它允许在构建中定义多个阶段,这符合您的需要。
实际上,在第一阶段,您可以依赖maven docker映像来构建应用程序,而在第二阶段,您可以依赖JDK docker映像来运行应用程序
多阶段构建特性还有另一个优点:映像大小优化,因为前面步骤生成的中间层不会保留在最终的映像大小中。
对于集成/生产之类的环境,这可能是我会使用的方法。

回到您的问题上来,如果您想要使用您链接的答案,您需要更改的主要内容是最终基映像的JDK标记以匹配您的需求,并且您还应该修改一些小的内容。
作为附带说明,当前您在映像的根部复制JAR。出于安全原因,这不是一个好的做法。您应该将其复制到一个文件夹中,例如/app

当您引用maven构建的jar时,最好使用它的artifactID/final名称作为jar的前缀,而不使用它的版本,而不是像这里所做的那样,将目标文件夹中的任何jar视为fat jar:arg jar_file=target/*.jar

所以它会给出:

# Build stage
FROM maven:3.6.0-jdk-11-slim AS build
COPY pom.xml /app/
COPY src /app/src
RUN mvn -f /app/pom.xml clean package

# Run stage
FROM openjdk:8-jdk-alpine # Use your target JDK here !
COPY --from=build /app/target/app*.jar /app/app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]

请注意,建议的解决方案非常简单,在许多情况下已经足够了,但可能不适合您的特定上下文。
确实有几种方法可以处理您的问题。根据您的目标环境,您的需求并不相同,策略也会有所不同。
这些需求可能是构建速度、最终图像大小优化、对本地开发人员的快速反馈。而所有这些都不一定是兼容的。
Docker构建区域确实是一个非常大的主题。我强烈建议您进行更多的研究,以便能够调整docker build解决方案以满足您的实际需要。

 类似资料:
  • 我试图在spring boot应用程序中添加一个环境变量。属性文件。我知道如何在非spring启动项目中正常添加它,但我找不到用于添加环境变量的字段,这就是我所看到的。 这是我的application.properties文件,这可能会有帮助。

  • 我看到一些人建议系统范围,但Maven不会将它们打包到您的战争中: 我如何让这些罐子用于编译/检查、构建,然后打包到战争中?

  • 问题内容: 如何在Eclipse中将现有的Java项目添加到git中? 我注意到在创建项目时,有一个选项可以添加到源代码管理中,但是对于现有项目,我找不到此选项。这是可以从Eclipse中的git插件实现的,还是必须从命令行完成?(我使用的是Mac) 问题答案: 另一种方法(我发现内置的Eclipse工具有时很挑剔): 打开您的终端 导航到您的项目目录 键入以创建存储库 假设该文件夹中已经有文件,

  • 我对Artisan在使用Xampp的Windows 10上的使用存在问题。 我做了什么: 从git Repository克隆项目 运行composer安装 在我尝试运行的项目所在的目录中: 但我错了: 无法打开输入文件:artisan 但如果我运行命令 我得到命令列表,如缓存,调试,雄辩...但是没有一个工匠... 如何将artisan添加/使用到现有项目中?

  • 我有一个现有的工作项目。作为最近的一个请求,我需要在我的项目中使用Aws Amplify。我正在努力将Aws amplify添加到我的项目中,因为amplify只有选项amplify CLI来初始化一个全新的Angular项目。是否有人曾经面对过这个问题并有过解决方案,请告诉我。谢谢

  • 如何在这个现有项目中使用Maven? 此外,当我尝试添加Maven Project并在步骤“Select a Archetype”时,所有显示的原型都有版本“Release”。当我在这一步中单击Next时,Eclipse变得没有响应。它使用内存甚至没有增加。