Cloud Foundry 到 Cloud Run 迁移示例:Spring Music

此示例迁移使用 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 作为基础映像来创建构建映像。该构建映像用作创建应用映像的构建环境。

  1. 创建名为 build/ 的目录并通过 cd 命令进入该目录:

    mkdir build && cd build
    
  2. 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
    
  3. 使用 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 作为基础映像来创建运行映像。当您创建最终应用映像时,运行映像被用作基础映像。

  1. 创建名为 run/ 的目录并通过 cd 命令进入该目录:

    mkdir run && cd run
    
  2. 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
    
  3. 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