This guide shows how to prepare a web service to run in a container on
Cloud Run. It does not cover data migration.

## Identify the port your code is listening on

Your service should listen for requests on a specific port. You must identify
this port and [configure Cloud Run to send requests to the same port](https://docs.cloud.google.com/run/docs/configuring/services/containers.md.txt#command-line).

This is the same port you would use when invoking your service on your local
machine. For example, if to test your code you open `localhost:3000`, then [set
the container port](https://docs.cloud.google.com/run/docs/configuring/services/containers#command-line) to
`3000` in Cloud Run.

Cloud Run defaults to sending requests to `8080`.
The value of the port to which requests are sent is always available in the
`PORT` environment variable. It is a best practice for your code to listen on
the value defined by the `PORT` environment variable if possible.

## Remove reliance on local filesystem for persistent storage

Check your application code for reliance on local filesystems, and replace it
with file storage on [Cloud Storage](https://cloud.google.com/storage) or
data storage such as
[Firestore](https://cloud.google.com/products/firestore) or
[Cloud SQL](https://cloud.google.com/sql).

## Add a `Dockerfile`

In order to wrap your service in a container, you should use a Dockerfile to
define the operating environment. The
[build and deploy quickstart](https://docs.cloud.google.com/run/docs/quickstarts.md.txt#build-and-deploy-a-web-service)
shows some basic Dockerfiles you can use to get started.

Read more about customizing your `Dockerfile` on the [Developing your service](https://docs.cloud.google.com/run/docs/developing.md.txt#add-dockerfile)
page.

## Tune for concurrency and memory limits

Learn more about [how concurrency works](https://docs.cloud.google.com/run/docs/about-concurrency.md.txt)
then optimize your service concurrency support in [development tips for tuning concurrency](https://docs.cloud.google.com/run/docs/tips#tuning-concurrency)

Make sure your [memory limit](https://docs.cloud.google.com/run/docs/configuring/services/memory-limits.md.txt) is high enough
for your application to run, including capacity for any temporary file storage
your service requires.

## Send logs to stdout, stderr, or /var/log

Cloud Run automatically uses Google Cloud Observability to aggregate and
review your logs, as described in the [logging page](https://docs.cloud.google.com/run/docs/logging.md.txt).