Skip to content

Docker Deployment

This guide covers running EvidentSource with Docker for local development and testing only.

The development Docker image is ideal for:

  • Local development — Quick setup without installing dependencies
  • Learning — Experiment with the EvidentSource API and programming model
  • Testing — Run integration tests in CI/CD pipelines
  • Prototyping — Build proof-of-concepts before production deployment

For production workloads, deploy via AWS Marketplace which provides:

  • Persistent storage with DynamoDB
  • Event streaming via Kafka/SNS
  • High availability and auto-scaling
  • Enterprise support
  • Docker 20.10 or later
  • Docker Compose (optional, for multi-container setups)
Terminal window
# Pull the development server image
docker pull evidentsource/evidentsource-dev:latest
# Run the server
docker run -p 8080:8080 evidentsource/evidentsource-dev:latest

The server starts on http://localhost:8080. Open this URL to access the web UI.

For a more complete local development environment, use Docker Compose.

Create a docker-compose.yml:

version: '3.8'
services:
evidentsource:
image: evidentsource/evidentsource-dev:latest
ports:
- "8080:8080"
environment:
- RUST_LOG=info
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
timeout: 5s
retries: 3

Start the server:

Terminal window
docker compose up -d

Add distributed tracing to understand request flow:

version: '3.8'
services:
evidentsource:
image: evidentsource/evidentsource-dev:latest
ports:
- "8080:8080"
environment:
- RUST_LOG=info,evident_source=debug
- OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4317
- OTEL_SERVICE_NAME=evidentsource-dev
depends_on:
- jaeger
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
timeout: 5s
retries: 3
jaeger:
image: jaegertracing/all-in-one:latest
ports:
- "16686:16686" # Jaeger UI
- "4317:4317" # OTLP gRPC
environment:
- COLLECTOR_OTLP_ENABLED=true

Access the services:

Terminal window
docker run evidentsource/evidentsource-dev:latest --help
OptionDescriptionDefault
--hostBind address0.0.0.0
--portListen port8080
VariableDescription
RUST_LOGLog level (error, warn, info, debug, trace)
OTEL_EXPORTER_OTLP_ENDPOINTOpenTelemetry collector endpoint
OTEL_SERVICE_NAMEService name for OpenTelemetry traces

Enable verbose logging to understand what’s happening:

Terminal window
docker run -p 8080:8080 \
-e RUST_LOG=debug \
evidentsource/evidentsource-dev:latest

For even more detail on specific modules:

Terminal window
docker run -p 8080:8080 \
-e RUST_LOG=info,evident_source=debug,evident_source::api=trace \
evidentsource/evidentsource-dev:latest

Check logs:

Terminal window
docker logs <container_id>

Common issues:

  • Port already in use: Change the host port mapping (-p 8081:8080)
  • Out of memory: Increase Docker memory limits in Docker Desktop settings
Terminal window
# Verify container is running
docker ps
# Check if port is exposed
docker port <container_id>
# Test connectivity
curl http://localhost:8080/health

If you’re experiencing issues, enable debug logging:

Terminal window
docker run -p 8080:8080 \
-e RUST_LOG=debug \
evidentsource/evidentsource-dev:latest
TagDescription
latestMost recent stable release
X.Y.ZSpecific version (e.g., 1.2.3)

Now that you have EvidentSource running locally:

  1. Quick Start — Create databases, write events, and query state
  2. Event Sourcing Concepts — Understand the fundamentals
  3. API Reference — Explore the gRPC and REST APIs
  4. DCB Pattern — Learn about Dynamic Consistency Boundaries

When you’re ready to deploy for real workloads:

  • AWS Marketplace — Deploy the production server with DynamoDB storage, Kafka integration, and enterprise support