Skip to main content

Docker Image Builds

PlayFlow supports two ways to deploy your game server: uploading a ZIP of your server build, or importing a pre-built Docker image. This guide covers the Docker image approach, which gives you full control over your server environment and enables tighter CI/CD integration.

How It Works

When you import a Docker image, PlayFlow pulls it from your container registry and makes it available for server launches. Servers started from a Docker image build skip the ZIP download and extraction step entirely — the image is ready to run immediately.
Docker image builds are ideal for teams that already have a containerized build pipeline. If you are new to containers or prefer a simpler workflow, the ZIP upload method handles containerization for you automatically.

Prerequisites

Before you begin, make sure you have:
  • A PlayFlow project with a server API key (the pf_-prefixed key from Project Settings on the dashboard). Keep it server-side — in CI, store it as a secret. Client keys (pfclient_) are meant for game builds and cannot manage builds.
  • A Docker image pushed to an accessible container registry (Docker Hub, GitHub Container Registry, AWS ECR, etc.)
  • If your registry is private, the credentials to pull the image

Importing a Docker Image

1

Push your image to a container registry

Build and push your game server image to any Docker-compatible registry. Make sure the image contains everything your server needs to run.
2

Import the image into PlayFlow

Call the Docker image import endpoint with your image URL and, optionally, registry credentials and an executable path.
3

Wait for processing to complete

The build is created with status processing. PlayFlow pulls the image and prepares it for server launches. You can poll the build status endpoint or watch for updates on the dashboard.
When processing finishes, the status changes to ready.
4

Launch a server from the build

Once the build is ready, start a server using it just like any other build. PlayFlow uses the Docker image directly — no ZIP download or extraction required.You reference a build by the name you gave it at import, not by its ID. Pass that name as version_tag, and always include a name and region (both required):
version_tag is the build name you chose when importing (here, my-server-build) — PlayFlow launches the latest ready build with that name. To pin an exact build version, also pass version (a number). The BUILD_ID you polled in the previous step is only for checking build status; it is not used to launch a server.
Read the connection host and port from the network_ports[] array in the start response (each entry has host and external_port) rather than assuming a fixed port — PlayFlow allocates the external port dynamically, and it differs from your internal port.

Request Body Reference

Docker Image vs. ZIP Upload

Best for: advanced users, custom runtimes, CI/CD pipelines, non-standard server setups.
  • You build and manage the Docker image yourself
  • Full control over the base image, dependencies, and runtime environment
  • Faster server startup since the image is pre-built
  • Integrates naturally with CI/CD — push to your registry, then import to PlayFlow
  • Supports any language, framework, or game engine

CI/CD Integration

Docker image builds fit naturally into automated pipelines. Here is an example GitHub Actions workflow that builds your server image, pushes it to a registry, and imports it into PlayFlow:
github-actions.yml

Tips

Always use a specific image tag (e.g., :v1.0 or a commit SHA) rather than :latest. This ensures that your servers run the exact version you tested, and makes rollbacks straightforward.
  • Keep images small. Smaller images pull faster, which reduces build processing time. Use multi-stage builds and minimal base images (e.g., debian-slim, alpine) where possible.
  • Signal readiness from your server. PlayFlow does not probe a custom health endpoint in your game. Server readiness is reported by the PlayFlow agent sidecar via a status callback once your game process is up, so make sure your server starts and binds its ports promptly.
  • Test locally first. Run your image with docker run before importing to PlayFlow to catch configuration issues early.

Next Steps

Server Regions

Choose the best deployment region for your players.

Pricing & Instance Types

Review available compute sizes and pricing.