memvid-core 2.0.139

Core library for Memvid v2, a crash-safe, deterministic, single-file AI memory.
Documentation
# Docker Setup for Memvid Core

This document describes how to use Docker with the Memvid Core Rust library.

## Quick Start

### Development Environment

```bash
# From project root or docker/core directory
cd docker/core
docker-compose up -d dev

# Enter the container
docker-compose exec dev bash

# Inside container, you can run:
cargo build
cargo test
cargo run --example basic_usage
```

### Run Tests

```bash
# Run all tests
cd docker/core
docker-compose run --rm test

# Or build test image manually (from project root)
docker build -f docker/core/Dockerfile.test -t memvid-test .
docker run --rm memvid-test
```

### Build Release

```bash
# Build release version
cd docker/core
docker-compose run --rm build

# Or build manually (from project root)
docker build -f docker/core/Dockerfile -t memvid-core:latest .
```

## Docker Images

### 1. Development Image (`Dockerfile.dev`)

Full development environment with all tools:

```bash
# From project root
docker build -f docker/core/Dockerfile.dev -t memvid-dev .
docker run -it --rm -v $(pwd):/app memvid-dev bash
```

**Features:**
- Rust toolchain 1.92
- All build dependencies
- Cargo watch (optional)
- Volume mounting for live development

### 2. Test Image (`Dockerfile.test`)

Optimized for running tests:

```bash
# From project root
docker build -f docker/core/Dockerfile.test -t memvid-test .
docker run --rm memvid-test
```

**Features:**
- Rust toolchain 1.92
- Test dependencies
- Runs tests automatically

### 3. Production Build (`Dockerfile`)

Multi-stage build for optimized production image:

```bash
# From project root
docker build -f docker/core/Dockerfile -t memvid-core:latest .
```

**Features:**
- Multi-stage build (smaller final image)
- Only runtime dependencies
- Optimized release build

## Docker Compose

### Services

- **`dev`** - Development environment with live code mounting
- **`test`** - Test runner
- **`build`** - Release builder

### Usage

```bash
# Start development environment
docker-compose up -d dev

# Run tests
docker-compose run --rm test

# Build release
docker-compose run --rm build

# Stop all services
docker-compose down
```

## Examples

### Run Examples in Docker

```bash
# Development container
docker-compose exec dev cargo run --example basic_usage

# With features
docker-compose exec dev cargo run --example pdf_ingestion --features lex,pdf_extract
```

### Memory-Constrained Testing

Test OOM prevention with memory limits:

```bash
# Test with memory limit (for OOM testing)
docker run --rm --memory=150m --memory-swap=150m \
  -v $(pwd):/app \
  memvid-test cargo test --features encryption --test encryption_capsule
```

### Build with Specific Features

```bash
# Build with all features
docker-compose exec dev cargo build --release --all-features

# Build with specific features
docker-compose exec dev cargo build --release --features lex,vec,encryption
```

## Volume Mounts

The docker-compose setup uses volumes for:
- **Source code** - Live mounting for development
- **Cargo cache** - Speeds up builds
- **Target cache** - Preserves build artifacts

## CI/CD Integration

### GitHub Actions Example

```yaml
name: Docker Build

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build Docker image
        run: docker build -t memvid-core:test .
      - name: Run tests
        run: docker run --rm memvid-core:test cargo test
```

## Troubleshooting

### Build Fails

```bash
# Clean build
docker-compose down -v
docker-compose build --no-cache
```

### Permission Issues

```bash
# Fix permissions
sudo chown -R $USER:$USER .
```

### Out of Memory

```bash
# Increase Docker memory limit in Docker Desktop settings
# Or use memory limits in docker run:
docker run --memory=2g --memory-swap=2g ...
```

## Best Practices

1. **Use docker-compose** for development
2. **Cache volumes** for faster builds
3. **Multi-stage builds** for production
4. **Test in containers** to match CI/CD environment
5. **Use .dockerignore** to exclude unnecessary files

## Related

- [CLI Docker Setup]../cli/README.md
- [Docker Overview]../README.md
- [Main Project README]../../README.md
- [Contributing Guide]../../CONTRIBUTING.md