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:
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examplesgit -C pulumi-examples sparse-checkout set gcp-ts-docker-gcr-cloudruncd pulumi-examples/gcp-ts-docker-gcr-cloudrunAn 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:
- docker-build-push-gcr/ — builds a custom Docker image and pushes it to Google Container Registry (GCR).
- cloud-run-deploy/ — deploys that image from GCR to Google Cloud Run.
Prerequisites#
- Install Pulumi
- Configure GCP credentials
- Install Node.js
- Install Docker
- Enable Docker to deploy to Google Container Registry with
gcloud auth configure-docker - Set up Docker auth with a JSON key to get the image from GCR
Building and pushing the Docker image#
-
Navigate to the
docker-build-push-gcrdirectory. -
Install dependencies:
Terminal window npm install -
Create a new stack:
Terminal window pulumi stack init dev -
Configure your GCP project and region:
Terminal window pulumi config set gcp:project <projectname>pulumi config set gcp:region <region> -
Deploy the stack:
Terminal window pulumi upPreviewing update (dev):...Updating (dev):Type Name Status+ pulumi:pulumi:Stack gcr-build-image-dev created+ └─ docker-build:index:Image ruby-app createdOutputs:digest: "sha256:fee86d3d35fccf2ad4d86bbfcdd489acf7b1e4db0ebb8166378bd1fb0ca9cee6"ref : "gcr.io/velvety-rock-274215/ruby-app:latest@sha256:fee86d3d35fccf2ad4d86bbfcdd489acf7b1e4db0ebb8166378bd1fb0ca9cee6"Resources:+ 2 createdDuration: 16s
Deploying to Cloud Run#
-
Navigate to the
cloud-run-deploydirectory. -
Install dependencies:
Terminal window npm install -
Create a new stack:
Terminal window pulumi stack init dev -
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> -
Deploy the stack:
Terminal window pulumi upPreviewing 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 createResources:+ 5 to createDo you want to perform this update? yesUpdating (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 createdOutputs:rubyUrl: "https://ruby-app-7a54c5f5e006d5cf33c2-zgms4nzdba-uc.a.run.app"Resources:+ 5 createdDuration: 23s -
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:
pulumi destroypulumi stack rm