Docker化Springboot应用程序

时间:2018-01-19 08:36:46

标签: java docker spring-boot kotlin dockerfile

上下文: 这是一个用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"]

哪一个是正确的?

1 个答案:

答案 0 :(得分:1)

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

我的建议是使用多级泊坞窗在一个阶段构建并复制到另一个阶段