Recently, I wrote a guide on how to deploy a dash application using Google Cloud Platform (GCP) ⧉. Based on other guides from the internet, this deployed the app using GCP’s Compute Engine ⧉. For a lightweight public application, this may not be the best option. If you want to restrict access to your app, this cannot be done at the time of writing using Cloud Run though.
Step 1: Dockerising your Dash Application
Please see step 1 of the previous guide ⧉ if you want to see how to create a simple Dash application.
Paramount to creating a Docker container is the
Dockerfile. Here, we put this in the root directory, and add the following to the Dockerfile:
FROM python:3.6 WORKDIR /app COPY . /app RUN pip install --trusted-host pypi.python.org -r app/requirements.txt EXPOSE 8080 CMD ["python", "app/main.py"]
This will install all the packages needed from the
requirements.txt file and run
main.py from the
Build the Docker File
cd to the root directory in your command line.
To create the Docker image you will need to provide a tag related to your GCP project using the following.
docker build . -t [eu.]gcr.io/<PROJECT-ID>/<IMAGE-ID>
Where you should keep
eu. to build using the EU GCP servers.
IMAGE-ID can be anything appropriate. You can even append
:<TAG-NAME> to add a tag label.
Test the Docker Build
To check your application runs successfully using Docker, then type the following:
docker run -p PORT:PORT [eu.]gcr.io/<PROJECT-ID>/<IMAGE-ID>
PORT is the port number specified in
main.py. Here, we set it to
Push the Docker File to GCP
Next, you want to push your Docker image to GCP using.
docker push [eu.]gcr.io/<PROJECT-ID>/<IMAGE-ID>
This will create the image at Container Registry > Images on the GCP Console.
Step 2: Create Cloud Run Service
For this I am going to use the GCP Console.
First, on your projects dashboard click Cloud Run on the left-hand side. Then click ‘Create Service’, select the Container Image URL, choose the region (at the time of writing the only EU option is Belgium), Authentication (here set to Allow unauthenticated users), and optional settings. Note, it is important you select the appropriate port specified in
8000). Next click ‘Create’ and your app will be created.
Cloud Run or Compute Engine
The benefit of Cloud Run is that it has a time-out feature, whereby it stops the service when no-one is accessing your application. This should save money for small-scale applications. In addition, the first two million calls are free ⧉.
The downside of using Cloud Run is that it performs
docker run to activate the app, meaning load up times are slowly. You can increase the memory to 2 GB and add an additional CPU (to 2) to make this start-up faster.
Also, at current it is not possible to restrict access to your application in Cloud Run. Something you may should seriously consider if you’re planning to deploy sensitive information in your application.
This example is at https://dash-example-iaxj7ygkla-ew.a.run.app/ ⧉.