If your project already publishes a maintained container image that can be pulled without authentication, skip this step and go straight to creating
zenith-compose.yml.1. Prepare an image
If you have a production Dockerfile, use that. Otherwise, follow Docker’s guide for your language or framework.Build and share an image
Follow Docker’s introductory build, run, and publish tutorial.
Choose a framework guide
Find Docker’s containerisation guide for Node.js, Python, Go, Java, and other stacks.
Check the runtime
To be compatible with the Zenith platform, each container must:- Support
linux/amd64architecture - Read configuration/secrets from environment variables
- Write logs to
stdoutandstderr - Listen on
0.0.0.0, notlocalhost - Store any persistent data in a documented directory
- Start using only the container image, declared environment variables, and declared volumes
2. Publish the image
Publish the image to a registry that allows anonymous pulls. For GitHub projects, GHCR is recommended. Docker Hub is also supported.Publish to GHCR
Use GitHub Actions to build and publish an image to
ghcr.io.Publish to Docker Hub
Tag and push an image to a public Docker Hub repository.
3. Record what Zenith needs
Before continuing, make sure you can pull the container image without signing into the registry. Note its version tag/immutable digest, listening port, any heath endpoint, required environment variables and persistent-data paths for the next steps.
Next: create zenith-compose.yml
Describe the services that Zenith should run.