Serverless Containers Stack
A cloud stack running standard OCI containers on managed serverless platforms like Cloud Run, Fargate, and Container Apps. It blends container portability with scale-to-zero, pay-per-use, low-ops economics.
The Serverless Containers Stack runs ordinary OCI containers on managed platforms that handle scaling, scheduling, and infrastructure, without operating a cluster. Platforms such as Google Cloud Run, AWS Fargate (with Lambda for fine-grained functions), and Azure Container Apps run Docker images with serverless economics. It blends container portability with the low operational burden of serverless.
Components
Docker / OCI images package the application as a standard container, keeping workloads portable across platforms and clouds. A managed serverless container platform, Cloud Run, AWS Fargate, or Azure Container Apps, runs those images, automatically provisioning compute, scaling with load (often to zero), and billing per use; teams do not manage nodes or clusters. For very fine-grained, event-triggered logic, function services like AWS Lambda (now able to run container images) complement the stack. Underlying platforms are frequently built on Kubernetes (for example, via Knative), but that complexity is hidden from the user.
Strengths
The stack combines the best of two worlds: applications stay as portable containers, so any language or framework that serves requests works and migration between providers is easier, while the platform removes cluster operations. Automatic scaling, including scale to zero, and per-use billing suit spiky or intermittent traffic and cut idle cost. There is no node patching, capacity planning, or scheduler to manage. Deployments are simple, image-based releases. Compared with proprietary function formats, container portability reduces lock-in to the runtime even if the platform is managed.
Trade-offs
Scale to zero introduces cold starts when traffic resumes, which may not suit latency-critical paths. Although containers are portable, the surrounding platform features and integrations are provider-specific, so some lock-in remains. Per-request pricing can exceed always-on infrastructure at sustained high volume. Resource, concurrency, and request-duration limits constrain some workloads. Less control over the underlying environment than self-managed Kubernetes can limit advanced tuning. Long-running or stateful workloads fit less well than stateless request handlers.
Operations and Tooling
Deployment is image-centric: a CI pipeline builds an OCI image, pushes it to a registry, and the platform rolls out a new immutable revision, with traffic shifting between revisions for canary releases and instant rollback. Because the unit of deployment is a standard container, the same image can often run on Cloud Run, Container Apps, Fargate, or even plain Kubernetes with minimal change, which limits lock-in to the runtime even where platform features differ. Autoscaling is driven by concurrency and request load, and per-service settings tune scale-to-zero behavior, minimum instances, and maximum concurrency to balance cost against cold-start latency. Observability uses each platform's logging, metrics, and tracing, with OpenTelemetry instrumentation keeping the application portable across them. Identity and access are handled by platform-native service accounts or roles granting least-privilege access to other managed services. The model suits stateless request handlers; long-lived connections, background daemons, and heavy local state fit less naturally and may need a different compute option.
When to Use It
Choose this stack when you want serverless scaling and economics but prefer portable containers over proprietary functions, and when you want to avoid running a Kubernetes cluster. It suits stateless request-driven services, APIs with variable traffic, and teams seeking low operations. For steady high-volume workloads, latency-critical paths, or deep environment control, self-managed Kubernetes may be more economical or flexible; for tiny event glue, plain functions can be simplest.