Skip to content
Docker Compose

Docker Compose

Self-contained docker-compose stacks for puddle. One directory per example, one docker-compose.yml per directory — catalog config, OPA policy, and Trino properties are inlined via Compose’s configs.content: so each file can be downloaded and run on its own.

Browse the source on GitHub.

Run any of them

cd examples/compose/<name>
docker compose up

Or fetch a single file directly:

curl -O https://raw.githubusercontent.com/ragnard/puddle/main/examples/compose/<name>/docker-compose.yml
docker compose up

The catalog REST API is at http://localhost:8089/api/catalog. Trino-equipped examples expose Trino’s UI at http://localhost:8080.

Examples

ExampleAuthStorageClientWhat it shows
basicnonelocal fileSingle-container puddle
opa-localstatic-token + OPAlocal fileThree roles (admin/writer/reader)
trino-rustfsnonerustfs (S3)TrinoAnyone-can-everything S3 demo
trino-rustfs-opastatic-token + OPArustfs (S3)TrinoTrino auths as writer
trino-rustfs-opa-vendingstatic-token + OPArustfs (S3)Trino+ STS-vended per-table tokens

The list reads as a complexity ladder — start at basic and add a concern at each step.

Image source

Each example pulls image: ghcr.io/ragnard/puddle:latest, which tracks main. Pin to a specific CalVer tag for reproducibility:

docker-compose.yml
services:
  puddle:
    image: ghcr.io/ragnard/puddle:2026.05.0

To run from local source instead, drop a sibling docker-compose.override.yml:

docker-compose.override.yml
services:
  puddle:
    image: puddle:local
    build: ../../..

Compose merges it automatically when both files are present.

Roll your own

Copy the closest example to a new directory and edit the docker-compose.yml. Everything you need — services, volumes, inlined puddle.yaml, OPA policy, Trino properties — is in one file, so changes don’t ripple across other files.