docs
deployment
docker
Docker
Docker Deployment
Mithril ships a multi-stage Alpine Dockerfile and docker-compose services for development.
Build Image#
make docker-build
# or: docker build -t mithril:latest .
Run Container#
make run-docker
# Maps host :4000 -> container :4000
Pass environment at runtime:
docker run --rm -p 4000:4000 \
-e JWT_SECRET=change-me \
-e DATABASE_URL=postgres://user:pass@host.docker.internal:5432/mithril_rev?sslmode=disable \
mithril:latest
Dockerfile Overview#
- Builder stage:
golang:1.25-alpine,go build -o app . - Runtime stage:
alpine, copies binary +views/,public/,docs/swagger.json - Healthcheck:
GET /health
Dev Services (Compose)#
infrastructure/docker-compose.services.yml provides:
| Service | Port | Command |
|---|---|---|
| postgres | 5432 | make dc-up-postgres |
| pgadmin | 5051 | make dc-up-pgadmin |
| adminer | 8080 | make dc-up-adminer |
| embedded DBMS | 5050 | mithril dbms (app command, not compose) |
| redis | 6379 | make dc-up-redis |
| rabbitmq | 5672 | make dc-up-rabbitmq |
| kafka | 9092 | make dc-up-kafka |
make dc-up-postgres
make dc-logs-postgres
make dc-stop-postgres
Postgres default database: mithril_rev.
Production Notes#
- Set
APP_ENV=productionand a strongJWT_SECRET - Use external managed PostgreSQL
- Mount secrets via orchestrator (K8s secrets, not
.envin image) - Enable
ENABLE_HELMET=trueandENABLE_COMPRESSION=trueas needed