Skip to main content

Search the Dev Center

Search tutorials, templates, examples, and more.

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.