此示例迁移使用 Spring Music 项目来展示如何将 Cloud Foundry 应用构建为符合 OCI 规范的应用映像。此示例使用直接原样迁移策略,该策略使用 Cloud Foundry 生态系统中的开源组件。创建应用映像后,您需要配置应用以部署到 Cloud Run。
前期准备
- 确保您已按照设置页面中的说明为 Cloud Run 设置了新项目。
- 确保您拥有用于存储容器的
REGISTRY_URI。Cloud Run 建议使用 Artifact Registry。 - 在您的工作站上安装 Docker。Docker 用于创建中间映像以构建项目。
部署所需的权限
在本指南中,您需要拥有构建、存储构建的容器映像以及进行部署的权限。
您必须拥有以下角色:
项目结构
对于本指南,我们建议您创建一个项目目录(例如 cr-spring-music/),并在完成本指南的过程中创建子目录。
cr-spring-music/
├── build
├── run
└── spring-music
创建构建映像
本部分使用 cflinux3 作为基础映像来创建构建映像。该构建映像用作创建应用映像的构建环境。
创建名为
build/的目录并通过cd命令进入该目录:mkdir build && cd build在
build/文件夹中,创建一个名为Dockerfile的新文件并粘贴以下代码:ARG CF_LINUX_FS=cloudfoundry/cflinuxfs3 FROM golang:1.20-bullseye AS builder_build WORKDIR /build RUN ["git", "clone", "--depth=1", "https://github.com/cloudfoundry/buildpackapplifecycle.git"] WORKDIR /build/buildpackapplifecycle RUN ["go", "mod", "init", "code.cloudfoundry.org/buildpackapplifecycle"] RUN ["go", "mod", "tidy"] RUN CGO_ENABLD=0 go build -o /builder ./builder/ FROM $CF_LINUX_FS # Set up container tools related to building applications WORKDIR /lifecycle COPY --from=builder_build /builder /lifecycle/builder # Set up environment to match Cloud Foundry's build. # https://docs.cloudfoundry.org/devguide/deploy-apps/environment-variable.html#app-system-env WORKDIR /staging/app WORKDIR /tmp ENV CF_INSTANCE_ADDR=127.0.0.1:8080 \ CF_INSTANCE_IP=127.0.0.1 \ CF_INSTANCE_INTERNAL_IP=127.0.0.1 \ VCAP_APP_HOST=127.0.0.1 \ CF_INSTANCE_PORT=8080 \ LANG=en_US.UTF-8 \ INSTANCE_GUID=00000000-0000-0000-0000-000000000000 \ VCAP_APPLICATION={} \ VCAP_SERVICES={} \ CF_STACK=cflinuxfs3使用 Cloud Build 构建和发布
builder映像gcloud builds \ submit --tag "REGISTRY_URI/builder:stable"将
REGISTRY_URI替换为要发布构建映像的 Artifact Registry 的地址。例如:REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/builder:stable。
创建运行时映像
本部分使用 cflinux3 作为基础映像来创建运行映像。当您创建最终应用映像时,运行映像被用作基础映像。
创建名为
run/的目录并通过cd命令进入该目录:mkdir run && cd run在
run/文件夹中,使用以下代码创建名为entrypoint.bash的新 Shell 脚本:#!/usr/bin/env bash set -e if [[ "$@" == "" ]]; then exec /lifecycle/launcher "/home/vcap/app" "" "" else exec /lifecycle/launcher "/home/vcap/app" "$@" "" fi在
run/文件夹中,创建一个名为Dockerfile的新文件并粘贴以下代码:ARG CF_LINUX_FS=cloudfoundry/cflinuxfs3 FROM golang:1.20-bullseye AS launcher_build WORKDIR /build RUN ["git", "clone", "--depth=1", "https://github.com/cloudfoundry/buildpackapplifecycle.git"] WORKDIR /build/buildpackapplifecycle RUN ["go", "mod", "init", "code.cloudfoundry.org/buildpackapplifecycle"] RUN ["go", "mod", "tidy"] RUN CGO_ENABLD=0 go build -o /launcher ./launcher/ FROM $CF_LINUX_FS # Set up container tools related to launching the application WORKDIR /lifecycle COPY entrypoint.bash