【问题标题】:spring boot buildpack always downloads latest packeto images from gitspring boot buildpack 总是从 git 下载最新的 packeto 镜像
【发布时间】:2021-06-17 17:07:46
【问题描述】:

我使用 buildpack 使用以下命令从我的 Spring Boot 应用程序 2.5 版本创建了一个映像。

./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=bootiful/demo

但是,每次我重建图像时,如果 packeto buildpack(在 git 中)发生变化,它会下载整个 packeto 构建器,占用我磁盘的不必要空间。我怎样才能通过只指定特定的标签来避免这种情况,这样 git 中的 packeto 的每次更新都不会被拉到我的图像中......

【问题讨论】:

    标签: spring-boot paketo


    【解决方案1】:

    但是,每次我重建映像时,如果 packeto buildpack(在 git 中)发生变化,它会下载整个 packeto 构建器,占用我磁盘的不必要空间。

    这里有几点说明:

    1. 当 Docker 下载图像时,它很聪明。它只会下载已更改的图层。很难说每次下载会节省多少,但并非所有内容都会在构建器版本之间发生变化。

      构建器由构建映像和该构建器中构建包的层组成。例如,如果某些构建包在构建器版本之间没有更改,则无需再次下载所有构建包。

      tl;dr - 它可能没有你想象的那么糟糕。

    2. 每次都在获取新的构建器,因为理想情况下,您希望在构建新映像时拥有最新的软件。构建器包含构建时使用的库,以及构建包本身。

      例如,如果 Bellsoft Liberica buildpack 使用最新的 OpenJDK 版本进行了更新,您将需要下载最新的构建器,以便在下次编译您的应用并构建映像时获得该更新。

    3. 您可以docker system prune 快速清理未使用的容器和图像。这将减少更新后的磁盘使用量。

    如何通过仅指定特定标签来避免这种情况,以便 git 中的 packeto 的每次更新都不会拉入我的图像中。

    你有几个选择:

    1. 您可以设置拉取策略。它默认为“始终”。你会想要“如果不存在”。如果它们不存在,这将指示 Spring Boot 构建工具下载构建/运行图像。如果它们在本地存在,则不会再次下载。

      例如:

              <plugin>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
                  <configuration>
                      <image>
                          <pullPolicy>IF_NOT_PRESENT</pullPolicy>
                      </image>
                  </configuration>
              </plugin>
      
    2. 您可以指定特定的构建器图像。和#1类似,只是设置了builder image & tag。

      例如:

              <plugin>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
                  <configuration>
                      <image>
                          <builder>paketobuildpacks/builder:0.1.115-base</builder>
                      </image>
                  </configuration>
              </plugin>
      

    有关这两个方面的参考,请参阅此处的设置:https://docs.spring.io/spring-boot/docs/2.5.1/maven-plugin/reference/htmlsingle/#build-image

    注意:您要小心使用这两个选项,因为它们可能会导致您使用较旧的构建器映像构建映像,从而使用较旧的构建包。它们不会自动更新。这可能会使您的图像基于较旧的库或较旧的依赖项(如 JVM 版本)构建。只是需要记住的一点。

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 2017-06-07
      相关资源
      最近更新 更多