Docker与Jib(maven插件版)实战

一、jib是什么

Jib 是 Google 开发的 Java 容器镜像构建工具,支持 Maven 和 Gradle。

它最大特点是:

  • 不需要 Dockerfile
  • 不需要本地安装 Docker 守护进程(daemonless)
  • 构建速度快(它会将依赖/资源/类分层,增量构建超级快)
  • 镜像层次更合理(比常见手写 Dockerfile 更高效)

二、jib简单使用


1、配置文件

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bolingcavalry</groupId>
    <artifactId>hellojib</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hellojib</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <!--使用jib插件-->
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>1.3.0</version>
                <configuration>
                    <!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字-->
                    <from>
                        <image>
                            registry.cn-hangzhou.aliyuncs.com/xxx/xxx:openjdk-8-jdk-alpine
                        </image>
                    </from>
                    <to>
                        <!--镜像名称和tag,使用了mvn内置变量${project.version},表示当前工程的version-->
                        <image>zhk/hellojib:${project.version}</image>
                    </to>
                    <allowInsecureRegistries>true</allowInsecureRegistries>
<!--                    可以下的写法-->
<!--                    <to>-->
<!--                        <image>${docker.register.url}/${project.artifactId}:${project.version}</image>-->
<!--                        <tags>-->
<!--                            &lt;!&ndash;版本号&ndash;&gt;-->
<!--                            <tag>${project.version}</tag>-->
<!--                        </tags>-->
<!--                        <auth>-->
<!--                            &lt;!&ndash;在docker-hub或者阿里云上的账号和密码&ndash;&gt;-->
<!--                            <username>${docker.register.username}</username>-->
<!--                            <password>${docker.register.password}</password>-->
<!--                        </auth>-->
<!--                    </to>-->

                    <!--容器相关的属性-->
                    <container>
<!--                        执行替换运行的命令-->
                        <!-- <mainClass>${scripts_bootMain}</mainClass>-->
<!--                        <entrypoint>-->
<!--                            <shell>sh</shell>        &lt;!&ndash; 使用 shell 来执行命令 &ndash;&gt;-->
<!--                            <option>-c</option>      &lt;!&ndash; sh -c 参数,后面跟字符串命令 &ndash;&gt;-->
<!--                            <arg>-->
<!--                                java ${JAVA_OPTS} -cp /app/resources/:/app/classes/:/app/libs/* ${scripts_bootMain}-->
<!--                            </arg>-->
<!--                        </entrypoint>-->
                        <!--jvm内存参数-->
                        <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
                        <jvmFlags>
                            <jvmFlag>-Xms4g</jvmFlag>
                            <jvmFlag>-Xmx4g</jvmFlag>
                        </jvmFlags>
                        <!--要暴露的端口-->
                        <ports>
                            <port>8080</port>
                        </ports>
                    </container>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2、启动配置

打包到本地镜像仓库

shell 复制代码
clean package jib:dockerBuild

打包推送到远程服务器

shell 复制代码
-Djib.disableUpdateChecks=true
-Ddocker.register.url=xxxx   #镜像地址
-Ddocker.register.username=xxx
-Ddocker.register.password=xxx
shell 复制代码
clean package jib:build 

三、注意

1、清除无用镜像

shell 复制代码
docker image prune

2、加速构建速度

可以看参考地址第二个中的小结四:提升构建速度

3、maven编译构建不需要创建脚本

4、父子节点构建

四、参考地址

https://blog.csdn.net/boling_cavalry/article/details/94355659

https://blog.csdn.net/boling_cavalry/article/details/100179709

相关推荐
九转成圣24 分钟前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
直奔標竿1 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
金銀銅鐵1 小时前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端
野生技术架构师3 小时前
金三银四面试总结篇,汇总 Java 面试突击班后的面试小册
java·面试·职场和发展
小袁拒绝摆烂4 小时前
多表关联大平层转JSON树形结构
java·json
ja哇4 小时前
大厂面试高频八股
java·面试·职场和发展
yoyo_zzm5 小时前
Laravel6.x新特性全解析
java·spring boot·后端
Nick_zcy5 小时前
小说在线阅读网站和小说管理系统 · 功能全解析
java·后端·python·springboot·ruoyi
源码宝5 小时前
基于 SpringBoot + Vue 的医院随访系统:技术架构与功能实现
java·vue.js·spring boot·架构·源码·随访系统·随访管理