如何使用 Maven jib 插件创建多层图像
How to create muttilayer image using maven jib plugin
我想使用 maven jib 插件构建我的微服务之一的映像,据我所知,docker 可以在多层架构中创建映像。我在 Dockerfile 中手动执行此操作。
但不确定如何使用 maven jib 插件来实现
以下是我用来构建图像的配置插件。
请指导我创建多层图像。
<profile>
<id>jib</id>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<from>
<image>gcr.io/test/java:11</image>
</from>
<to>
<image>aa/${project.artifactId}</image>
<tags>
<tag>latest</tag>
<!--suppress MavenModelInspection -->
<tag>Test</tag>
</tags>
</to>
<container>
<ports>
<port>7575</port>
<port>9000</port>
<port>9001</port>
<port>9002</port>
</ports>
<jvmFlags>
<jvmFlag>-Duser.timezone=GMT</jvmFlag>
<jvmFlag>-Dfile.encoding=utf-8</jvmFlag>
<jvmFlag>-XX:MaxRAMFraction=2</jvmFlag>
<jvmFlag>-XX:+UseG1GC</jvmFlag>
<jvmFlag>-XX:+UseStringDeduplication</jvmFlag>
</jvmFlags>
<volumes>
<volume>/tmp</volume>
</volumes>
</container>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>dockerBuild</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
(首先,Jib 1.0.0太老了,目前最新的是2.6.0。)
Jib 为您分层,创建优化图像。这就是使用 Jib 的要点之一:不考虑 Docker 而是专注于编写 Java 代码。 Jib 的使命是让任何 Java 几乎没有 Docker 知识的开发人员能够以优化的方式轻松地将他们的 Java 应用程序容器化。
仅供参考,multi-layering 并不是 Jib 的唯一优势;还有许多其他优点,其中之一是可重复性强。例如,当写 Dockerfile
时,层的顺序很重要,因为您将使所有缓存的“上层”层无效,并且如果“下层”层发生变化则必须重建它们。此外,使用 Docker 进行重建通常会导致创建新层(因此会产生新图像),即使您的项目并没有真正改变,也会导致构建时间增加并到处浪费存储和网络带宽。
如果你对这些仍然好奇并想要了解更多,这里有一些参考资料:
- Jib FAQ: How are Jib applications layered?
- https://github.com/GoogleContainerTools/jib/issues/2534#issuecomment-649208526
为了完成答案,Jib 有一个 extension mechanism,您可以使用存储库中的 first-party Layer-Filter 扩展进一步自定义图层。但大多数人很少需要过滤扩展。
最后,下面不用加<tag>latest</tag>
了。 <tags>
代表 additional tags,:latest
代表 aa/${project.artifactId}
,正如 docker push aa/foo
代表 aa/foo:latest
.
<image>aa/${project.artifactId}</image>
<tags>
<tag>latest</tag> <!-- This is unnecessary! -->
我想使用 maven jib 插件构建我的微服务之一的映像,据我所知,docker 可以在多层架构中创建映像。我在 Dockerfile 中手动执行此操作。 但不确定如何使用 maven jib 插件来实现 以下是我用来构建图像的配置插件。
请指导我创建多层图像。
<profile>
<id>jib</id>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<from>
<image>gcr.io/test/java:11</image>
</from>
<to>
<image>aa/${project.artifactId}</image>
<tags>
<tag>latest</tag>
<!--suppress MavenModelInspection -->
<tag>Test</tag>
</tags>
</to>
<container>
<ports>
<port>7575</port>
<port>9000</port>
<port>9001</port>
<port>9002</port>
</ports>
<jvmFlags>
<jvmFlag>-Duser.timezone=GMT</jvmFlag>
<jvmFlag>-Dfile.encoding=utf-8</jvmFlag>
<jvmFlag>-XX:MaxRAMFraction=2</jvmFlag>
<jvmFlag>-XX:+UseG1GC</jvmFlag>
<jvmFlag>-XX:+UseStringDeduplication</jvmFlag>
</jvmFlags>
<volumes>
<volume>/tmp</volume>
</volumes>
</container>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>dockerBuild</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
(首先,Jib 1.0.0太老了,目前最新的是2.6.0。)
Jib 为您分层,创建优化图像。这就是使用 Jib 的要点之一:不考虑 Docker 而是专注于编写 Java 代码。 Jib 的使命是让任何 Java 几乎没有 Docker 知识的开发人员能够以优化的方式轻松地将他们的 Java 应用程序容器化。
仅供参考,multi-layering 并不是 Jib 的唯一优势;还有许多其他优点,其中之一是可重复性强。例如,当写 Dockerfile
时,层的顺序很重要,因为您将使所有缓存的“上层”层无效,并且如果“下层”层发生变化则必须重建它们。此外,使用 Docker 进行重建通常会导致创建新层(因此会产生新图像),即使您的项目并没有真正改变,也会导致构建时间增加并到处浪费存储和网络带宽。
如果你对这些仍然好奇并想要了解更多,这里有一些参考资料:
- Jib FAQ: How are Jib applications layered?
- https://github.com/GoogleContainerTools/jib/issues/2534#issuecomment-649208526
为了完成答案,Jib 有一个 extension mechanism,您可以使用存储库中的 first-party Layer-Filter 扩展进一步自定义图层。但大多数人很少需要过滤扩展。
最后,下面不用加<tag>latest</tag>
了。 <tags>
代表 additional tags,:latest
代表 aa/${project.artifactId}
,正如 docker push aa/foo
代表 aa/foo:latest
.
<image>aa/${project.artifactId}</image>
<tags>
<tag>latest</tag> <!-- This is unnecessary! -->