Docker Deployment
Barrel VectorDB provides official Docker images for easy deployment. Images are built for both linux/amd64 and linux/arm64 architectures.
Quick Start
Standalone Mode
docker run -d \
--name barrel-vectordb \
-p 8080:8080 \
-v barrel-data:/app/data \
registry.gitlab.enki.io/barrel-db/barrel_vectordb:latest
Cluster Mode
docker run -d \
--name barrel-node1 \
-e BARREL_ENABLE_CLUSTER=true \
-e BARREL_NODE_NAME=barrel@node1 \
-e RELEASE_COOKIE=my_secret_cookie \
-p 8080:8080 \
-p 4369:4369 \
-p 9100-9200:9100-9200 \
-v barrel-data:/app/data \
registry.gitlab.enki.io/barrel-db/barrel_vectordb:latest
| Tag |
Description |
latest |
Latest stable release |
x.y.z |
Specific version (e.g., 1.0.0) |
main |
Latest main branch build |
main-<sha> |
Specific main branch commit |
Configuration
All configuration is done via environment variables.
Node Configuration
| Variable |
Default |
Description |
BARREL_NODE_NAME |
barrel_vectordb@<hostname> |
Erlang node name |
RELEASE_COOKIE |
barrel_vectordb_secret |
Erlang distribution cookie |
Security
Always set a strong RELEASE_COOKIE in production. All nodes in a cluster must use the same cookie.
Storage
| Variable |
Default |
Description |
BARREL_DATA_PATH |
/app/data |
Data directory path |
HTTP API
| Variable |
Default |
Description |
BARREL_HTTP_PORT |
8080 |
HTTP API port |
BARREL_HTTP_IP |
0.0.0.0 |
HTTP bind address |
Clustering
| Variable |
Default |
Description |
BARREL_ENABLE_CLUSTER |
false |
Enable cluster mode |
BARREL_SEED_NODES |
- |
Comma-separated seed nodes |
BARREL_CLUSTER_NAME |
barrel_vectordb |
Cluster name |
Seed nodes format:
BARREL_SEED_NODES="'barrel@node1.example.com','barrel@node2.example.com'"
Sharding
| Variable |
Default |
Description |
BARREL_DEFAULT_SHARDS |
1 |
Default shard count for new collections |
BARREL_REPLICATION_FACTOR |
1 |
Default replication factor |
Embedding
| Variable |
Default |
Description |
BARREL_EMBEDDER_PROVIDER |
- |
Provider: ollama, openai, fastembed, local |
BARREL_EMBEDDER_MODEL |
(provider default) |
Model name |
BARREL_EMBEDDER_URL |
- |
URL for ollama/openai |
OPENAI_API_KEY |
- |
OpenAI API key |
| Variable |
Default |
Description |
BARREL_SCHEDULER_COUNT |
(auto) |
Erlang scheduler count |
BARREL_ASYNC_THREADS |
64 |
Async thread pool size |
Logging
| Variable |
Default |
Description |
BARREL_LOG_LEVEL |
info |
Log level: debug, info, warning, error |
Docker Compose
Single Node
version: '3.8'
services:
vectordb:
image: registry.gitlab.enki.io/barrel-db/barrel_vectordb:latest
ports:
- "8080:8080"
environment:
BARREL_LOG_LEVEL: info
volumes:
- vectordb-data:/app/data
restart: unless-stopped
volumes:
vectordb-data:
3-Node Cluster
version: '3.8'
x-vectordb-common: &vectordb-common
image: registry.gitlab.enki.io/barrel-db/barrel_vectordb:latest
restart: unless-stopped
networks:
- vectordb-net
services:
node1:
<<: *vectordb-common
hostname: node1
environment:
RELEASE_COOKIE: my_production_cookie
BARREL_NODE_NAME: barrel@node1
BARREL_ENABLE_CLUSTER: "true"
BARREL_SEED_NODES: "" # First node, no seeds
BARREL_REPLICATION_FACTOR: "2"
ports:
- "8081:8080"
volumes:
- node1-data:/app/data
node2:
<<: *vectordb-common
hostname: node2
environment:
RELEASE_COOKIE: my_production_cookie
BARREL_NODE_NAME: barrel@node2
BARREL_ENABLE_CLUSTER: "true"
BARREL_SEED_NODES: "'barrel@node1'"
BARREL_REPLICATION_FACTOR: "2"
ports:
- "8082:8080"
volumes:
- node2-data:/app/data
depends_on:
- node1
node3:
<<: *vectordb-common
hostname: node3
environment:
RELEASE_COOKIE: my_production_cookie
BARREL_NODE_NAME: barrel@node3
BARREL_ENABLE_CLUSTER: "true"
BARREL_SEED_NODES: "'barrel@node1'"
BARREL_REPLICATION_FACTOR: "2"
ports:
- "8083:8080"
volumes:
- node3-data:/app/data
depends_on:
- node1
networks:
vectordb-net:
driver: bridge
volumes:
node1-data:
node2-data:
node3-data:
With Ollama Embeddings
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
volumes:
- ollama-data:/root/.ollama
ports:
- "11434:11434"
vectordb:
image: registry.gitlab.enki.io/barrel-db/barrel_vectordb:latest
depends_on:
- ollama
environment:
BARREL_EMBEDDER_PROVIDER: ollama
BARREL_EMBEDDER_MODEL: nomic-embed-text
BARREL_EMBEDDER_URL: http://ollama:11434
ports:
- "8080:8080"
volumes:
- vectordb-data:/app/data
volumes:
ollama-data:
vectordb-data:
Kubernetes
Basic Deployment
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: barrel-vectordb
spec:
serviceName: barrel-vectordb
replicas: 3
selector:
matchLabels:
app: barrel-vectordb
template:
metadata:
labels:
app: barrel-vectordb
spec:
containers:
- name: vectordb
image: registry.gitlab.enki.io/barrel-db/barrel_vectordb:latest
ports:
- containerPort: 8080
name: http
- containerPort: 4369
name: epmd
- containerPort: 9100
name: dist
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: BARREL_NODE_NAME
value: "barrel@$(POD_NAME).barrel-vectordb"
- name: BARREL_ENABLE_CLUSTER
value: "true"
- name: BARREL_SEED_NODES
value: "'barrel@barrel-vectordb-0.barrel-vectordb'"
- name: RELEASE_COOKIE
valueFrom:
secretKeyRef:
name: barrel-secrets
key: erlang-cookie
volumeMounts:
- name: data
mountPath: /app/data
livenessProbe:
httpGet:
path: /vectordb/cluster/status
port: 8080
initialDelaySeconds: 60
periodSeconds: 15
readinessProbe:
httpGet:
path: /vectordb/cluster/status
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: barrel-vectordb
spec:
clusterIP: None # Headless service for StatefulSet
selector:
app: barrel-vectordb
ports:
- port: 8080
name: http
- port: 4369
name: epmd
- port: 9100
name: dist
---
apiVersion: v1
kind: Service
metadata:
name: barrel-vectordb-lb
spec:
type: LoadBalancer
selector:
app: barrel-vectordb
ports:
- port: 8080
targetPort: 8080
Health Checks
The container includes a built-in health check:
curl http://localhost:8080/vectordb/cluster/status
Response when healthy:
{
"state": "member",
"is_leader": true,
"nodes": ["barrel@node1", "barrel@node2", "barrel@node3"]
}
Ports
| Port |
Protocol |
Description |
| 8080 |
TCP |
HTTP API |
| 4369 |
TCP |
EPMD (Erlang Port Mapper Daemon) |
| 9100-9200 |
TCP |
Erlang distribution |
| 9090 |
TCP |
Prometheus metrics (optional) |
Volumes
| Path |
Description |
/app/data |
Persistent data (RocksDB, Ra logs) |
Data Persistence
Always mount /app/data to a persistent volume in production to avoid data loss.
Building Custom Images
# Clone repository
git clone https://gitlab.enki.io/barrel-db/barrel_vectordb.git
cd barrel_vectordb
# Build for current architecture
docker build -t my-barrel-vectordb .
# Build for multiple architectures
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t my-registry/barrel-vectordb:latest \
--push \
.