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建立在一个阶段,并复制到另一个阶段