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

相关推荐
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
于慨1 天前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg3213211 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川1 天前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
殷紫川1 天前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java
eddieHoo1 天前
查看 Tomcat 的堆内存参数
java·tomcat
那个失眠的夜1 天前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis