---
title: "Container Images"
sidebarTitle: "Images"
description: "Build and publish Siclaw container images for Kubernetes deployment."
---

## What Docker Supports Today

Siclaw ships three Dockerfiles, one per deployment image:

- `portal` — Web UI + REST API + DB (the user-facing front door)
- `runtime` — Control plane: channels, cron, AgentBox spawner
- `agentbox` — Per-user execution runtime (spawned by Runtime)

For a single-machine setup, use [CLI & Local Server](/install/cli). The repository does **not** include a supported `docker compose` deployment.

## Build Images

From the repo root:

```bash
make docker REGISTRY=registry.example.com/myteam TAG=latest
```

That builds:

- `registry.example.com/myteam/siclaw-runtime:latest`
- `registry.example.com/myteam/siclaw-portal:latest`
- `registry.example.com/myteam/siclaw-agentbox:latest`

To build one image only:

```bash
make docker-runtime  REGISTRY=registry.example.com/myteam TAG=latest
make docker-portal   REGISTRY=registry.example.com/myteam TAG=latest
make docker-agentbox REGISTRY=registry.example.com/myteam TAG=latest
```

## Push Images

```bash
make push REGISTRY=registry.example.com/myteam TAG=latest
```

Or push individually:

```bash
make push-runtime  REGISTRY=registry.example.com/myteam TAG=latest
make push-portal   REGISTRY=registry.example.com/myteam TAG=latest
make push-agentbox REGISTRY=registry.example.com/myteam TAG=latest
```

## Runtime Notes

- The Portal image serves the Web UI on container port `3003`.
- Runtime and AgentBox communicate over mTLS inside the cluster.
- The AgentBox image is designed to be spawned by the Runtime inside Kubernetes.
- Core skills are baked into the images; dynamic skills and credentials are synced at runtime.

## Next Step

After publishing images, continue with [Kubernetes Deployment](/install/kubernetes).
