如何在没有JAR的情况下为Spring Boot应用程序构建Docker镜像

问题描述 投票:1回答:1

我已经按照这些教程为我的Spring Boot应用程序构建了Docker镜像,它使用Maven作为构建工具。我在Windows 10机器上使用boot2docker VM,将我的项目从我的Bitbucker存储库克隆到VM。

https://spring.io/guides/gs/spring-boot-docker/

https://www.callicoder.com/spring-boot-docker-example/

我理解说明了,但是,我没能构建一个合适的Docker镜像。这是我尝试过的东西。

  1. 使用Dockerfile的Spotify maven插件。尝试运行./mvnw来构建JAR以及Docker镜像。但是,我没有在boot2docker中安装Java。所以Maven包装器./mvnw无法运行。
  2. 我试图通过Dockerfile构建JAR,它基于openjdk:8-jdk-alpine图像。我在Dockerfile中添加了RUN ./mvnw package指令。然后运行docker build -t <my_project> .来构建Docker镜像。它在RUN指令失败,声称/bin/sh: mvnw: not found The command '/bin/sh -c mvnw package' returned a non-zero code: 127

我的Dockerfile,位于mvnw所在的目录中:

MAINTAINER myname

VOLUME /tmp

RUN ./mvnw package

ARG JAR_FILE=target/myproject-0.0.1-SNAPSHOT.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

对于1,我需要在Docker引擎所在的操作系统中安装Java。但我认为这不是一个好的做法因为这降低了便携性。

对于2,首先,我不知道如何在Dockerfile中成功运行./mvnw。其次,我不确定通过Dockerfile构建Spring Boot JAR是不是一个好习惯,因为我没有看到任何“Docker for Spring Boot”教程告诉你这样做。

那么,解决我的情况的最佳做法是什么?我是Docker的新手。评论和答案表示赞赏!

docker spring-boot dockerfile docker-image
1个回答
1
投票

您可以安装maven并直接在构建中运行编译。通常,这将是一个多阶段构建,以避免在推送的图像中包含整个jdk:

FROM openjdk:8-jdk-alpine as build
RUN apk add --no-cache maven
WORKDIR /java
COPY . /java
RUN mvn package -Dmaven.test.skip=true
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/java/target/myproject-0.0.1-SNAPSHOT.jar"]

以上是我过去所做的相同例子中的精简版的精简版。您可能需要调整入口点中的文件名,但关键步骤是安装maven并在构建中运行它。

© www.soinside.com 2019 - 2024. All rights reserved.