【问题标题】:How to create muttilayer image using maven jib plugin如何使用 maven jib 插件创建 muttilayer 图像
【发布时间】:2021-01-24 04:28:32
【问题描述】:

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

【问题讨论】:

    标签: docker maven-jib


    【解决方案1】:

    (首先,Jib 1.0.0 太老了。截至目前,最新的是 2.6.0。)

    Jib 为您进行分层,创建优化的图像。这是使用 Jib 的要点之一:不考虑 Docker,而只专注于编写 Java 代码。 Jib 的使命是让几乎没有 Docker 知识的任何 Java 开发人员都能以优化的方式轻松地将他们的 Java 应用程序容器化。

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

    如果您仍然好奇并进一步了解这些,这里有一些参考资料:

    为了完成答案,Jib 有一个extension mechanism,您可以使用 repo 中的第一方 Layer-Filter 扩展进一步自定义层。但大多数人很少需要过滤扩展。


    最后,无需在下方添加&lt;tag&gt;latest&lt;/tag&gt;&lt;tags&gt; 代表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! -->
    

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 2020-08-31
      • 2020-01-11
      • 2021-03-21
      • 2020-07-26
      • 1970-01-01
      • 2019-06-30
      • 2020-07-06
      • 2022-06-15
      相关资源
      最近更新 更多