这篇文章主要介绍了使用jib插件为Java应用构建镜像,要是用户本地没安装docker,可以使用jib制作出带有镜像的tar文件,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
简介
Java应用开发的容器化,需要制作docker镜像。要是用户本地没安装docker,可以使用jib制作出带有镜像的tar文件。
Jib提供了四种使用方式:
- Maven插件:jib-maven-plugin
- Gradle插件:jib-gradle-plugin
- Java库: Jlib Core
- Jib CLI
jib构建工具主要包含了四个强大的功能。
- build :提供了创建镜像并推送到远程仓库功能。
- buildTar :提供创建一个包含镜像的tar文件功能。
- dockerBuild:提供创建docker镜像到本地功能。
- exportDocker:rContext提供创建dockerfile功能。
当编译构建是在没有docker环境的情况下构建,使用build命令和dockerBuild命令并不能制作出镜像,只能使用buildTar命令制作出一个包含镜像的tar文件。
使用Maven插件将Java应用构建为docker镜像
想了解更多参数,阅读官方文档。https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin
1.修改需要制作镜像的项目代码:找到pom文件声明jib插件,
pom.xml文件中声明Jib插件:
<!--使用jib插件-->
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.3.0</version>
<configuration>
<!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字-->
<from>
<!--使用openjdk官方镜像,tag是8-jdk-stretch,表示镜像的操作系统是debian9,装好了jdk8-->
<image>openjdk:8-jdk-stretch</image>
</from>
<to>
<!--镜像名称和tag,使用了mvn内置变量${project.version},表示当前工程的version-->
<image>lendea/hellojib:${project.version}</image>
</to>
<!--容器相关的属性-->
<container>
<!--jvm内存参数-->
<jvmFlags>
<jvmFlag>-Xms256m</jvmFlag>
<jvmFlag>-Xmx256m</jvmFlag>
</jvmFlags>
<!--要暴露的端口-->
<ports>
<port>8081</port>
</ports>
</container>
</configuration>
</plugin>
- from标签:设置基础镜像,相当于dockerfile中的FROM关键字,这里推荐使用SWR中的镜像,构建时下载速度快并且稳定。
- to标签:设置制作出来的镜像的镜像名称和tag。
- container标签:设置容器的相关属性,jvm内存参数,端口等。
2.创建构建任务并执行
# -Dmaven.test.skip=true: 跳过单元测试
# -U: 每次构建检查以来更新,可避免缓存中快照版本依赖不更新问题,但会牺牲部分性能
# -e -X: 打印调试信息,定位疑难构建问题时建议使用此参数构建
# -B: 以batch模式运行,可避免日志打印出现ArrayIndexOutOfBoundsException异常
mvn compile jib:buildTar -Dmaven.test.skip=true -U -e -X -B
在java项目的target目录下,可以看到生成的tar镜像。
3.使用tar镜像
执行docker load -i xxx.tar
命令将tar文件的镜像加载到本地镜像仓库,再使用docker run --rm -p 8081:8081 lendea/hellojib:0.0.1
等命令启动容器来测试功能。
到此这篇关于使用jib插件为Java应用构建镜像的文章就介绍到这了,更多相关jib插件构建镜像内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:使用jib插件为Java应用构建镜像的方法
基础教程推荐
- java实现多人聊天系统 2023-05-19
- Java文件管理操作的知识点整理 2023-05-19
- Java实现查找文件和替换文件内容 2023-04-06
- Java实现线程插队的示例代码 2022-09-03
- java基础知识之FileInputStream流的使用 2023-08-11
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- Java并发编程进阶之线程控制篇 2023-03-07
- springboot自定义starter方法及注解实例 2023-03-31
- Java数据结构之对象比较详解 2023-03-07
- JDK数组阻塞队列源码深入分析总结 2023-04-18