Docker化Springboot应用程序

上下文:这是一个用Kotlin编写的应用程序,并使用Maven的Spring引导。

基本上,我想知道我在做什么。

运行mvn install然后用相应的jar文件创建target文件夹。 因此,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"] 

哪一个是正确的?

你应该使用多级dockerfile。 原因是您希望对主机系统的依赖性最小。 当您在主机上运行mvn时,您将添加mvn的依赖关系,然后依次为java。

我的建议是使用多阶段docker建立在一个阶段,并复制到另一个阶段