spring-boot - spring boot buildpack 总是从 git 下载最新的 packeto 镜像
问题描述
我使用 buildpack 使用以下命令从我的 Spring Boot 应用程序 2.5 版本创建了一个映像。
./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=bootiful/demo
但是,每次我重建图像时,如果 packeto buildpack(在 git 中)发生变化,它会下载整个 packeto 构建器,占用我磁盘的不必要空间。我怎样才能通过仅指定特定标签来避免这种情况,这样git中packeto的每次更新都不会被拉到我的图像中......
解决方案
但是,每次我重建图像时,如果 packeto buildpack(在 git 中)发生变化,它会下载整个 packeto 构建器,占用我磁盘的不必要空间。
这里有几点注意事项:
当 Docker 下载图像时,它很聪明。它只会下载已更改的图层。很难说每次下载会节省多少,但并非所有内容都会在构建器版本之间发生变化。
构建器由构建映像和该构建器中构建包的层组成。例如,如果某些构建包在构建器版本之间没有更改,则不需要再次下载所有构建包。
tl;博士 - 它可能没有你想象的那么糟糕。
每次都在获取新的构建器,因为理想情况下,您希望在构建新映像时拥有最新的软件。构建器包含构建时使用的库,以及构建包本身。
例如,如果 Bellsoft Liberica buildpack 使用最新的 OpenJDK 版本进行了更新,您将需要下载最新的构建器,以便在下次编译应用程序和构建映像时获得该更新。
您可以
docker system prune
快速清理未使用的容器和图像。这将减少更新后的磁盘使用量。
我如何通过仅指定特定标签来避免这种情况,以便 git 中的 packeto 的每次更新都不会拉入我的图像中。
你有几个选择:
您可以设置拉取策略。它默认为“始终”。你会想要“如果不存在”。如果它们不存在,这将指示 Spring Boot 构建工具下载构建/运行图像。如果它们存在于本地,则不会再次下载它们。
前任:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <pullPolicy>IF_NOT_PRESENT</pullPolicy> </image> </configuration> </plugin>
您可以指定特定的构建器映像。它类似于#1,只需设置构建器图像和标签。
前任:
<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 版本)构建。只是要记住的事情。
推荐阅读
- javascript - Open Weather Api(显示天气图标)
- java - 如何在动作控制器中默认扩展不可用的 Locale.Language?
- c# - Convert.ToString(str) 和 str?.ToString() 之间的区别 ?? “”
- bash - 将脚本分配给包装脚本的变量
- android - 如何在 QAndroidjniobject 中传递参数?
- postgresql - 将 SQL 转换为 Arel - 列 [...] 必须出现在 GROUP BY 子句中
- android - 从 SDK 库代码中确定应用程序的构建变体
- javascript - 数组通过javascript
- python-3.x - 使用python将列表中的值从数据框存储到数据库中
- javascript - 如何使用角度将列标题包装在 ag-grid 中