上下文: 这是一个用Kotlin编写的应用程序,并使用Maven的Spring-boot。
基本上,我想知道我正在做的事情是否合理。
运行mvn install
,然后将使用相应的target
文件创建jar
文件夹。
因此,Dockerfile只是将jar
文件复制到容器的工作目录中并运行java -jar WHATEVER.jar
。
简单Dockerfile
FROM openjdk:8-jre-alpine
COPY target/app-DEV-SNAPSHOT.jar .
EXPOSE 8089
CMD ["java", "-jar", "./app-DEV-SNAPSHOT.jar"]
但是我会说,使用多阶段构建对我来说更有意义,在第一阶段生成jar
文件,在第二阶段执行它。我尝试了第二种方法,但我遇到了main class doesn't exist
多阶段Dockerfile:
FROM maven:3.5.2-jdk-8-alpine as BUILD
ENV APP_HOME=/usr/src/service
COPY ./src /usr/src/service
COPY pom.xml /usr/src/service
WORKDIR /usr/src/service
RUN mvn install
FROM openjdk:8-jre-alpine
COPY --from=BUILD /usr/src/service/target/app-DEV-SNAPSHOT.jar ./
EXPOSE 8080
CMD ["java", "-jar", "./app-DEV-SNAPSHOT.jar"]
哪一个是正确的?
答案 0 :(得分:1)
您应该使用多级dockerfile。原因是您希望对主机系统的依赖性最小。在主机上运行mvn时,添加mvn的依赖关系,然后依次添加java。
我的建议是使用多级泊坞窗在一个阶段构建并复制到另一个阶段