序
本文主要研究一下如何使用google的jib打包docker镜像
Jib 是谷歌最新开源的 Java 应用的 Docker 镜像生成工具,可以通过 Gradle 或 Maven 直接生成镜像并上传到仓库而不需要 Dockerfile 文件或者其他插件;Jib 支持将资源文件和类分层打包,可以大幅度提升生成镜像的速度
有一些其他的插件也可以通过 Docker 实现生成镜像,如com.palantir.docker等,但是都需要额外配置 Dockerfile, 如果应用仅需要通过 Dockerfile 构建镜像,建议使用 Jib 来提升构建和上传速度
maven
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>0.9.9</version>
</plugin>
配置
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>0.9.9</version>
<configuration>
<container>
<jvmFlags>
<jvmFlag>-Xms512m</jvmFlag>
</jvmFlags>
<ports>
<port>8080</port>
</ports>
<useCurrentTimestamp>true</useCurrentTimestamp>
</container>
<from>
<image>java:8u172-jre-alpine</image>
</from>
<to>
<image>jib-demo:${maven.build.timestamp}</image>
</to>
<allowInsecureRegistries>true</allowInsecureRegistries>
<extraDirectory>${project.basedir}/src/main/jib</extraDirectory>
</configuration>
</plugin>
</plugins>
</build>
这里指定base image为java:8u172-jre-alpine
同时指定生成的image名称为jib-demo:${maven.build.timestamp}
container标签可以指定相关参数,比如jvmFlags指定JVM参数,ports指定expose的端口号
extraDirectory用于指定要添加的目录,默认为${project.basedir}/src/main/jib,即该目录下的文件夹会在docker镜像里头同步创建,目录层级关系以jib下目录层级关系为准。比如该目录下有app/resources/demo.txt,则对应该镜像目录为/app/resources/demo.txt
打包
mvn compile jib:dockerBuild -X
使用jib:dockerBuild是在本地打包镜像,不push到远程,-X参数是显示debug信息
如果使用jib:build命令,则打包之后push到远程
输出日志实例:
[DEBUG] TIMING Building image to Docker daemon [DEBUG] RUNNING Building image to Docker daemon [INFO] Getting base image java:8u172-jre-alpine... [DEBUG] TIMING Pulling base image manifest [DEBUG] RUNNING Pulling base image manifest [DEBUG] TIMING Building application layers [DEBUG] RUNNING Building application layers [INFO] Building dependencies layer... [DEBUG] TIMING Building dependencies layer [DEBUG] RUNNING Building dependencies layer [INFO] Building resources layer... [DEBUG] TIMING Building resources layer [DEBUG] RUNNING Building resources layer [INFO] Building classes layer... [DEBUG] TIMING Building classes layer [DEBUG] RUNNING Building classes layer [INFO] Building extra files layer... [DEBUG] TIMING Building extra files layer [DEBUG] RUNNING Building extra files layer [DEBUG] TIMED Building application layers : 3.498 ms [DEBUG] Building application layers : 3.498 ms [DEBUG] Building extra files layer built sha256:0a9321c621ee2c138d9a93f4ba47f825e20dd7aca0e9206f30bf560122fdaa31 [DEBUG] Building resources layer built sha256:933116c8da4db70000355b750af2f3b5c4545e74db7b5eb0a5e37689ef86d44f [DEBUG] Building classes layer built sha256:a99dbde7d015ba3d15b9265ac38f6536d65b00dd2a864b7003a34742f483939b [DEBUG] TIMED Building extra files layer : 33.718 ms [DEBUG] TIMED Building classes layer : 33.901 ms [DEBUG] Building extra files layer : 33.718 ms [DEBUG] TIMED Building resources layer : 34.062 ms [DEBUG] Building resources layer : 34.062 ms [DEBUG] Building classes layer : 33.901 ms [DEBUG] Building dependencies layer built sha256:a19961ec08095eb70ca3a070945223dcf51500a255a745272276139bf0a29f4e [DEBUG] TIMED Building dependencies layer : 1047.83 ms [DEBUG] Building dependencies layer : 1047.83 ms [INFO] The base image requires auth. Trying again for java:8u172-jre-alpine... //...... [DEBUG] TIMED Pulling base image manifest : 8959.891 ms [DEBUG] Pulling base image manifest : 8959.891 ms [DEBUG] TIMING Setting up base image caching [DEBUG] RUNNING Setting up base image caching [DEBUG] TIMED Setting up base image caching : 0.824 ms [DEBUG] Setting up base image caching : 0.824 ms [DEBUG] TIMING Pulling base image layer sha256:500c0ac4cdc58aee9a008e70466eeec8a4b74b25c29d003764635d2fe1b42827 [DEBUG] RUNNING Pulling base image layer sha256:500c0ac4cdc58aee9a008e70466eeec8a4b74b25c29d003764635d2fe1b42827 [DEBUG] TIMING Pulling base image layer sha256:aa38cd8c77d7320c7489327775e074580db5f23467198aab3e79c7db5cdfbdca [DEBUG] TIMING Pulling base image layer sha256:cb56d62302ec31640b40ca15843e7af6be145966a1064c78ea7afd6f10ce49e6 [DEBUG] RUNNING Pulling base image layer sha256:cb56d62302ec31640b40ca15843e7af6be145966a1064c78ea7afd6f10ce49e6 [DEBUG] TIMING Pulling base image layer sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e28 [DEBUG] RUNNING Pulling base image layer sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e28 [DEBUG] RUNNING Pulling base image layer sha256:aa38cd8c77d7320c7489327775e074580db5f23467198aab3e79c7db5cdfbdca [DEBUG] TIMED Pulling base image layer sha256:500c0ac4cdc58aee9a008e70466eeec8a4b74b25c29d003764635d2fe1b42827 : 612.524 ms [DEBUG] Pulling base image layer sha256:500c0ac4cdc58aee9a008e70466eeec8a4b74b25c29d003764635d2fe1b42827 : 612.524 ms [DEBUG] TIMED Pulling base image layer sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e28 : 9985.702 ms [DEBUG] Pulling base image layer sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e28 : 9985.702 ms [DEBUG] TIMED Pulling base image layer sha256:aa38cd8c77d7320c7489327775e074580db5f23467198aab3e79c7db5cdfbdca : 27267.144 ms [DEBUG] Pulling base image layer sha256:aa38cd8c77d7320c7489327775e074580db5f23467198aab3e79c7db5cdfbdca : 27267.144 ms [DEBUG] TIMED Pulling base image layer sha256:cb56d62302ec31640b40ca15843e7af6be145966a1064c78ea7afd6f10ce49e6 : 54734.971 ms [DEBUG] Pulling base image layer sha256:cb56d62302ec31640b40ca15843e7af6be145966a1064c78ea7afd6f10ce49e6 : 54734.971 ms [DEBUG] TIMING Building container configuration [DEBUG] RUNNING Building container configuration [INFO] Finalizing... [DEBUG] TIMED Building container configuration : 0.462 ms [DEBUG] Building container configuration : 0.462 ms [INFO] Loading to Docker daemon... [DEBUG] TIMED Building image to Docker daemon : 65862.956 ms [DEBUG] Building image to Docker daemon : 65862.956 ms [INFO] [INFO] Container entrypoint set to [java, -Xms512m, -cp, /app/resources/:/app/classes/:/app/libs/*, com.example.JibDemoApplication] [INFO] [INFO] Built image to Docker daemon as jib-demo:20180826

