您可以通过以下两种方法使用 buildpack 构建容器映像:
- 使用
pack
CLI 在本地构建,以在本地测试函数并在部署之前快速对更改进行原型设计。 - 使用 Cloud Build 远程构建。使用 Cloud Build 进行构建适合具有资源密集型构建流程的函数,还有助于保护您的软件供应链。
配置项目以构建函数
如需使用 buildpack 构建函数,请使用 Functions 框架库。您必须将 GOOGLE_FUNCTION_TARGET
环境变量设置为您用作入口点的函数的名称。如需详细了解如何将环境变量与 Cloud Functions 函数搭配使用,请参阅配置 Cloud Functions 函数服务。
本地构建
使用 pack
CLI 在本地将您的函数构建到容器映像中。
准备工作
- 在工作站上安装 Docker 社区版 (CE)。
pack
将 Docker 用作 OCI 映像构建器。 - 安装 Pack CLI。
- 安装 Git 源代码控制工具以从 GitHub 获取示例应用。
在本地构建函数
您可以使用 pack build
命令并指定默认构建器 --builder=gcr.io/buildpacks/builder
以在本地构建容器映像。
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
将 IMAGE_NAME
替换为容器映像的名称。
您还可以通过扩展构建和运行映像来自定义容器映像。
在本地构建示例函数
下面的示例演示了如何在本地构建示例。
- 将示例代码库克隆到本地计算机:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- 切换到包含应用示例代码的目录:
Go
cd buildpack-samples/sample-functions-framework-go
Java
cd buildpack-samples/sample-functions-framework-java-mvn
Node.js
cd buildpack-samples/sample-functions-framework-node
Python
cd buildpack-samples/sample-functions-framework-python
Ruby
cd buildpack-samples/sample-functions-framework-ruby
- 使用
pack
构建示例函数:Go
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-go
Java
pack build --builder gcr.io/buildpacks/builder:v1 sample-functions-java-mvn
Node.js
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-node
Python
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-python
Ruby
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-ruby
- 使用
docker
运行映像:Go
docker run -p8080:8080 sample-functions-framework-go
Java
docker run -it -ePORT=8080 -p8080:8080 sample-functions-java-mvn
Node.js
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-node
Python
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-python
Ruby
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-ruby
- 浏览到 localhost:8080,访问正在运行的函数。
远程构建
使用 Cloud Build 将应用构建到容器映像中,并使用 Artifact Registry 作为存储和部署每个映像的容器代码库。
准备工作
- 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 Cloud Build and Artifact Registry API。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 Cloud Build and Artifact Registry API。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
- 确保您的 Google Cloud 项目有权访问容器映像代码库。
如需配置对 Artifact Registry 中的 Docker 代码库的访问权限,请执行以下操作:
- 在 Google Cloud 项目的同一位置创建一个新的 Docker 代码库。
gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
您需要进行如下替换:- 将
REPO_NAME
替换为您为 Docker 代码库选择的名称。 - 将
REGION
替换为 Google Cloud 项目的位置或最接近该位置的位置。 - 将
DESCRIPTION
替换为您选择的说明。
例如,要在
us-west2
中创建包含“Docker 代码库”说明的docker
代码库,请运行以下命令:gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- 将
- 验证您的代码库已创建:
gcloud artifacts repositories list
您应该会在列表中看到为 Docker 代码库选择的名称。
- 在 Google Cloud 项目的同一位置创建一个新的 Docker 代码库。
远程构建函数
您可以使用 gcloud builds
命令和 image
标志来构建容器映像并将其上传到代码库:
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
您需要将其中的:
- 将
LOCATION
替换为容器代码库的区域名称。例如:us-west2
- 将
PROJECT_ID
替换为您的 Google Cloud 项目的 ID。 - 将
REPO_NAME
替换为您的 Docker 代码库的名称。 - 将
IMAGE_NAME
替换为容器映像的名称。
示例:
gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo
远程构建示例函数
以下示例演示了如何远程构建示例,然后验证容器映像是否已推送到 Artifact Registry 中的代码库。
- 将示例代码库克隆到本地计算机:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- 切换到包含应用示例代码的目录:
Go
cd buildpack-samples/sample-functions-framework-go
Java
cd buildpack-samples/sample-functions-framework-java-mvn
Node.js
cd buildpack-samples/sample-functions-framework-node
Python
cd buildpack-samples/sample-functions-framework-python
Ruby
cd buildpack-samples/sample-functions-framework-ruby
- 使用
gcloud
将应用源代码提交到 Cloud Build:Go
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-go
Java
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-gradle
Node.js
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-node
Python
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-python
Ruby
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-ruby
您需要进行如下替换:
- 将
LOCATION
替换为容器代码库的区域名称。示例:us-west2-docker.pkg.dev
- 将
PROJECT_ID
替换为您的 Google Cloud 项目的 ID。 - 将
REPO_NAME
替换为您的 Docker 代码库的名称。
- 将
-
验证示例函数是否已成功发布到
REPO_NAME
:gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME
您需要将其中的:
- 将
LOCATION
替换为容器代码库的区域名称。 示例:us-west2
- 将
PROJECT_ID
替换为您的 Google Cloud 项目的 ID。 - 将
REPO_NAME
替换为您的 Docker 代码库的名称。
- 将
后续步骤
- 将函数映像部署到 Cloud Run。
- 设置环境变量。
- 配置构建映像。
- 使用缓存映像加速构建。