Springboot项目集成Maven-goole-jib插件实现镜像打包

google-jib是什么

       jib是谷歌公司推出的开源 Java 镜像构建工具,它可以将一个 Java 应用构建成 OCI 镜像或者是 Docker 镜像,是一个快速docker镜像构建工具,它可以配置在maven插件中,不需要编写 Dockerfile 或本机安装docker程序。它只将发生变更的层推送到容器镜像服务器大大节约了构建时间。

jib插件标准的构建命令

mvn compile jib:buildTar     :将镜像生成tar文件,保存在项目的target目录下,在任何docker环境执行 docker load --input xxx.tar即可导入到本地镜像仓库
mvn compile jib:dockerBuild  :将镜像存入当前镜像仓库,该仓库是当前docker客户端可以连接的docker daemon,一般是指本地镜像仓库
mvn compile jib:build        :将镜像推送到远程仓库,仓库位置与镜像名字的前缀有关,一般是hub.docker.com或者阿里云镜像仓库,使用该参数时需要提前登录成功

pom配置

<!-- 使用jib插件直接将应用打包为一个Docker镜像 mvn compile jib:dockerBuild -->
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>1.8.0</version>
                <configuration>
                    <from><!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字-->
                        <!-- registry.cn-qingdao.aliyuncs.com/jibprd/jdk8:8.212 -->
                        <image>${docker.resources.repository}/${jib.namespace}/${jib.namespace.base}:${jib.namespace.base.version}</image>
                    </from>
                    <to><!-- to节点用于指定镜像名称和tag -->
                        <!-- registry.cn-beijing.aliyuncs.com/wxddong/test:0.0.1 -->
                        <image>${docker.repository}/${docker.image.prefix}/${project.artifactId}:${jib.docker.version}</image>
                    </to>
                    <!--container节点用来设置容器的属性,例如对外暴露的端口、jvm参数等-->
                    <container>
                        <!--jvm内存参数-->
                        <jvmFlags>
                            <jvmFlag>-Xms512m</jvmFlag>
                            <jvmFlag>-Xmx2g</jvmFlag>
                            <jvmFlag>-Djava.awt.headless=true</jvmFlag>
                            <jvmFlag>-Duser.timezone=PRC</jvmFlag>  <!-- 这里就是重点了 -->
                        </jvmFlags>
                        <!--要暴露的端口-->
                        <ports>
                            <port>8026</port>
                        </ports>
                        <!--使用该参数将镜像的创建时间与系统时间一致-->
                        <!--<useCurrentTimestamp>true</useCurrentTimestamp>-->
                        <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
                        <!--解决Could not find or load main class ${start-class} -->
                        <mainClass>com.bpo.BpoSignAppllication</mainClass>
                        <!-- 设置时区  -->
                        <environment>
                            <TZ>Asia/Shanghai</TZ>
                        </environment>
                    </container>
                    <allowInsecureRegistries>true</allowInsecureRegistries>
                </configuration>
                <!-- 解决maven工程是父子结构的  mvn compile-->
                <!-- 把 jib 绑定到 Maven 命令中-->
                <executions>
                    <execution>
                        <phase>install</phase> <!-- 表示执行mvn install命令的时候就会自动构建镜像了-->
                        <goals>
                            <goal>${jib.key}</goal><!-- 表示执行的jib命令  是dockerBuild 还是build-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
    <profiles>
        <profile>
            <id>local</id>
            <properties>
                <profiles.active>local</profiles.active>
                <jib.key>dockerBuild</jib.key> <!-- local环境下  dockerBuild 表示将镜像打包到本地docker环境-->
                <jib.skip>true</jib.skip> <!--local环境下  跳过jib打包镜像操作 -->
                <jib.docker.version>${project.version}</jib.docker.version>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>develop</id>
            <properties>
                <profiles.active>develop</profiles.active>
                <jib.key>build</jib.key>
                <jib.docker.version>${project.version}</jib.docker.version>
            </properties>

        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profiles.active>test</profiles.active>
                <jib.key>build</jib.key>
                <jib.docker.version>latest</jib.docker.version>
            </properties>
        </profile>
        <profile>
            <id>product</id>
            <properties>
                <profiles.active>product</profiles.active>
                <jib.key>build</jib.key><!-- 生产环境下  hubuild 表示将镜像打包到远程服务器 如阿里云-->
                <jib.docker.tag></jib.docker.tag>
                <jib.docker.version>${jib.docker.tag}.RELEASE</jib.docker.version>
            </properties>
        </profile>
    </profiles>

如果从from节点拉取基础镜像(如果镜像是私有的)  和  向to节点推送工程镜像 需要配置账号密码,可以配置在pom文件中 也可以配置在 setting文件中(安全,推荐)

pom文件配置不推荐

configuration>
    <from>
      <image>registry.cn-qingdao.aliyuncs.com/jibprd/jdk8:8.212</image>
      <auth>
        <username>my_username</username>
        <password>my_password</password>
      </auth>
    </from>
    <to>
      <image>registry.cn-beijing.aliyuncs.com/wxddong/test:0.0.1</image>
      <auth>
        <username>my_username</username>
        <password>my_password</password>
      </auth>
    </to>

setting.xml文件配置,推荐使用

  <!-- 账号管理  -->
  <servers>
    <server>  
      <id>releases</id>  
      <username>admin</username>  
      <password>********</password>  
    </server>  
    <server>  
      <id>snapshots</id>  
      <username>admin</username>  
      <password>*********</password>
    </server>

    <!-- docker 阿里云镜像账号管理  -->
    <server>
    	<id>registry.cn-qingdao.aliyuncs.com</id>
    	<username>my-username</username>
    	<password>******</password>
    </server>
      <server>
          <id>registry.cn-beijing.aliyuncs.com</id>
          <username>wxd_1024</username>
          <password>*******</password>
      </server>
  </servers>

dockerBuild创建的本地镜像

 多次构建出现了很多名为<none>,tag也是<none>的镜像  用 docker image prune,然后根据提示输入"y",镜像即可被清理

 

Build将镜像推送到远程仓库

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值