Files
gx 6962bc3c7e docker: dev environment с CUDA 12.4 + build tools
Dockerfile.dev + docker-compose.dev.yml + docker/README.md.

Base: nvidia/cuda:12.4.1-cudnn-devel-ubuntu24.04.

В контейнер включены:
- CUDA toolkit (nvcc, headers, libs)
- GCC 12, Clang + clang-format + clang-tidy
- CMake + Ninja
- FFmpeg dev headers (6.x системные) — для linking при разработке filter
- Python 3.12 + dev (для Phase 3 bindings)
- Profiling/debug tools: valgrind, gdb, strace, ltrace

docker-compose.dev.yml настройки:
- runtime: nvidia + --gpus all
- ipc: shareable — для cross-container CUDA IPC (Phase 1+)
- shm_size: 2gb — стандартный 64 MB не хватит для frame buffers
- SYS_PTRACE + seccomp:unconfined — для gdb/strace внутри (dev-only)
- bind-mount корня репо → /workspace
- /run/cuframes для Unix sockets

Использование документировано в docker/README.md.

Production-images (FFmpeg-with-plugin, Frigate drop-in) — отдельная
работа в Phase 4.
2026-05-14 21:18:32 +01:00

81 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Docker for cuframes
Все сборки и тесты делаются в Docker. Хостовый CUDA toolkit не нужен —
только NVIDIA driver + nvidia-container-toolkit.
## Развёртывание dev-окружения
```bash
# Один раз (поднимет dev-контейнер на фоне)
docker compose -f docker/docker-compose.dev.yml up -d
# Войти в контейнер
docker compose -f docker/docker-compose.dev.yml exec dev bash
```
После `up -d` контейнер `cuframes-dev` живёт пока его не остановят. Repo
смонтирован в `/workspace`.
Проверка что CUDA видна:
```bash
docker compose -f docker/docker-compose.dev.yml exec dev nvidia-smi
docker compose -f docker/docker-compose.dev.yml exec dev nvcc --version
```
## Что внутри
| Компонент | Версия | Зачем |
|---|---|---|
| Ubuntu | 24.04 | base |
| CUDA Toolkit | 12.4.1 | для `nvcc`, headers, runtime libs |
| cuDNN | 9 | для возможных bindings к ONNX |
| GCC | 12 | стандартный для Ubuntu 24.04 |
| Clang + clang-format + clang-tidy | системные | code style + static analysis |
| CMake | системный (≥3.28) | build |
| Ninja | системный | быстрее make |
| FFmpeg dev headers | системные (6.x) | для linking при разработке filter |
| Python 3 + dev | системный (3.12) | bindings (Phase 3) |
| Profiling | valgrind, gdb, strace, ltrace | debug-набор |
## Что снаружи (на хосте)
Требуется:
- NVIDIA driver ≥ 555 (для CUDA 12.4)
- [nvidia-container-toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)
- Docker Engine с `--gpus` поддержкой
- Каталог `/run/cuframes` (создаётся compose'ом с rw-доступом, либо `sudo mkdir -p /run/cuframes && sudo chown $USER /run/cuframes`)
## Ограничения / нюансы
- **`shm_size: 2gb`** — `/dev/shm` контейнера, нужен для CUDA IPC handles
и producer/consumer shared memory rings. Default 64 MB не хватит.
- **`ipc: shareable`** — позволяет связывать namespace с другими контейнерами
через `ipc: "container:cuframes-dev"`. Нужно для cross-container CUDA IPC.
- **`SYS_PTRACE` cap + `seccomp:unconfined`** — для gdb / strace inside.
Снимать в production-builds.
- Sysctl / ulimits — bind-mount файла `/etc/security/limits.conf` в init не
гарантирует применения (зависит от docker config). Если CUDA-IPC даст
`EMFILE` — поднять host-side `ulimit -n 65536` перед `docker compose up`.
## Полезные команды (внутри контейнера)
```bash
# Build cuframes (когда появится CMakeLists.txt)
cmake -B build -S . -G Ninja
cmake --build build -j
# Run tests
ctest --test-dir build --output-on-failure
# Phase 0 spike измерения
./build/tools/spike/pingpong_producer cam_test &
./build/tools/spike/pingpong_consumer cam_test
```
## Distribution / production images
Это **dev-окружение**. Production-images (для FFmpeg-with-cuframes-plugin,
Frigate drop-in) — отдельные Dockerfiles в `docker/ffmpeg-cuframes/` и
`docker/ffmpeg-cuframes-frigate/`, появятся в Phase 4.