Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Containerized services built from their own Dockerfiles, running as Vercel Functions behind a single domain.
Container Images is a Vercel starter template that demonstrates how to run multiple containerized services, each built from its own Dockerfile, as Vercel Functions behind a single domain.
Container Images is a working example from the Vercel examples repository that combines the Vercel Dockerfile runtime with the native Next.js runtime. It contains nine independent services — a Next.js landing page plus eight containerized apps written in Rust, Go, WebAssembly, and PHP — all routed through one vercel.json using rewrites. The template is published by Vercel and runs on the Vercel platform, with the landing page built on Next.js 16, React 19, and Tailwind CSS v4.
/rust (Rust + axum + tokio), /go (Go stdlib), /wasm (Rust to WebAssembly with nginx), /browser (Go + chromedp + headless Chromium), /ffmpeg (Go + ffmpeg), /doom (Go + Xvfb + chocolate-doom + ffmpeg), /qr (Go + go-qrcode), and /php (Laravel 12 + dompdf).web landing page is built from its own Dockerfile, showing how to deploy arbitrary containerized workloads as Vercel Functions.vercel.json declares each service and uses rewrites to route requests by path, with a final catch-all that sends unmatched traffic to the Next.js page./ffmpeg service converts media between gif, thumbnail, mp4, mp3, and waveform formats, streaming progress updates over WebSocket./browser service launches headless Chromium via chromedp, streams the page-load status over WebSocket, and returns a screenshot./doom service runs the game in Xvfb and streams it as MJPEG over WebSocket, with keyboard and mouse input controls./qr service generates QR codes with an optional centered logo, and the /php service produces PDF invoices using Laravel and dompdf.vercel.json.vercel.json routes traffic to each./browser service to capture a screenshot of any URL and stream the page-load status live over WebSocket./qr service, or produce PDF invoices with the Laravel /php service.Each service is self-contained and declares its own root and entrypoint in vercel.json. The rewrites array maps path prefixes like /rust and /go to the matching service, and a catch-all rule sends all other requests to the Next.js landing page at /. To run locally, clone the repo and execute vercel dev at the root; for production, use the one-click deploy button on the README.
No, it extends them. The container image services run as Vercel Functions through the Dockerfile runtime, while the web service uses the native Next.js runtime. Both function types coexist in one deployment and share the same domain.
Yes. The vercel.json schema shows a services object where you can add an entry with a root directory and a Dockerfile entrypoint, then add a rewrites rule for the path prefix.
It's Vercel's support for building functions from a Dockerfile instead of using the platform's built-in runtimes. This template uses it to run Rust, Go, PHP, and WebAssembly services as serverless functions.
Nine services total: the Next.js landing page plus eight Dockerfile-based services. Each service has its own UI and API, and they are all reachable under the same domain at different paths.
The template is a demonstration, so the ffmpeg service is designed as an example rather than a hardened production service. It shows how to stream progress and handle media files, but production use would require adding auth, input validation, and resource limits.
