你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注意
基本计划、标准计划和企业计划于 2025 年 3 月 17 日进入停用期。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
本文适用于:✅基本计划/标准计划 ✅ 企业计划
本文介绍如何使用 Paketo Buildpacks 生成容器映像。
Azure Spring Apps 服务支持从源代码生成映像,而无需使用 Dockerfile。 它不限于 Java 应用程序,而是扩展到了其他编程语言,甚至静态 Web 内容。 在标准计划中,该服务使用开源 Paketo Buildpacks,而在企业计划中,则使用 VMware Tanzu Buildpacks。 如果 Tanzu Buildpacks 不可用,或者没有使用 Paketo 所需的联机服务,则可以切换到本地 Paketo Buildpacks 来生成映像。 然后将其部署到 Azure 容器注册表或其他 Docker 注册表。
本文介绍如何使用 TOML 文件创建生成器,然后使用生成器生成源代码或项目文件。 有关详细信息,请参阅 builder.toml。 若要了解生成映像、运行映像和堆栈,请参阅什么是基础映像。
注意
本文以前建议使用已停止使用的 Paketo Java Azure 复合生成包。 我们更新了示例,以使用复合生成包的必要单个组件。 有关复合生成包中包含的所有单个组件的列表,请参阅 buildpack.toml。 有关复合生成包的停用的详细信息,请参阅 Paketo Buildpacks Sunsets Java Azure Composite Buildpack。
先决条件
标准计划
Azure Spring Apps 标准计划附带了一个内置生成器,无法对其进行自定义。 若要替换此生成器,需要为自己的生成器创建 TOML 文件。 以下 TOML 文件是一个示例,可以自定义以使用 Application Insights 生成 Java Spring Boot 应用。 根据应用的要求调整 TOML 文件。
# filename: standard-builder.toml
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/ca-certificates:3.9.0"
id = "paketo-buildpacks/ca-certificates"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/microsoft-openjdk:4.0.1"
id = "paketo-buildpacks/microsoft-openjdk"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/syft:2.6.1"
id = "paketo-buildpacks/syft"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/maven:6.19.2"
id = "paketo-buildpacks/maven"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/executable-jar:6.12.0"
id = "paketo-buildpacks/executable-jar"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/spring-boot:5.32.0"
id = "paketo-buildpacks/spring-boot"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/azure-application-insights:5.23.0"
id = "paketo-buildpacks/azure-application-insights"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/environment-variables:4.8.0"
id = "paketo-buildpacks/environment-variables"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/java-native-image:9.8.0"
id = "paketo-buildpacks/java-native-image"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/dotnet-core:0.48.3"
id = "paketo-buildpacks/dotnet-core"
[[order]]
[[order.group]]
id = "paketo-buildpacks/ca-certificates"
optional = true
version = "3.9.0"
[[order.group]]
id = "paketo-buildpacks/microsoft-openjdk"
version = "4.0.1"
[[order.group]]
id = "paketo-buildpacks/syft"
optional = true
version = "2.6.1"
[[order.group]]
id = "paketo-buildpacks/maven"
optional = true
version = "6.19.2"
[[order.group]]
id = "paketo-buildpacks/executable-jar"
optional = true
version = "6.12.0"
[[order.group]]
id = "paketo-buildpacks/spring-boot"
optional = true
version = "5.32.0"
[[order.group]]
id = "paketo-buildpacks/azure-application-insights"
optional = true
version = "5.23.0"
[[order.group]]
id = "paketo-buildpacks/environment-variables"
optional = true
version = "4.8.0"
[[order]]
[[order.group]]
id = "paketo-buildpacks/java-native-image"
[[order]]
[[order.group]]
id = "paketo-buildpacks/dotnet-core"
[build]
image = "paketobuildpacks/build-jammy-base:0.1.129"
[run]
[[run.images]]
image = "paketobuildpacks/run-jammy-base:0.1.129"
若要使用此 TOML 文件创建生成器,请使用以下命令:
pack builder create <builder-name> --config ./standard-builder.toml
可以使用以下命令检查生成器:
pack builder inspect <builder-name>
若要使用此生成器将 Java 源代码或 .NET 源代码生成到容器映像,请使用以下命令:
pack build <image-name> \
--path <path-to-source-root> \
--builder <builder-name>
若要使用生成器将项目(如 JAR 或 WAR 文件)生成到容器映像,请使用以下命令:
pack build <image-name> \
--path <path-to-artifact> \
--builder <builder-name>
企业计划
Azure Spring Apps 企业计划使用 VMware Tanzu Buildpacks 将源代码生成到容器映像。 Tanzu Buildpacks 基于开源 Paketo Buildpacks 构建。 因此,可能无法找到与 Tanzu Buildpack 完全等效的 Paketo Buildpack。
在本部分中,可以看到如何使用 Paketo Buildpacks 包创建一个生成器,该生成器与企业计划中的生成器接近,但又不完全相同。 由你负责运行测试或查看 Buildpack,以确认企业计划中的生成器与本地计算机上自己的生成器之间的兼容性。
企业计划附带了一个默认生成器,其中包括以下组件:
- OS 堆栈:io.buildpacks.stacks.jammy-base
- Buildpack:
- tanzu-buildpacks/java-azure
- tanzu-buildpacks/dotnet-core
- tanzu-buildpacks/go
- tanzu-buildpacks/web-servers
- tanzu-buildpacks/nodejs
- tanzu-buildpacks/python
使用包 CLI,可以在本地计算机上使用 Paketo OS 堆栈和 Paketo Buildpacks 创建类似的生成器。 然后,可以使用这个新创建的生成器来生成应用程序源代码。
如果使用非默认生成器,则需要检查其配置(OS 堆栈和 Buildpack),然后创建类似于它的 Paketo 生成器。 若要检查生成器的配置,请转到 Azure 门户,找到 Azure Spring Apps 实例,然后查看“生成服务”窗格。 找到生成器,然后选择“编辑生成器”。 或者,可以使用 Azure CLI 命令 az spring build-service builder show。
下表显示了与企业计划中使用的 OS 堆栈等效的 Paketo OS 堆栈:
| 企业计划中的 OS 堆栈 | Paketo OS 堆栈 |
|---|---|
io.buildpacks.stacks.jammy-base |
paketobuildpacks/jammy-base-stack 生成: paketobuildpacks/build-jammy-base运行: paketobuildpacks/run-jammy-base |
io.buildpacks.stacks.jammy-full |
paketobuildpacks/jammy-full-stack 生成: paketobuildpacks/build-jammy-full运行: paketobuildpacks/run-jammy-full |
io.buildpacks.stacks.jammy-tiny |
paketobuildpacks/jammy-tiny-stack 生成: paketobuildpacks/build-jammy-tiny运行: paketobuildpacks/run-jammy-tiny |
io.buildpacks.stacks.bionic-base (End of support) |
paketobuildpacks/bionic-base-stack 生成: paketobuildpacks/build-bionic-base运行: paketobuildpacks/run-bionic-base |
io.buildpacks.stacks.bionic-full (End of support) |
paketobuildpacks/bionic-full-stack 生成: paketobuildpacks/build-bionic-full运行: paketobuildpacks/run-bionic-full |
下表显示了与企业计划中使用的 Buildpack 等效的 Paketo Buildpack:
| 企业计划中的 Buildpack | Paketo Buildpack |
|---|---|
tanzu-buildpacks/dotnet-core |
paketo-buildpacks/dotnet-core |
tanzu-buildpacks/go |
paketo-buildpacks/go |
tanzu-buildpacks/java-azure |
paketo-buildpacks/java-azure |
tanzu-buildpacks/java-native-image |
paketo-buildpacks/java-native-image |
tanzu-buildpacks/nodejs |
paketo-buildpacks/nodejs |
tanzu-buildpacks/php |
paketo-buildpacks/php |
tanzu-buildpacks/python |
paketo-buildpacks/python |
tanzu-buildpacks/web-servers |
paketo-buildpacks/web-servers |
若要替换企业计划中的生成器,需要为自己的生成器创建 TOML 文件。 以下 TOML 文件是一个可以自定义的示例。 使用此 TOML 文件,可以在本地计算机上创建类似的生成器。 根据应用的要求调整 TOML 文件。
# filename: enterprise-builder.toml
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/ca-certificates:3.9.0"
id = "paketo-buildpacks/ca-certificates"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/microsoft-openjdk:4.0.1"
id = "paketo-buildpacks/microsoft-openjdk"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/syft:2.6.1"
id = "paketo-buildpacks/syft"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/maven:6.19.2"
id = "paketo-buildpacks/maven"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/executable-jar:6.12.0"
id = "paketo-buildpacks/executable-jar"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/spring-boot:5.32.0"
id = "paketo-buildpacks/spring-boot"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/azure-application-insights:5.23.0"
id = "paketo-buildpacks/azure-application-insights"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/environment-variables:4.8.0"
id = "paketo-buildpacks/environment-variables"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/dotnet-core:latest"
id = "paketo-buildpacks/dotnet-core"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/go:latest"
id = "paketo-buildpacks/go"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/web-servers:latest"
id = "paketo-buildpacks/web-servers"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/nodejs:latest"
id = "paketo-buildpacks/nodejs"
[[buildpacks]]
uri = "docker://docker.io/paketobuildpacks/python:latest"
id = "paketo-buildpacks/python"
[[order]]
[[order.group]]
id = "paketo-buildpacks/ca-certificates"
optional = true
version = "3.9.0"
[[order.group]]
id = "paketo-buildpacks/microsoft-openjdk"
version = "4.0.1"
[[order.group]]
id = "paketo-buildpacks/syft"
optional = true
version = "2.6.1"
[[order.group]]
id = "paketo-buildpacks/maven"
optional = true
version = "6.19.2"
[[order.group]]
id = "paketo-buildpacks/executable-jar"
optional = true
version = "6.12.0"
[[order.group]]
id = "paketo-buildpacks/spring-boot"
optional = true
version = "5.32.0"
[[order.group]]
id = "paketo-buildpacks/azure-application-insights"
optional = true
version = "5.23.0"
[[order.group]]
id = "paketo-buildpacks/environment-variables"
optional = true
version = "4.8.0"
[[order]]
[[order.group]]
id = "paketo-buildpacks/dotnet-core"
[[order]]
[[order.group]]
id = "paketo-buildpacks/go"
[[order]]
[[order.group]]
id = "paketo-buildpacks/web-servers"
[[order]]
[[order.group]]
id = "paketo-buildpacks/nodejs"
[[order]]
[[order.group]]
id = "paketo-buildpacks/python"
[build]
image = "paketobuildpacks/build-jammy-base:latest"
[run]
[[run.images]]
image = "paketobuildpacks/run-jammy-base:latest"
若要使用此 TOML 文件创建生成器,请使用以下命令:
pack builder create <builder-name> --config ./enterprise-builder.toml
可以使用以下命令检查生成器:
pack builder inspect <builder-name>
现在,你有一个类似于 Azure Spring Apps 企业计划中的默认生成器的生成器。 使用此生成器,可以使用以下命令将 JAR 文件、WAR 文件、Java 源代码、.NET 源代码、Golang 源代码、Node.js 源代码或 Python 源代码生成到容器映像:
pack build <image-name> \
--path <path-to-source-root> \
--builder <builder-name>
若要使用生成器将项目(如 JAR 或 WAR 文件)生成到容器映像,请使用以下命令:
pack build <image-name> \
--path <path-to-artifact> \
--builder <builder-name>
还可以通过添加或移除 Buildpack,然后使用它更新现有生成器或创建新生成器来自定义 enterprise-builder.toml。
自定义
Buildpack 提供了自定义各种配置的方法。 以下示例演示了生成具有特定要求的容器映像的常见方案:
- 若要自定义适用于 Java 的 JDK 源代码,请参阅 paketo-buildpacks/microsoft-openjdk。
- 若要自定义适用于 WAR 的 Tomcat,请参阅 paketo-buildpacks/apache-tomcat。
- 若要在生成和运行时将 CA 证书添加到系统信任存储,请参阅 paketo-buildpacks/ca-certificates。
有关属性和配置的详细信息,请参阅如何使用 Paketo Buildpacks 生成 Java 应用和 Java Buildpack 参考。