dck

v1.16.0

Lightweight Container Runtime

No daemon~5 MB binaryOCI imagesBridge networking
01

Возможности

Zero Daemon

Нет фонового демона. ~5 MB статический бинарник. Работает через Linux namespaces (PID, Mount, Net, UTS, IPC).

OCI Images

Полная поддержка OCI/Docker образов. Pull, run, commit — как в Docker, но без демона.

Bridge Network

Встроенная сеть dck0 (10.0.2.0/24) с iptables DNAT для port forwarding. Каждый контейнер получает IP 10.0.2.X.

Multi-Container Config

Описывайте multi-container конфигурации в dck.toml и запускайте одной командой dck up.

Health Checks

Встроенные healthcheck'и с интервалом, retry и timeout. Автоматический перезапуск при падении.

dck stats

Мониторинг ресурсов в реальном времени: CPU, RAM, I/O, PIDs через cgroup v2.

02

Установка и быстрый старт

Установка

terminal
curl -sSL https://raw.githubusercontent.com/animesao/dck/main/install.sh | sudo bash

# Debian/Ubuntu
curl -sSL https://raw.githubusercontent.com/animesao/dck/main/scripts/install-apt.sh | sudo bash

# Snap
sudo snap install dck

# Проверка
dck --version

Требования: Linux с unshare, nsenter, ip, iptables, mount, overlayfs

Быстрый старт

terminal
# Одноразовый контейнер
dck run --rm alpine echo "hello from dck!"

# Веб-сервер в фоне
dck run -d -n web -p 8080:80 nginx:alpine
curl http://localhost:8080

# Интерактивная сессия
dck run -it alpine sh

# Логи
dck logs -f web
03

Управление образами и контейнерами

Образы

terminal
# Pull образов
dck pull alpine
dck pull nginx:alpine

# Список локальных образов
dck images

# Удалить образ
dck rmi nginx:alpine

Жизненный цикл контейнеров

terminal
# Создать и запустить
dck run --rm alpine echo hi
dck run -d -n web -p 80:80 nginx

# Управление
dck ps -a           # Все контейнеры
dck stop web        # Стоп
dck start web       # Старт
dck restart web     # Рестарт
dck rm -f web       # Принудительно удалить
dck system prune    # Очистка
dck commit web my-image:v1
04

Multi-Container

dck.toml

terminal
# dck.toml
[container.web]
image = "nginx:alpine"
ports = ["80:80", "443:80"]
volumes = ["./html:/usr/share/nginx/html"]
restart = "always"

[container.db]
image = "postgres:16"
ports = ["5432:5432"]
env = { POSTGRES_PASSWORD = "secret", POSTGRES_DB = "myapp" }
volumes = ["pg_data:/var/lib/postgresql/data"]
restart = "always"

dck up     # Запустить всё
dck down   # Остановить всё
dck up web # Только web
dck down -a# Удалить всё

Архитектура хранения

terminal
Storage: /root/.dck/
images/        OCI rootfs per tag
containers/    State JSON files
overlay/       upper/work/merged
logs/          Container stdout/stderr
consoles/      Unix sockets for attach
networks/      IP allocation pool

dck run -d → unshare --fork --pid --mount --net --uts --ipc dck init <id>

dck init → chroot overlay → setup /proc/lo/eth0 → exec CMD

05

Примеры использования

PostgreSQL

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

MySQL

terminal
dck run -d --restart always \
  -n mysql -p 3306:3306 \
  -v mysql_data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=rootpass \
  -e MYSQL_DATABASE=myapp \
  mysql:8

Python Flask

terminal
dck run -d --restart always \
  -n flask -p 5000:5000 \
  -v /opt/flask-app:/app \
  python:3.11-slim \
  sh -c "pip install flask && python /app/app.py"

Node.js

terminal
dck run -d --restart always \
  -n node-app -p 3000:3000 \
  -v /opt/node-app:/app \
  node:20 node /app/index.js

Minecraft

terminal
dck run -d --restart always \
  -n mc -p 25565:25565 \
  -v mc_data:/data \
  -e EULA=TRUE \
  itzg/minecraft-server

Redis

terminal
dck run -d --restart always \
  -n redis -p 6379:6379 \
  -v redis_data:/data \
  redis:7 --appendonly yes
06

Сравнение и флаги

dck vs Docker

ФичаdckDocker
ДемонНетdockerd
Размер~5 MB~100+ MB
NamespacesPID, Mount, Net, UTS, IPCAll
Сетьdck0 (10.0.2.0/24)docker0
Формат образовOCI/Docker V2OCI/Docker V2

Флаги запуска

-dDetach (background)
-nContainer name
-pPort mapping host:container
-vVolume mount src:dst
-eEnvironment variable
--rmAuto-remove on exit
--restartRestart policy
--startupStartup script (inline or @file)