Jib使用小结(Maven插件版)(2)

关于Jib插件

Jib是用于构建Docker镜像的Maven插件,其基本用法请参考《Docker与Jib(maven插件版)实战》一文;

全文概览

本文由以下几部分组成:

  1. 环境信息

  2. 源码下载

  3. 小结一:三种构建参数

  4. 小结二:镜像的时间问题

  5. 小结三:多次构建后,积累的无用镜像问题

  6. 小结四:提升构建速度

  7. 小结五:将jib与mvn构建的生命周期绑定

  8. 小结六:父子结构的maven工程如何构建

环境信息

  1. 操作系统:CentOS Linux release 7.6.1810

  2. docker:1.13.1

  3. jdk:1.8.0_191

  4. maven:3.6.0

  5. jib插件:1.3.0

源码下载

本次实战用到的源码是个简单的maven工程,可以从GitHub上下载本次实战的源码,地址和链接信息如下表所示:

| 名称 | 链接 | 备注 |

| :-- | :-- | :-- |

| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |

| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |

| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |

这个git项目中有多个文件夹,本章的源码在hellojib文件夹下,如下图红框所示:

在这里插入图片描述

小结一:三种构建参数

对于一个已在pom.xml中配置了jib插件的java工程来说,下面是个标准的构建命令:

mvn compile jib:dockerBuild

注意上面的dockerBuild参数,该参数的意思是将镜像存入当前的镜像仓库,这样的参数一共有三种,列表说明:

| 参数名 | 作用 |

| — | — |

| dockerBuild | 将镜像存入当前镜像仓库,该仓库是当前docker客户端可以连接的docker daemon,一般是指本地镜像仓库 |

| build | 将镜像推送到远程仓库,仓库位置与镜像名字的前缀有关,一般是hub.docker.com,使用该参数时需要提前登录成功 |

| buildTar | 将镜像生成tar文件,保存在项目的target目录下,在任何docker环境执行 docker load --input xxx.tar即可导入到本地镜像仓库 |

小结二:镜像的时间问题

在使用命令mvn compile jib:dockerBuild构建本地镜像时,会遇到创建时间不准的问题:

如下所示,bolingcavalry/hellojib是刚刚使用jib插件构建的镜像,其生成时间(CREATED字段)显示的是49 years ago:

[root@maven hellojib]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

bolingcavalry/hellojib 0.0.1-SNAPSHOT ef96fdd4473a 49 years ago 505 MB

上面显示的镜像生成时间显然是不对的,改正此问题的方法是修改pom.xml,在jib插件的container节点内增加useCurrentTimestamp节点,内容是true,如下所示:

com.google.cloud.tools

jib-maven-plugin

1.3.0

openjdk:8u212-jdk-stretch

bolingcavalry/hellojib:${project.version}

-Xms4g

-Xmx4g

8080

true

修改保存后再次构建,此时新的镜像的创建时间已经正确,显示15 seconds ago:

[root@maven hellojib]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

bolingcavalry/hellojib 0.0.1-SNAPSHOT ee5ba19a8016 23 seconds ago 505 MB

ef96fdd4473a 49 years ago 505 MB

小结三:多次构建后,积累的无用镜像

如下所示,构建多次后,本地会遗留多个名为,tag也是的镜像:

[root@maven hellojib]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

bolingcavalry/hellojib 0.0.1-SNAPSHOT a9fd91d8ad8c 17 seconds ago 505 MB

a0cadeb9febd About a minute ago 505 MB

ee5ba19a8016 2 minutes ago 505 MB

ef96fdd4473a 49 years ago 505 MB

这些都是上一次构建的结果,在经历了新一轮的构建后,其镜像名和tag被新镜像所有,所以自身只能显示名为,tag也是,清理这些镜像的命令是docker image prune,然后根据提示输入"y",镜像即可被清理:

[root@maven hellojib]# docker image prune

WARNING! This will remove all dangling images.

Are you sure you want to continue? [y/N] y

Deleted Images:

deleted: sha256:7aa104e20b8a08bac3255f2627ac90f10021c6630370ce7a84ba33f89404b153

deleted: sha256:7dd7376ae00c2df0411bac1eded4b3c79dd1528f5711057fe11a4f4121504486

deleted: sha256:e71ced47e80a7fccfea1710f1e5a257d4e16fc3e96b05616007e15829e71a7b2

deleted: sha256:55bed58453479c2accfc08fabc929aece7d324af0df94335dd46333db9da1d23

