从 Spring Boot Jar 构建 Docker 映像
Posted
技术标签:
【中文标题】从 Spring Boot Jar 构建 Docker 映像【英文标题】:Building Docker image from Spring Boot Jar 【发布时间】:2017-02-11 18:22:46 【问题描述】:我正在尝试学习如何使用 spring boot fat jar 启动和运行 Docker。我已经安装了所有东西,可以从 Docker Hub 运行 Hello World 示例。
我使用名为 predictive-text-tree-0.0.1-SNAPSHOT.jar
的 Maven 创建了胖 jar,并将以下内容用作我的 dokerfile.docker:
FROM java:8
MAINTAINER ltocode
EXPOSE 8080
ADD predictive-text-tree-0.0.1-SNAPSHOT.jar /data/predictive-text-tree-0.0.1-SNAPSHOT.jar
CMD java -jar /data/textpredict.jar
我在服务器上有 jar 和 docker 文件,当我运行 docker build 命令时,我得到以下信息:
~/build# docker build -t predictable-text-tree-0.0.1-SNAPSHOT.jar
t 的参数“predictive-text-tree-0.0.1-SNAPSHOT.jar”无效:解析参考时出错:“predictive-text-tree-0.0.1-SNAPSHOT.jar”不是有效的存储库/标签 请参阅“docker build --help”。
如何从 fat jar 构建 docker 镜像?
【问题讨论】:
【参考方案1】:您在构建命令中提供了不正确的参数。 -t
参数用于标记生成的图像。这意味着,-t
应该后跟图像名称,而不是 jar 文件。您可以在docker build document找到更多详细信息。
【讨论】:
【参考方案2】:我也有同样的情况。 我有一个使用嵌入式 H2 数据库的示例 Spring Boot 应用程序。我已经制作了一个 Dockerfile 如下。
FROM openjdk:8
EXPOSE 8081
ADD target/book-rest-api-reactjs-0.0.1-SNAPSHOT.jar book-rest-api-reactjs-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","/book-rest-api-reactjs-0.0.1-SNAPSHOT.jar"]
然后我使用以下命令构建 docker。
docker build -t book-rest-api-reactjs.jar .
接下来使用以下命令列出图像以确保图像在本地可用。
docker 镜像 ls
然后使用以下命令运行映像。
docker run -p 9090:8081 book-rest-api-reactjs.jar
现在当我访问端点(http://localhost:9090/rest/books)时,我能够得到结果。
【讨论】:
【参考方案3】:为了更优雅的方式:过去,docker-maven-plugin 最适合我,这里是预览:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>VERSION GOES HERE</version>
<configuration>
<imageName>example</imageName>
<baseImage>java:8</baseImage>
<entryPoint>["java", "-jar", "/$project.build.finalName.jar"] </entryPoint>
<!-- copy the service's jar file from target into the root directory of the image -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>$project.build.directory</directory>
<include>$project.build.finalName.jar</include>
</resource>
</resources>
</configuration>
</plugin>
除了可以在您的项目中正确构建它之外,还可以将图像直接推送到 docker 注册表:
mvn ... docker:build -DpushImageTags -DdockerImageTag=latest -DdockerImageTag=tag
【讨论】:
以上是关于从 Spring Boot Jar 构建 Docker 映像的主要内容,如果未能解决你的问题,请参考以下文章
Gradle 如何配置构建文件以从同一项目创建 Spring boot jar 和 spring web-mvc war
如何在 IntelliJ IDEA 中为 Spring Boot 项目构建 jar 工件
了解 STS:Spring Boot 应用程序在 STS 中运行良好,但使用 gradle 构建 jar 时,构建失败