dck
v1.16.0Lightweight Container Runtime
Возможности
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.
Установка и быстрый старт
Установка
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
Быстрый старт
# Одноразовый контейнер
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Управление образами и контейнерами
Образы
# Pull образов
dck pull alpine
dck pull nginx:alpine
# Список локальных образов
dck images
# Удалить образ
dck rmi nginx:alpineЖизненный цикл контейнеров
# Создать и запустить
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:v1Multi-Container
dck.toml
# 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# Удалить всёАрхитектура хранения
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 pooldck run -d → unshare --fork --pid --mount --net --uts --ipc dck init <id>
dck init → chroot overlay → setup /proc/lo/eth0 → exec CMD
Примеры использования
PostgreSQL
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:16MySQL
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:8Python Flask
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
dck run -d --restart always \
-n node-app -p 3000:3000 \
-v /opt/node-app:/app \
node:20 node /app/index.jsMinecraft
dck run -d --restart always \
-n mc -p 25565:25565 \
-v mc_data:/data \
-e EULA=TRUE \
itzg/minecraft-serverRedis
dck run -d --restart always \
-n redis -p 6379:6379 \
-v redis_data:/data \
redis:7 --appendonly yesСравнение и флаги
dck vs Docker
| Фича | dck | Docker |
|---|---|---|
| Демон | Нет | dockerd |
| Размер | ~5 MB | ~100+ MB |
| Namespaces | PID, Mount, Net, UTS, IPC | All |
| Сеть | dck0 (10.0.2.0/24) | docker0 |
| Формат образов | OCI/Docker V2 | OCI/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)