deleted: sha256:ef96fdd4473a7ca9d39a50e0feae50131de083cee4f11060ad8bee1bc853b2b5

Total reclaimed space: 0 B

[root@maven hellojib]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

bolingcavalry/hellojib 0.0.1-SNAPSHOT 3afd4165b6b6 About a minute ago 505 MB

小结四:提升构建速度

在使用命令mvn compile jib:dockerBuild构建本地镜像时,每次构建的过程中都会提示以下信息:

[INFO] Containerizing application to Docker daemon as bolingcavalry/hellojib:0.0.1-SNAPSHOT…

[INFO] The base image requires auth. Trying again for openjdk:8-jdk-stretch…

[INFO] Executing tasks:

[INFO] [========= ] 30.0% complete

[INFO] > pulling base image manifest

每次构建都会显示上面的内容,也就是说每次都去远程拉取base镜像的manifest(pulling base image manifest),这部分时间导致整体构架时间变长,以下是构建结果,可见用了10秒:

[INFO] Built image to Docker daemon as bolingcavalry/hellojib:0.0.1-SNAPSHOT

[INFO] Executing tasks:

[INFO] [==============================] 100.0% complete

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 10.722 s

[INFO] Finished at: 2019-09-01T08:55:09+08:00

[INFO] ------------------------------------------------------------------------

首先想到的是执行命令docker pull openjdk:8-jdk-stretch将base镜像下载到本地仓库,再尝试构建,遗憾的是jib依旧会远程获取base镜像的manifest,还是很慢;

如果能避免远程拉取base镜像的manifest,镜像构建速度应该会快一些;基于此推论,优化构建速度的步骤如下:

  1. 在本机创建registry(docker镜像仓库服务);

  2. 将base镜像openjdk:8-jdk-stretch放入本机registry;

  3. 修改pom.xml中base镜像的配置,改为本机registry的镜像;

  4. 如此一来,每次都会从本机registry取得base镜像的manifest,不走远程请求响应,构建时间会有提升;

接下按照上述步骤进行操作:

  1. 确认当前电脑的IP地址,我这里是192.168.121.131;

  2. 设置本地docker服务支持http:修改docker配置文件:/etc/docker/daemon.json,在json中增加内容"insecure-registries": [“192.168.121.131:5000”]

  3. 重启docker使配置生效:

systemctl restart docker

  1. 在本地创建一个镜像仓库服务:

docker run --name docker-registry -d -p 5000:5000 registry

  1. 查看本地镜像openjdk:8-jdk-stretch的ID为08ded5f856cc;

  2. 用tag命令将本地镜像openjdk:8-jdk-stretch改名,命令如下所示,"192.168.121.131"是当前电脑的IP地址:

docker tag 08ded5f856cc 192.168.121.131:5000/openjdk:8-jdk-stretch

  1. 再次查看镜像,发现多了个192.168.121.131:5000/openjdk:8u212-jdk-stretch:

[root@maven hellojib]# docker tag 08ded5f856cc 192.168.121.131:5000/openjdk:8-jdk-stretch

[root@maven hellojib]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

bolingcavalry/hellojib 0.0.1-SNAPSHOT 6601ef5a767d 3 minutes ago 505 MB

192.168.121.131:5000/openjdk 8-jdk-stretch 08ded5f856cc 2 weeks ago 488 MB

docker.io/openjdk 8-jdk-stretch 08ded5f856cc 2 weeks ago 488 MB

  1. 将192.168.121.131:5000/openjdk:8-jdk-stretch推送到远程仓库,命令如下所示,由于镜像名前缀是192.168.121.131:5000,镜像会被推送到我们刚刚创建的registry:

docker push 192.168.121.131:5000/openjdk:8-jdk-stretch

  1. 修改java工程的pom.xml,将base镜像由之前的openjdk:8-jdk-stretch改为192.168.121.131:5000/openjdk:8-jdk-stretch

  2. 修改java工程的pom.xml,增加allowInsecureRegistries,使jib插件支持http协议连接镜像仓库(安全起见,默认是关闭的),整个插件的配置信息如下:

org.springframework.boot

spring-boot-maven-plugin

com.google.cloud.tools

jib-maven-plugin

1.3.0

192.168.121.131:5000/openjdk:8-jdk-stretch

bolingcavalry/hellojib:${project.version}

-Xms4g

-Xmx4g

8080

true

true

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
年进入阿里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-C5r5WYhH-1715785026580)]

[外链图片转存中…(img-4vkOeJ4E-1715785026581)]

[外链图片转存中…(img-wJSzI2GX-1715785026581)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 22
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值