详解SpringBoot构建Docker镜像的3种方式

 更新时间:2020年06月18日 09:20:40   作者:iriniland  
这篇文章主要介绍了SpringBoot构建Docker镜像的3种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

本文将介绍3种技术,通过 Maven 把 SpringBoot 应用构建成 Docker 镜像。

(1)使用 spring-boot-maven-plugin 内置的 build-image.

(2)使用 Google 的 jib-maven-plugin。

(3)使用 dockerfle-maven-plugin。

Spring Boot 应用

为了方便实践,需要一个 Spring Boot 项目。

Demo 项目地址:

https://github.com/davelms/medium-articles/tree/master/spring-maven-docker

项目环境:

  • Java 11
  • Maven 3.6.3

使用 mvn package 可以正常构建 jar 包。

也可以正常运行:

java -jar target/demo-application-0.0.1-SNAPSHOT.jar

测试页面:

http://localhost:8080/hello

Demo 项目 OK 了,下面就开始实践构建镜像的3个方法。

1 Spring Boot maven 插件 的 build-image

Spring Boot 预装了自己的用于构建 Docker 镜像的插件,我们无需进行任何更改,因为它就在 pom.xml 中的 spring-boot-starter-parent。

你不需要写 Dockerfile,也不用操别的心,plugin 都帮你做了,例如 Spring 建议的安全、内存、性能等问题。

只需要简单的执行:

mvn spring-boot:build-image

执行完成后会看到成功提示信息:

运行容器测试:

docker run -p 9090:8080 -t demo-application:0.0.1-SNAPSHOT

注意:这里映射的本机端口是9090

2 jib-maven-plugin

Jib 是一个 Maven 和 Gradle 插件,用来创建 Docker 镜像。

这个插件有一个非常明显的特点:不需要本地安装 Docker,这对持续集成是非常方便的,Jib 可以直接推送到指定的 Docker 仓库。

Jib 同样也不需要写 Dockerfile。

使用起来也非常方便,不需要改代码,也可以不改动 pom.xml。

只需要执行:

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

mvn compile

是我们很熟悉的 maven 编译指令。

com.google.cloud.tools:jib-maven-plugin:2.3.0

指定了使用 Jib 插件

dockerBuild

是 Jib 插件的执行目标,dockerBuild 指定了 Jib 使用我们本地安装的 Docker。

执行完成后会看到成功提示信息:

启动容器测试:

docker run -p 9091:8080 -t demo-application:0.0.1-SNAPSHOT

注意:这里映射的本机端口是9091

3 dockerfile-maven-plugin

这个插件就需要我们写 Dockerfile 了,Domo 项目中已经准备好了。

Dockerfile 需要放在项目的根目录下,和 pom.xml 在一起。

然后,需要在 pom.xml 中添加一些配置,以便指定仓库、tag 标签,还有上面 Dockerfile 中定义的 JAR_FILE

执行 mvn package 时就会自动构建镜像了,执行完成后就会看到提示信息:

运行容器:

docker run -p 9092:8080 -t demo-application:0.0.1-SNAPSHOT

注意:映射的本机端口是 9092

小结

这3个里面最方便的是 SpringBoot 原生的方式,什么都不需要自己做,直接就能用。

最有特点的是 Jib,不需要你本地安装 Docker,可以直接推送到指定的仓库,而且使用起来也很简单。

看起来最麻烦的就是 dockerfile-maven-plugin 这个插件了,需要写 Dockerfile,还得添加配置,但是,实际上他是最好用的,因为前2个与网络环境有关系(你懂的),即使你配置了 Docker 镜像,也会报错,你可以试一下。

参考资料:

jib-maven-plugin

https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin

dockerfile-maven plugin

https://github.com/spotify/dockerfile-maven

本文翻译整理自:

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

到此这篇关于SpringBoot构建Docker镜像的3种方式的文章就介绍到这了,更多相关SpringBoot构建Docker镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Java单个TCP(Socket)连接发送多个文件的问题

    关于Java单个TCP(Socket)连接发送多个文件的问题

    这篇文章主要介绍了关于Java单个TCP(Socket)连接发送多个文件的问题,每次我只能使用一个 Socket 发送一个文件,没有办法做到连续发送文件,本文来解决这个问题,需要的朋友可以参考下
    2023-04-04
  • SpringBoot最常用的50个注解总结(全是干货!)

    SpringBoot最常用的50个注解总结(全是干货!)

    SpringBoot提供多种注解简化配置与启动流程,如@SpringBootAppication、@RestController、@RequestMapping等,这篇文章主要介绍了SpringBoot最常用的50个注解的相关资料,需要的朋友可以参考下
    2024-09-09
  • 详解SpringBoot中的参数校验(项目实战)

    详解SpringBoot中的参数校验(项目实战)

    这篇文章主要介绍了SpringBoot中的参数校验,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 使用TraceId在Spring Cloud中实现线上问题快速定位

    使用TraceId在Spring Cloud中实现线上问题快速定位

    在微服务架构中,服务间的互相调用使得问题定位变得复杂,在此背景下,TraceId为我们提供了一个在复杂环境中追踪请求路径和定位问题的工具,本文不仅介绍TraceId的基本概念,还将结合真实场景,为您展示如何在Spring Cloud中应用它
    2023-09-09
  • 详解Java类型擦除机制

    详解Java类型擦除机制

    Java泛型是JDK 5引入的一个特性,它允许我们定义类和接口的时候使用参数类型,泛型在集合框架中被广泛使用。这篇文章主要介绍了Java类型擦除机制,需要的朋友可以参考下
    2019-07-07
  • 了解java架构之微服务架构—雪崩效应

    了解java架构之微服务架构—雪崩效应

    这篇文章主要介绍了了解java架构之微服务架构—雪崩效应,微服务化产品线,每一个服务专心于自己的业务逻辑,并对外提供相应的接口,看上去似乎很明了,其实还有很多的东西需要考虑,,需要的朋友可以参考下
    2019-06-06
  • Java List的remove()方法陷阱以及性能优化

    Java List的remove()方法陷阱以及性能优化

    Java List在进行remove()方法是通常容易踩坑,本文就详细的介绍一下陷阱以及性能优化,感兴趣的可以了解一下
    2021-10-10
  • Java预防SQL注入的具体实践方法

    Java预防SQL注入的具体实践方法

    在 Java 中预防 SQL 注入的核心是 避免直接拼接 SQL 语句,并通过参数化查询、ORM 框架和严格的输入验证来实现安全防护,以下是具体实践方法,感兴趣的小伙伴跟着小编一起来看看吧
    2025-01-01
  • java实现ArrayList根据存储对象排序功能示例

    java实现ArrayList根据存储对象排序功能示例

    这篇文章主要介绍了java实现ArrayList根据存储对象排序功能,结合实例形式分析了java针对ArrayList的相关运算、排序操作技巧,需要的朋友可以参考下
    2018-01-01
  • Spring Boot集成kubernetes客户端实现API操作k8s集群的方案

    Spring Boot集成kubernetes客户端实现API操作k8s集群的方案

    Kubernetes是一个开源的容器编排平台,可以自动化在部署、管理和扩展容器化应用过程中涉及的许多手动操作,这篇文章主要介绍了Spring Boot集成kubernetes客户端实现API操作k8s集群,需要的朋友可以参考下
    2024-08-08

最新评论