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",镜像即可被清理