gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:40:46 25 4
gpt4 key购买 nike

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

我有 java Spring boot 项目,因为项目的根目录有一个 Dockerfile。

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"]

我想将maven添加到其中,而不修改结构。并且maven应该清理它的包。?

例如。 docker build -t user/myimage 。

它应该自动安装 Maven 并清理我的项目。我不需要显式运行 mvn clean package

我之前从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 包的等效脚本,以便我可以将其添加到构建我的镜像的 dockerfile 中。

最佳答案

I have got few resources before from stackoverflow but I cannot do experiment, I need code which can run thought the given jdk script mentioned previously.

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

第一件事:不用担心在 Docker 构建中依赖另一个基础 docker 镜像。
Docker 构建有 multi-stage build自 17.05 Docker 版本 (05/2017) 以来的功能,它允许在构建中定义多个阶段并满足您的需求。
事实上,在第一阶段,您可以依赖 maven docker 镜像来构建应用程序,而在第二阶段,您可以依赖 JDK docker 镜像来运行应用程序。
多阶段构建功能还有另一个优点:图像大小优化,因为先前步骤生成的中间层不会保留在最终图像大小中。
对于集成/生产之类的环境,这可能是我会使用的方式。

回到你的问题,如果你想使用the answer您链接的主要内容是您需要更改的最终基础镜像的 JDK 标签以满足您的要求,您还应该调整一些小东西。
附带说明一下,当前您将 JAR 复制到镜像的根目录下。出于安全原因,这不是一个好的做法。您应该将其复制到文件夹中,例如 /app

当您引用由 maven 构建的 jar 时,最好在该 jar 前添加其artifactId/最终名称而不带其版本,而不是像此处那样将目标文件夹中的任何 jar 视为 fat jar: ARG JAR_FILE=目标/*.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 构建解决方案。

关于java - 如何编写 dockerfile 以在包含 jdk 的现有 spring boot 项目上添加 maven 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60123809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com