Docker 如何使用maven jib插件创建muttilayer图像

Docker 如何使用maven jib插件创建muttilayer图像,docker,maven-jib,Docker,Maven Jib,我想用maven jib插件构建我的一个微服务的镜像,我知道docker镜像可以在多层架构中创建。我在Dockerfile中手动执行此操作。 但不确定如何通过maven jib插件实现这一点 下面是我用来构建映像的配置插件 请引导我创建多层图像 <profile> <id>jib</id> <build> <plugins>

我想用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>

三角帆
com.google.cloud.tools
jib maven插件
1.0.0
gcr.io/test/java:11
aa/${project.artifactId}
最新的
试验
7575
9000
9001
9002
-时区=格林尼治标准时间
-文件编码=utf-8
-XX:MaxRAMFraction=2
-XX:+UseG1GC
-XX:+UseStringDuplication
/tmp
包裹
dockerBuild
(首先,Jib 1.0.0非常古老。到目前为止,最新版本是2.6.0。)

Jib为您进行分层,创建优化的图像。这是使用Jib的要点之一:不要考虑Docker,而只关注编写Java代码。Jib的任务是使任何不了解Docker的Java开发人员能够以优化的方式轻松地将其Java应用程序封装起来

仅供参考,多层结构不是Jib的唯一优点;还有许多其他的优点,其中之一是很强的再现性。例如,在编写
Dockerfile
时,层的顺序很重要,因为您将使所有缓存的“上层”层无效,并且在“下层”层发生更改时必须重新生成它们。此外,使用Docker进行重建通常会创建新层(从而创建新映像),即使项目没有真正更改,也会导致构建时间增加,并在各地浪费存储和网络带宽

如果您仍感兴趣并了解更多信息,请参阅以下参考资料:

为了完成回答,Jib有一个,您可以使用repo中的第一方层过滤器扩展进一步自定义层。但对于大多数人来说,很少需要过滤扩展


最后,无需在下面添加
最新的
用于,并且
:latest
aa/${project.artifactId}
中暗示,正如
docker push aa/foo
暗示
aa/foo:latest
一样

 <image>aa/${project.artifactId}</image>
 <tags>
     <tag>latest</tag> <!-- This is unnecessary! -->
aa/${project.artifactId}
最新的