我已经按照这些教程为我的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镜像。这是我尝试过的东西。
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的新手。评论和答案表示赞赏!
您可以安装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并在构建中运行它。