cardinal
CARDINAL
NO DAEMON · JUST CONTAINERS
v2.0.31 · stable ~5 MB static binary no daemonMIT · Go 1.26+

No daemon.
No Docker.
Just containers.

cardinal — лёгкий container runtime на Go: статический бинарь ~5 MB, ноль демонов, OCI-образы, bridge-сеть cardinal0, кластер, FaaS, бэкапы с шифрованием и supervisor на systemd.

$ cardinal run --rm alpine echo hi → hibridge cardinal0 10.0.2.1/24
~5 MB
статический бинарь — меньше, чем скриншот
0
демонов, сокетов dockerd, фоновых служб
52+
команды: run, ps, fs, cp, cluster, fn…
30+
опасных syscall заблокировано seccomp
cardinal — live demo · zsh
➜ ~
~5 MB static binary
no daemon · seccomp on
Debian Ubuntu Arch Fedora Alpine NixOS Gentoo Void Snap AppImage OCI images bridge net Debian Ubuntu Arch Fedora Alpine NixOS Gentoo Void Snap AppImage OCI images bridge net
Почему cardinal

Контейнеры без боли. Демон не нужен.

Один бинарь делает всё: namespaces, overlayfs, veth + iptables, cgroups v2, бэкапы, кластер и FaaS. Файлы переживают cardinal stop — смотри их через cardinal fs.

core

No daemon, no Docker

Нет dockerd, нет фоновых служб. cardinal run -d — короткий unshare + namespaces, а переживание ребута берёт на себя systemd-supervisor.

~5 MB

Микроскопический

Статический бинарь ~5 MB против 100+ MB Docker. Ставится одной командой, обновляется через cardinal update.

OCI-образы

pull / push / build / commit / verify — Docker Hub, ghcr, quay, multi-arch. Офлайн-проверка дайджестов из коробки.

Bridge-сеть из коробки

Каждый контейнер — 10.0.2.X на мосту cardinal0, хост — 10.0.2.1. Интернет и DNS (8.8.8.8) сразу, порты — мгновенно: port add.

Security по умолчанию

seccomp режет 30+ опасных syscall, AppArmor, --isolated, read-only /sys, audit-логи и шифрование бэкапов AES-256-GCM.

Бэкапы и overlay

backup enable --interval 6h — снапшоты overlay + volumes по расписанию, verify архивов, restore в остановленный контейнер.

Cluster · FaaS · Compose

cardinal.toml + up, cluster-оркестрация, fn-функции, service с healthcheck, blueprints и Docker-совместимый REST API для панелей.

Видно всё внутри

fs ls / cat / tree / find работают даже на остановленных контейнерах, cp таскает файлы туда-сюда, attach — Ctrl+C safe.

quick start

От нуля до nginx за 30 секунд

Требования: Linux с unshare, nsenter, ip, iptables, mount, pgrep + namespaces (PID/Mount/Net/UTS/IPC) + overlayfs. Выбери способ установки — дальше всё одинаково.

~/ quickstart.sh
curl -fsSL https://raw.githubusercontent.com/animesao/cardinal/main/install.sh | sudo bash
use cases

Что запускают на cardinal

Web · nginx

Статика, Flask, Node — с Volumes и live-файлами.

cardinal run -d --restart always \
  -n web -p 8080:80 \
  -v /data/site:/usr/share/nginx/html \
  nginx:alpine

Minecraft Paper

Java 21 + jar на хосте, данные в bind-mount.

cardinal run -d --restart always \
  -n mc-paper -p 25565:25565 \
  -v $PWD:/data --memory 4G \
  eclipse-temurin:21-jdk \
  java -Xmx3500M -jar paper.jar nogui

Telegram / Discord боты

Зависимости ставятся в overlay и переживают рестарт.

cardinal run -d --restart always \
  -n tg-bot -v /data/tg-bot:/bot \
  -e BOT_TOKEN=secret \
  --startup "pip install -r /bot/requirements.txt \
  && exec python /bot/bot.py" \
  python:3.12

Postgres + Redis

Базы на named volumes, бот ходит через 10.0.2.1.

cardinal run -d --restart always \
  -n pg -p 5432:5432 \
  -v pg_data:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret \
  postgres:16

cardinal.toml

Весь стек — одним файлом и одной командой.

[container.web]
image = "nginx:alpine"
ports = ["80:80"]
restart = "always"

[container.db]
image = "postgres:16"
env = { POSTGRES_PASSWORD = "secret" }
# cardinal up / cardinal down

Wings + Panel

REST-агент для удалённого управления и фронтендов.

curl -fsSL https://cardinal.spcfy.eu/\
downloads/install-wings.sh \
  -o /tmp/install-wings.sh
sudo bash /tmp/install-wings.sh
curl -H "Authorization: Bearer KEY" \
  http://localhost:8080/v1/containers
comparison

cardinal vs Docker

FeaturecardinalDocker
DaemonNo daemon ✓dockerd required
Binary size~5 MB100+ MB
Image formatOCI / Docker V2OCI / Docker V2
Bridge networkcardinal0 10.0.2.0/24docker0
Auto-startsystemd supervisorsystemd dockerd
Cluster / rolling updates✓ built-in✓ Swarm
Seccomp / AppArmor✓ default + custom
Backup encryption✓ AES-256-GCM
Audit logging✓ container eventsvia auditd
architecture

Как это устроено

Storage: $CARDINAL_DATA_DIR (default: /root/.cardinal/)
  images/ containers/ overlay/ logs/ consoles/ networks/

cardinal run -d
  ├─ unshare --fork --pid --mount --net --uts --ipc cardinal init <id>
  │   └─ pivot_root → overlay → /proc + lo + eth0 → exec CMD
  └─ cardinal console-serve <id>  → stdout pipe → log file → unix socket → attach

System boot → systemd → cardinal-bootstrap.service → supervisor
  └─ adopt --restart always containers → overlay → veth + iptables → monitor + restart-delay
changelog

v2.0.31 — живой проект

v2.0.31

v2.0.31 — Синхронизация документации, установки, AppImage и релизной автоматики с корневым файлом VERSION.

v1.24.0

v1.24.0 — Харденинг: seccomp (30+ заблокированных syscall), AppArmor, изоляция --isolated, шифрование бэкапов AES-256-GCM, audit-логи.

v1.23.0

v1.23.0 — Supervisor с задержками и crash-loop защитой, плановые бэкапы с verify, offline verify образов, двуязычные EN/RU доки.

v1.22.31

v1.22.31 — OCI-разархивация, systemd recovery, ротация логов, inspect JSON, кластер, FaaS, blueprints, Compose, healthcheck, REST API.

v1.20.0 → v1.10.0

v1.20.0 → v1.10.0 — Динамические порты, pivot_root фикс, disk-лимиты, --startup скрипты, stats из cgroup v2, attach через Unix-socket.