Two ways to run containers on Google Cloud — and Google's own recommended default.
Cloud Run is Google's modern default — its own documentation recommends it over App Engine for new users, citing advanced capabilities such as GPUs at lower prices. It scales to zero and bills per request. App Engine Flexible is not deprecated and remains supported, but it is a legacy option: it still fits when you need VM-level control (Compute Engine VMs with SSH), workloads that must sit in the Compute Engine network, or steady traffic where an always-on instance is acceptable. The deciding factor is scale-to-zero and billing — Cloud Run charges nothing when idle; Flexible always keeps a billable VM running.
| Criterion | Cloud Run | App Engine Flexible |
|---|---|---|
| Scale to zero | Yes — idle revisions scale to 0 instances | No — at least one instance always runs |
| Billing when idle | Request-based billing — no charge when idle | Instances billed continuously |
| Deploy unit | Any OCI / Docker container, as an immutable revision | A Docker container on Compute Engine VMs |
| Cold starts | Yes — scale-from-zero | None — no scale-from-zero |
| Startup speed | Seconds | Minutes — VM boot |
| Request timeout | Default 5 min, configurable to 60 min | 60 min |
| GPU support | Yes — NVIDIA L4 and RTX PRO 6000 | No |
| VM-level access | No host access | Yes — SSH into the underlying Compute Engine VM |
| Positioning | Modern, recommended default for new projects | Supported; Cloud Run recommended instead |