首页
Preview

使用Maven和Spring Boot构建Docker镜像

本文将介绍三种构建 Java 应用程序 Docker 镜像的方法:

  • 使用集成的 Spring Boot build-image 目标。
  • 使用来自 Google 的 jib-maven-plugin
  • 使用来自 Spotify 的 dockerfile-maven-plugin

接下来开始我们的教程。

Spring Boot 应用程序

为了演示,我们将使用 Spring Boot 快速入门 中详细介绍的 Hello World 示例。你也可以使用自己的应用程序或者使用为本文准备的源代码,从 GitHub 上进行克隆。

本文使用的是 Java 11 和 Maven 3.6.3。使用 mvn package 进行构建,并使用 java -jar target/demo-application-0.0.1-SNAPSHOT.jar 运行应用程序(如果你喜欢,也可以使用 mvn spring-boot:run)。

假设一切顺利,你应该能够在浏览器中访问 localhost:8080/hello,看到正在运行的 Spring Boot 应用程序。

现在,让我们通过几个选项来将其转换为 Docker 镜像。

#1 使用集成的 Spring Boot build-image 目标

Spring Boot 自带用于构建 Docker 镜像的插件,无需进行任何更改,因为它可通过 pom.xml 中包含的标准 spring-boot-starter-parent 获得。

作为额外的好处,你也不需要编写 Dockerfile,插件会处理 Spring 推荐的安全性、内存和性能优化。但是要注意,如果源代码仓库中有 Dockerfile,则会被忽略。

因此,不需要进行任何代码更改,只需运行以下命令:

mvn spring-boot:build-image

完成后,你应该会看到一条消息,指示已成功创建 Docker 镜像。

默认情况下,你可以看到 Spring Boot 使用 artifactId 作为名称,使用 version 作为标签创建镜像。如果你想更改这些详细信息,可以在命令行上提供一个额外的参数,如 -Dspring-boot.build-image.imageName=myrepo/myimage

构建完成后,我们可以运行新的 Docker 镜像。docker run -p 9090:8080 -t demo-application:0.0.1-SNAPSHOT(注意端口更改为 9090)。

#2 使用来自 Google 的 jib-maven-plugin

Jib 是用于创建 Java 应用程序 Docker 镜像的 Maven 和 Gradle 插件。

一个好处是它不需要在本地安装 Docker*,这对于持续集成/构建服务器非常有用——jib-maven-plugin 将直接构建并推送镜像到所选择的 Docker 注册表中。

(* 尽管如果你已经安装了 Docker,也可以使用它)。

就像本地的 Spring Boot 示例一样,它也不需要你编写 Dockerfile。事实上,除了最初的类和 pom.xml 文件之外,我们还没有进行任何代码更改。

由于本教程中我们不会将其推送到 Docker 注册表中,因此我们将告诉 Jib 使用我们的本地 Docker 安装,使用 dockerBuild 目标。

要构建 Docker 镜像,请运行以下命令:

mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild

完成后,你应该会看到一条消息,指示已成功创建 Docker 镜像。

构建完成后,我们可以运行新的 Docker 镜像。docker run -p 9091:8080 -t demo-application:0.0.1-SNAPSHOT(注意端口更改为 9091)。

#3 使用来自 Spotify 的 dockerfile-maven-plugin

本文最后一个步骤是使用来自 Spotify 的 dockerfile-maven-plugin 来构建 Docker 镜像。

这是我们三种方法中的第一个,需要我们有一个 Dockerfile——为了演示,我们已经在 GitHub 仓库 中准备了一个 Dockerfile。将 Dockerfile 添加到与 pom.xml 同级的根目录中。

接下来,我们将在 pom.xml 中添加一些配置,具体包括 repository tag,以及一个用于 JAR_FILE 的参数,正如我们在上面的 Dockerfile 中引用的那样。

运行标准命令 mvn package,完成后,你应该会看到一条消息,指示已成功创建 Docker 镜像。

构建完成后,我们可以运行新的 Docker 镜像。docker run -p 9092:8080 -t demo-application:0.0.1-SNAPSHOT(注意端口更改为 9092)。## 结论

在本教程中,我们介绍了使用 Maven 插件为 Spring Boot 应用程序构建 Docker 镜像的三种技术。

我们介绍了使用 Spring Boot 本地构建和使用来自 Google 的 Jib 插件,这两种方法都不需要创建 Dockerfile。最后,我们简要介绍了由 Spotify 编写的 Dockerfile-maven 插件,该插件现在已经成熟和稳定,但不再被积极增强。

参考资料

有关所有配置选项,请查看以下参考资料。

作者的话

感谢你阅读本文,希望你觉得本文有用,并期待你的评论和反馈。

源代码可从 GitHub 获取。

译自:https://medium.com/swlh/build-a-docker-image-using-maven-and-spring-boot-58147045a400

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
阿波
The minute I see you, I want your clothes gone!

评论(0)

添加评论