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

相关推荐
RainbowSea1 小时前
从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战
java·spring boot·后端
笨手笨脚の1 小时前
Spring Core常见错误及解决方案
java·后端·spring
奶油松果1 小时前
Springboot自动装配 - redis和redission
java·spring boot·redis
霍夫曼2 小时前
UTC时间与本地时间转换问题
java·linux·服务器·前端·javascript
VX:Fegn08952 小时前
计算机毕业设计|基于Java人力资源管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·课程设计
荔枝hu2 小时前
springboot和shiro组合引入SseEmitter的一些坑
java·spring boot·后端·sseeitter
老华带你飞2 小时前
健身房|基于springboot + vue健身房管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
JIngJaneIL3 小时前
基于Java酒店预约系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
曹牧3 小时前
Java:List<Map<String, String>>转换为字符串
java·开发语言·windows