Docker Deployment
LynxDB provides official Docker images built from scratch (no OS, just the static binary). The image is small (~15MB) and runs with zero dependencies.
Quick Start
# Run LynxDB with persistent storage
docker run -d \
--name lynxdb \
-p 3100:3100 \
-v lynxdb-data:/data \
-e LYNXDB_LISTEN=0.0.0.0:3100 \
-e LYNXDB_DATA_DIR=/data \
OrlovEvgeny/Lynxdb:latest
# Verify
curl http://localhost:3100/health
Docker Images
| Image | Description |
|---|---|
OrlovEvgeny/Lynxdb:latest | Latest stable release |
OrlovEvgeny/Lynxdb:0.5.0 | Specific version |
OrlovEvgeny/Lynxdb:0.5 | Latest patch for minor version |
Images are available for linux/amd64 and linux/arm64.
Docker Run
Minimal (In-Memory)
docker run -d \
--name lynxdb \
-p 3100:3100 \
-e LYNXDB_LISTEN=0.0.0.0:3100 \
OrlovEvgeny/Lynxdb:latest
Persistent Storage
docker run -d \
--name lynxdb \
-p 3100:3100 \
-v lynxdb-data:/data \
-e LYNXDB_LISTEN=0.0.0.0:3100 \
-e LYNXDB_DATA_DIR=/data \
-e LYNXDB_RETENTION=30d \
OrlovEvgeny/Lynxdb:latest
With S3 Tiering
docker run -d \
--name lynxdb \
-p 3100:3100 \
-v lynxdb-data:/data \
-e LYNXDB_LISTEN=0.0.0.0:3100 \
-e LYNXDB_DATA_DIR=/data \
-e LYNXDB_STORAGE_S3_BUCKET=my-logs \
-e LYNXDB_STORAGE_S3_REGION=us-east-1 \
-e AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE \
-e AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY \
OrlovEvgeny/Lynxdb:latest
With Config File
docker run -d \
--name lynxdb \
-p 3100:3100 \
-v lynxdb-data:/data \
-v /path/to/config.yaml:/etc/lynxdb/config.yaml:ro \
OrlovEvgeny/Lynxdb:latest server --config /etc/lynxdb/config.yaml
With TLS and Auth
docker run -d \
--name lynxdb \
-p 3100:3100 \
-v lynxdb-data:/data \
-v /path/to/certs:/certs:ro \
-e LYNXDB_LISTEN=0.0.0.0:3100 \
-e LYNXDB_DATA_DIR=/data \
OrlovEvgeny/Lynxdb:latest server \
--tls-cert /certs/lynxdb.crt \
--tls-key /certs/lynxdb.key \
--auth
Docker Compose
Single Node
# docker-compose.yaml
services:
lynxdb:
image: OrlovEvgeny/Lynxdb:latest
ports:
- "3100:3100"
volumes:
- lynxdb-data:/data
environment:
LYNXDB_LISTEN: "0.0.0.0:3100"
LYNXDB_DATA_DIR: "/data"
LYNXDB_RETENTION: "30d"
LYNXDB_LOG_LEVEL: "info"
LYNXDB_STORAGE_COMPRESSION: "lz4"
LYNXDB_STORAGE_CACHE_MAX_BYTES: "2gb"
LYNXDB_QUERY_MAX_CONCURRENT: "20"
restart: unless-stopped
healthcheck:
test: ["CMD", "lynxdb", "health", "--server", "http://localhost:3100"]
interval: 30s
timeout: 5s
retries: 3
volumes:
lynxdb-data:
With MinIO for S3 Tiering
# docker-compose.yaml
services:
lynxdb:
image: OrlovEvgeny/Lynxdb:latest
ports:
- "3100:3100"
volumes:
- lynxdb-data:/data
environment:
LYNXDB_LISTEN: "0.0.0.0:3100"
LYNXDB_DATA_DIR: "/data"
LYNXDB_RETENTION: "90d"
LYNXDB_STORAGE_S3_BUCKET: "lynxdb"
LYNXDB_STORAGE_S3_REGION: "us-east-1"
LYNXDB_STORAGE_S3_ENDPOINT: "http://minio:9000"
LYNXDB_STORAGE_S3_FORCE_PATH_STYLE: "true"
LYNXDB_STORAGE_SEGMENT_CACHE_SIZE: "5gb"
AWS_ACCESS_KEY_ID: "minioadmin"
AWS_SECRET_ACCESS_KEY: "minioadmin"
depends_on:
minio:
condition: service_healthy
restart: unless-stopped
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio-data:/data
environment:
MINIO_ROOT_USER: "minioadmin"
MINIO_ROOT_PASSWORD: "minioadmin"
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 10s
timeout: 5s
retries: 5
minio-init:
image: minio/mc:latest
depends_on:
minio:
condition: service_healthy
entrypoint: >
/bin/sh -c "
mc alias set local http://minio:9000 minioadmin minioadmin;
mc mb --ignore-existing local/lynxdb;
"
volumes:
lynxdb-data:
minio-data:
Full Stack with Log Shipping
# docker-compose.yaml
services:
lynxdb:
image: OrlovEvgeny/Lynxdb:latest
ports:
- "3100:3100"
volumes:
- lynxdb-data:/data
environment:
LYNXDB_LISTEN: "0.0.0.0:3100"
LYNXDB_DATA_DIR: "/data"
LYNXDB_RETENTION: "30d"
restart: unless-stopped
# Example app generating logs
app:
image: your-app:latest
logging:
driver: "fluentd"
options:
fluentd-address: "localhost:24224"
tag: "app.{{.Name}}"
# Fluentd ships logs to LynxDB via Elasticsearch _bulk API
fluentd:
image: fluent/fluentd:latest
ports:
- "24224:24224"
volumes:
- ./fluentd.conf:/fluentd/etc/fluent.conf:ro
depends_on:
- lynxdb
volumes:
lynxdb-data:
Resource Limits
Set memory and CPU limits appropriate for your workload:
services:
lynxdb:
image: OrlovEvgeny/Lynxdb:latest
deploy:
resources:
limits:
memory: 4g
cpus: "4"
reservations:
memory: 1g
cpus: "1"
Dockerfile for Custom Image
If you need to customize the image (e.g., add a config file):
FROM OrlovEvgeny/Lynxdb:latest
COPY config.yaml /etc/lynxdb/config.yaml
ENTRYPOINT ["lynxdb"]
CMD ["server", "--config", "/etc/lynxdb/config.yaml"]
Health Checks
The /health endpoint returns 200 OK when the server is ready:
# From outside the container
curl http://localhost:3100/health
# Docker health check
docker inspect --format='{{.State.Health.Status}}' lynxdb
Viewing Logs
docker logs lynxdb
docker logs -f lynxdb # Follow
docker logs --since 1h lynxdb # Last hour
Upgrading
# Pull new image
docker pull OrlovEvgeny/Lynxdb:latest
# Recreate container (data is on the volume, so nothing is lost)
docker stop lynxdb
docker rm lynxdb
docker run -d --name lynxdb ... OrlovEvgeny/Lynxdb:latest
# Or with Docker Compose
docker compose pull
docker compose up -d
Next Steps
- Kubernetes Deployment -- deploy on Kubernetes
- S3 Storage Setup -- MinIO and AWS S3 integration
- Environment Variables -- full variable reference
- TLS and Authentication -- secure the deployment