【发布时间】:2019-02-09 07:00:47
【问题描述】:
我已按照这些教程为我的 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 映像。这是我尝试过的东西。
为 Dockerfile 使用 Spotify maven 插件。尝试运行 ./mvnw 来构建 JAR 以及 Docker 映像。但是,我没有在 boot2docker 中安装 Java。所以 Maven 包装器 ./mvnw 无法运行。
我尝试通过基于 openjdk:8-jdk-alpine 镜像的 Dockerfile 构建 JAR。我在 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 新手。感谢您的评论和回答!
【问题讨论】:
-
因为您当前的方法存在多个缺陷。您可以尝试以下操作:构建 Jar -> 在 openjdk docker 映像中打包该 jar
-
我自己试过了,总是可以使用,因为您可以使用主机系统生成 jar 和 dockerfile 将其包装在图像中
-
为什么要在图像中构建 jar?这是您需要满足的约束条件吗?通常你会在 Docker 世界之外构建一个 jar,然后使用这个外部构建的工件构建一个图像。正如@jazz 所说的那样
-
要构建一个 java 项目,您显然需要客户端上的 java 或使用多阶段 Dockerfile 来做同样的事情。您遵循的指南假定为第一个。
标签: docker spring-boot dockerfile docker-image