Skip to main content

Docker build and push to GCR and deploy to Google Cloud Run using separate projects

This example lives in the pulumi/examples repository. Check out just this directory to use it:

Get started with this example
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examples
git -C pulumi-examples sparse-checkout set gcp-ts-docker-gcr-cloudrun
cd pulumi-examples/gcp-ts-docker-gcr-cloudrun

An example of building a custom Docker image and pushing it into a Google Cloud Container Registry and then in a separate project deploying that image with the Google Cloud Run service using TypeScript.

Note this is an adaptation of the gcp-ts-cloudrun example.

This example is split into two Pulumi projects, run in sequence:

Prerequisites#

  1. Install Pulumi
  2. Configure GCP credentials
  3. Install Node.js
  4. Install Docker
  5. Enable Docker to deploy to Google Container Registry with gcloud auth configure-docker
  6. Set up Docker auth with a JSON key to get the image from GCR

Building and pushing the Docker image#

  1. Navigate to the docker-build-push-gcr directory.

  2. Install dependencies:

    Terminal window
    npm install
  3. Create a new stack:

    Terminal window
    pulumi stack init dev
  4. Configure your GCP project and region:

    Terminal window
    pulumi config set gcp:project <projectname>
    pulumi config set gcp:region <region>
  5. Deploy the stack:

    Terminal window
    pulumi up
    Previewing update (dev):
    ...
    Updating (dev):
    Type Name Status
    + pulumi:pulumi:Stack gcr-build-image-dev created
    + └─ docker-build:index:Image ruby-app created
    Outputs:
    digest: "sha256:fee86d3d35fccf2ad4d86bbfcdd489acf7b1e4db0ebb8166378bd1fb0ca9cee6"
    ref : "gcr.io/velvety-rock-274215/ruby-app:latest@sha256:fee86d3d35fccf2ad4d86bbfcdd489acf7b1e4db0ebb8166378bd1fb0ca9cee6"
    Resources:
    + 2 created
    Duration: 16s

Deploying to Cloud Run#

  1. Navigate to the cloud-run-deploy directory.

  2. Install dependencies:

    Terminal window
    npm install
  3. Create a new stack:

    Terminal window
    pulumi stack init dev
  4. Configure your GCP project, region, and Docker config file:

    Terminal window
    pulumi config set gcp:project <projectname>
    pulumi config set gcp:region <region>
    pulumi config set docker-config-file <location of ~/.docker/config.json>
  5. Deploy the stack:

    Terminal window
    pulumi up
    Previewing update (dev):
    Type Name Plan
    + pulumi:pulumi:Stack cloud-run-deploy-dev create
    + ├─ pulumi:providers:docker gcr create
    + ├─ docker:index:RemoteImage ruby-app-docker-image create
    + ├─ gcp:cloudrun:Service ruby create
    + └─ gcp:cloudrun:IamMember ruby-everyone create
    Resources:
    + 5 to create
    Do you want to perform this update? yes
    Updating (dev):
    Type Name Status
    + pulumi:pulumi:Stack cloud-run-deploy-dev created
    + ├─ pulumi:providers:docker gcr created
    + ├─ docker:index:RemoteImage ruby-app-docker-image created
    + ├─ gcp:cloudrun:Service ruby created
    + └─ gcp:cloudrun:IamMember ruby-everyone created
    Outputs:
    rubyUrl: "https://ruby-app-7a54c5f5e006d5cf33c2-zgms4nzdba-uc.a.run.app"
    Resources:
    + 5 created
    Duration: 23s
  6. Check the deployed Cloud Run endpoint:

    Terminal window
    curl "$(pulumi stack output rubyUrl)"
    Hello Pulumi!

Cleaning up#

Once you’re finished experimenting, destroy your stacks and remove them to avoid incurring any additional cost. Run these commands in both the docker-build-push-gcr and cloud-run-deploy directories:

Terminal window
pulumi destroy
pulumi stack rm

Related

The infrastructure as code platform for any cloud.