本文将介绍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个方法。

一、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

二、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

三、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 镜像,也会报错,你可以试一下。

写在最后

欢迎大家关注我的公众号【风平浪静如码】,海量Java相关文章,学习资料都会在里面更新,整理的资料也会放在里面。

觉得写的还不错的就点个赞,加个关注呗!点关注,不迷路,持续更新!!!5

SpringBoot 构建 Docker 镜像的最佳 3 种方式的更多相关文章

  1. SpringBoot 构建 Docker 镜像的 3 种方式

    本文将介绍3种技术,通过 Maven 把 SpringBoot 应用构建成 Docker 镜像. (1)使用 spring-boot-maven-plugin 内置的 build-image. (2) ...

  2. Java SpringBoot 项目构建 Docker 镜像调优实践

    PS:已经在生产实践中验证,解决在生产环境下,网速带宽小,每次推拉镜像影响线上服务问题,按本文方式构建镜像,除了第一次拉取.推送.构建镜像慢,第二.三-次都是几百K大小传输,速度非常快,构建.打包.推 ...

  3. 如何构建Docker镜像

    构建Docker 镜像有如下两种方法: (一)使用docker commit命令.(二)使用docker build命令和 Dockerfile 文件.在这里并不推荐使用docker commit来构 ...

  4. 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式

    前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少了解一些.前段时间研究OpenShift(paas的一种),发现了另外一种构建Docker镜像的方式:S2I ...

  5. [转] 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式

    原文地址:https://www.cnblogs.com/tianshifu/p/8127837.html 前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少 ...

  6. 多阶段构建Docker镜像

    在Docker 17.05及更高的版本中支持支持一种全新的构建镜像模式:多阶段构建: 多阶段构建Docker镜像的最大好处是使构建出来的镜像变得更小: 目前常见的两个构建镜像的方式为: 1.直接使用某 ...

  7. Docker:使用Jenkins构建Docker镜像

    Docker  彭东稳  1年前 (2016-12-27)  10709次浏览  已收录  0个评论 一.介绍Jenkins Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从 ...

  8. 打包应用和构建Docker镜像(docker在windows上)

    在构建Docker时编译应用 一般有两种方法在构建镜像时进行打包应用.第一种方法就是使用基本的镜像,该镜像包括应用平台和构建工具,因此在Dockerfile中,复制源代码到镜像中并在构建镜像时编译ap ...

  9. 使用docker Maven插件本地构建docker镜像并发布到远程服务器

    1.登录网站https://start.spring.io/,生成一个基本的SpringBoot应用. 2.将应用导入Eclipse IDE并创建Application类.目录结构如下: Applic ...

随机推荐

  1. laravel或者lumen门面和服务提供者使用

      关于laravel门面和服务提供者使用的一点见解,门面之词,不足之处,还请多多指教.    在laravel中,我们可能需要用到自己添加的类时,可以建立一个文件夹专门存放类文件,也可以使用lara ...

  2. <audio> 标签

    <audio> 标签定义声音,比如音乐或其他音频流. 实例 一段简单的 HTML 5 音频:

  3. Helium文档12-WebUI自动化-go_to在当前的Web浏览器窗口中打开指定的URL

    前言 go_to在当前的Web浏览器窗口中打开指定的URL 入参介绍 url def go_to(url): """ :param url: URL to open. : ...

  4. 一个例子"入坑"布谷鸟算法(附完整py代码)

    布谷鸟是比较新的启发式最优化算法,但其与传统的遗传算法,退火算法等相比,被证明收敛速度更快,计算效率更高! 文章目录 本文诞生的缘由 布谷鸟算法思想简介 更新位置的方式 莱维飞行 局部随机行走 抛出个 ...

  5. git学习(八) git stash操作

    git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容.git stash作用的范围包括工作区和暂存区中的内容,没有提交的内容都会 ...

  6. 【手摸手,带你搭建前后端分离商城系统】03 整合Spring Security token 实现方案,完成主业务登录

    [手摸手,带你搭建前后端分离商城系统]03 整合Spring Security token 实现方案,完成主业务登录 上节里面,我们已经将基本的前端 VUE + Element UI 整合到了一起.并 ...

  7. Python包安装及使用指南

    这里长期更新一些Python第三方包的安装教程,以及使用教程... Pygame 安装教程: Windows: 首先,查看已安装的Python版本:访问https://www.lfd.uci.edu/ ...

  8. 团体程序设计天梯赛-练习集 L1-007 念数字

    - - ->博主推荐,学生党.程序员必备,点击查看- - - >>>>> 热门文章推荐 以下50道算法编程题访问量较大,包含常用语法,数据结构,解题思路等等,作为C ...

  9. 通过maven创建springboot项目

    1,idea选择创建一个maven项目 2,pom.xml <dependencies> <dependency> <groupId>org.springframe ...

  10. Luogu P5307 [COCI2019] Mobitel

    题意 有一个 \(r\times c\) 的矩阵 \(a\),矩阵的每个位置都有一个正整数,求从左上角走到右下角并且满足路径上数字乘积之和大于 \(n\) 的方案数. \(\texttt{Data R ...