blob: 0347f0d4d7b66466b6be1f34393c3224a481a771 [file]
---
title: Docker & Helm
---
## Docker
You can easily run the Iggy server with Docker - the official images can be found [here](https://hub.docker.com/r/apache/iggy), simply type `docker pull apache/iggy`.
Below is an example of the `docker-compose.yml` file which additionally overrides the default configuration (described in the section below) with the environment variables. If you prefer using the configuration file, you can mount it as a volume and provide the path to it with the `IGGY_CONFIG_PATH` environment variable.
When running the container, **make sure to include the additional capabilities** required by `io_uring` and CPU affinity:
```yaml
iggy:
image: apache/iggy:latest
container_name: iggy
restart: unless-stopped
cap_add:
- SYS_NICE
security_opt:
- seccomp:unconfined
ulimits:
memlock:
soft: -1
hard: -1
environment:
- IGGY_ROOT_USERNAME=iggy
- IGGY_ROOT_PASSWORD=Secret123
- IGGY_HTTP_ENABLED=true
- IGGY_HTTP_ADDRESS=0.0.0.0:80
- IGGY_TCP_ENABLED=true
- IGGY_TCP_ADDRESS=0.0.0.0:3000
- IGGY_QUIC_ENABLED=false
- IGGY_WEBSOCKET_ENABLED=false
- IGGY_HEARTBEAT_ENABLED=true
- IGGY_HEARTBEAT_INTERVAL=5s
ports:
- "3010:80"
- "5100:3000"
networks:
- iggy
volumes:
- iggy:/iggy/local_data
networks:
iggy:
volumes:
iggy:
```
Or when running with `docker run`:
```
docker run --cap-add=SYS_NICE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 apache/iggy:edge
```
### Why these capabilities?
- **`SYS_NICE`** - required for setting CPU affinity (`sched_setaffinity`) in the thread-per-core architecture
- **`seccomp:unconfined`** - required for `io_uring` syscalls which are blocked by Docker's default seccomp profile
- **`memlock: -1`** - `io_uring` needs to lock memory pages shared between user space and kernel
### Available images
| Image | Description |
|-------|-------------|
| `apache/iggy` | Server + CLI |
| `apache/iggy-web-ui` | Standalone Web UI |
| `apache/iggy-connect` | Connectors runtime |
| `apache/iggy-mcp` | MCP server |
Images tagged `latest` are based on stable releases. Images tagged `edge` are built from the latest `master` branch.
### Building from source
The Dockerfile uses a multi-stage build: Rust compilation (including the Web UI via npm), then a minimal Debian slim image. To build:
```bash
docker build -t iggy .
```
Or use `docker compose up` directly from the repository root.
### Running the CLI inside the container
```bash
docker exec -it iggy-server /iggy -u iggy -p iggy stream list
```
## Helm charts
Helm charts for Kubernetes deployment are available in the [repository](https://github.com/apache/iggy/tree/master/helm/charts/iggy).
### Quick start
```bash
helm install iggy ./helm/charts/iggy
```
### Chart components
The chart includes templates for:
- **Deployment** - the Iggy server pod with required security context (SYS_NICE, seccomp unconfined, unlimited memlock)
- **Service** - exposes TCP (8090), QUIC (8080), HTTP (3000), and WebSocket (8092) ports
- **ServiceAccount** - dedicated service account
- **PersistentVolumeClaim** - persistent storage for `local_data`
- **HPA** - Horizontal Pod Autoscaler (optional)
- **Ingress** - optional ingress for HTTP access
- **ServiceMonitor** - Prometheus ServiceMonitor for metrics collection (optional)
- **Secret** - root user credentials
### Key values
```yaml
# values.yaml (excerpt)
replicaCount: 1
image:
repository: apache/iggy
tag: latest
persistence:
enabled: true
size: 10Gi
resources:
limits:
memory: 8Gi
requests:
cpu: 2
memory: 4Gi
serviceMonitor:
enabled: false
```
Customize the values file for your environment and deploy with:
```bash
helm install iggy ./helm/charts/iggy -f my-values.yaml
```