Google Cloud v9.3.0 published on Tuesday, Oct 7, 2025 by Pulumi
Docker Build and Push to GCR and Deploy to Google Cloud Run using separate projects
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
Prerequisites
- Ensure you have the latest Node.js and NPM
- Install the Pulumi CLI
- Configure Pulumi to access your GCP account
- Install Docker
- Enable Docker to deploy to Google Container Registry with gcloud auth configure-docker
- Setup Docker auth with a JSON key to get image from GCR
Build and Push Docker Image
- Navigate to the - docker-build-push-gcrdirectory
- Restore NPM dependencies: - $ npm install
- Create a new stack: - $ pulumi stack init dev
- Configure your GCP project and region: - $ pulumi config set gcp:project <projectname> $ pulumi config set gcp:region <region>
- Run - pulumi upto preview and deploy changes:- $ pulumi up Previewing update (dev): ... Updating (dev): Type Name Status + pulumi:pulumi:Stack gcr-build-image-dev created + └─ docker:image:Image ruby-app created Outputs: digest: "gcr.io/velvety-rock-274215/ruby-app:latest-fee86d3d35fccf2ad4d86bbfcdd489acf7b1e4db0ebb8166378bd1fb0ca9cee6" Resources: + 2 created Duration: 16s
Deploy Cloud Run
- Navigate to the - cloud-run-deploydirectory
- Restore NPM dependencies: - $ npm install
- Create a new stack: - $ pulumi stack init dev
- Configure your GCP project, region and docker config file: - $ pulumi config set gcp:project <projectname> $ pulumi config set gcp:region <region> $ pulumi config set docker-config-file <location of ~/.docker/config.json>
- Run - pulumi upto preview and deploy changes:- $ 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
- Check the deployed Cloud Run endpoint: - $ curl "$(pulumi stack output rubyUrl)" Hello Pulumi!
- Clean up your GCP and Pulumi resources (run in both projects): - $ pulumi destroy ... $ pulumi stack rm dev ...
