容器镜像
Spring Boot 应用程序可以通过 使用 Dockerfiles 或者 使用 Cloud Native Buildpacks 进行容器化,以创建可以在任何地方运行的优化 Docker 兼容容器镜像。
章节摘要
📄️ 高效的容器镜像
可以轻松地将 Spring Boot uber jar 打包为 Docker 镜像。然而,直接将 uber jar 复制并运行在 Docker 镜像中存在各种缺点。在不解压的情况下运行 uber jar 时,总是会有一定的开销,而在容器化环境中,这种开销可能会更加明显。另一个问题是,将应用程序代码及其所有依赖项放在 Docker 镜像的一个层中并不是最优的。由于你可能比升级 Spring Boot 版本更频繁地重新编译代码,因此通常最好将内容稍微分开一些。如果将 jar 文件放在应用程序类之前的层中,Docker 通常只需要更改最底层的文件,并从缓存中获取其他层。
📄️ Dockerfile
虽然可以使用 Dockerfile 中的几行代码将 Spring Boot 的 uber jar 转换为 Docker 镜像,但使用分层功能将生成一个经过优化的镜像。当你创建一个包含分层索引文件的 jar 时,spring-boot-jarmode-tools jar 将作为依赖项添加到你的 jar 中。在类路径上有这个 jar 的情况下,你可以以一种特殊模式启动你的应用程序,这种模式允许引导代码运行与你的应用程序完全不同的内容,例如提取分层的操作。
📄️ 云原生构建包
Docker 镜像可以直接使用 Cloud Native Buildpacks 通过你的 Maven 或 Gradle 插件构建。如果你曾经使用过像 Cloud Foundry 或 Heroku 这样的应用平台,那么你可能已经使用过构建包。构建包是平台的一部分,它负责将你的应用程序转换为平台实际可以运行的内容。例如,Cloud Foundry 的 Java 构建包会注意到你正在推送一个 .jar 文件,并自动添加相关的 JRE。