Skip to content

Docker Deployment

Deploy EmbedCache using Docker.

Dockerfile

Create a Dockerfile in your project:

FROM rust:1.75-slim as builder

WORKDIR /app

# Install dependencies
RUN apt-get update && apt-get install -y \
    pkg-config \
    libssl-dev \
    && rm -rf /var/lib/apt/lists/*

# Copy source
COPY . .

# Build release binary
RUN cargo build --release

# Runtime image
FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y \
    ca-certificates \
    libssl3 \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy binary
COPY --from=builder /app/target/release/embedcache /app/embedcache

# Create data directory
RUN mkdir -p /data

# Environment defaults
ENV SERVER_HOST=0.0.0.0
ENV SERVER_PORT=8081
ENV DB_PATH=/data/cache.db
ENV ENABLED_MODELS=AllMiniLML6V2

EXPOSE 8081

VOLUME ["/data"]

CMD ["/app/embedcache"]

Building the Image

docker build -t embedcache:latest .

Running

Basic

docker run -p 8081:8081 embedcache:latest

With Persistent Storage

docker run -p 8081:8081 \
  -v embedcache-data:/data \
  embedcache:latest

With Custom Configuration

docker run -p 8081:8081 \
  -v embedcache-data:/data \
  -e ENABLED_MODELS=BGESmallENV15,AllMiniLML6V2 \
  -e LLM_PROVIDER=ollama \
  -e LLM_BASE_URL=http://host.docker.internal:11434 \
  embedcache:latest

Docker Compose

Create docker-compose.yml:

version: '3.8'

services:
  embedcache:
    build: .
    ports:
      - "8081:8081"
    volumes:
      - embedcache-data:/data
    environment:
      - SERVER_HOST=0.0.0.0
      - SERVER_PORT=8081
      - DB_PATH=/data/cache.db
      - ENABLED_MODELS=BGESmallENV15,AllMiniLML6V2
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8081/v1/params"]
      interval: 30s
      timeout: 10s
      retries: 3

  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama-data:/root/.ollama
    restart: unless-stopped

volumes:
  embedcache-data:
  ollama-data:

With Ollama for LLM Chunking

version: '3.8'

services:
  embedcache:
    build: .
    ports:
      - "8081:8081"
    volumes:
      - embedcache-data:/data
    environment:
      - SERVER_HOST=0.0.0.0
      - SERVER_PORT=8081
      - DB_PATH=/data/cache.db
      - ENABLED_MODELS=BGESmallENV15
      - LLM_PROVIDER=ollama
      - LLM_MODEL=llama3
      - LLM_BASE_URL=http://ollama:11434
    depends_on:
      - ollama
    restart: unless-stopped

  ollama:
    image: ollama/ollama:latest
    volumes:
      - ollama-data:/root/.ollama
    restart: unless-stopped

volumes:
  embedcache-data:
  ollama-data:

Running with Docker Compose

# Start services
docker-compose up -d

# View logs
docker-compose logs -f embedcache

# Stop services
docker-compose down

Resource Limits

services:
  embedcache:
    deploy:
      resources:
        limits:
          memory: 4G
          cpus: '2'
        reservations:
          memory: 2G
          cpus: '1'

Health Checks

The Dockerfile includes a health check. Verify with:

docker inspect --format='{{json .State.Health}}' embedcache

Multi-Architecture Build

# Build for multiple architectures
docker buildx build --platform linux/amd64,linux/arm64 \
  -t embedcache:latest --push .