Files
cuframes/docker/docker-compose.dev.yml
T
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

51 lines
1.9 KiB
YAML

# Dev-окружение: один контейнер с bind-mount к корню репо, GPU доступ.
#
# Запуск:
# docker compose -f docker/docker-compose.dev.yml up -d
# docker compose -f docker/docker-compose.dev.yml exec dev bash
#
# Все артефакты сборки попадают в /workspace/build (на хосте — ./build),
# в git исключены через .gitignore.
services:
dev:
build:
context: ..
dockerfile: docker/Dockerfile.dev
image: cuframes-dev:latest
container_name: cuframes-dev
hostname: cuframes-dev
init: true # PID 1 = tini, чтобы Ctrl-C корректно
stdin_open: true
tty: true
# GPU + CUDA IPC требует shared IPC namespace для cross-process тестов
# внутри docker (producer и consumer в одном контейнере — ок без host)
ipc: shareable
runtime: nvidia
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu, compute, utility, video]
environment:
NVIDIA_VISIBLE_DEVICES: all
NVIDIA_DRIVER_CAPABILITIES: "compute,utility,video"
# Чтобы CUDA IPC handles работали через /dev/shm
# (в default docker /dev/shm обрезан 64 MB; здесь поднимаем)
shm_size: "2gb"
volumes:
# Bind-mount корня репо → /workspace
- ../:/workspace:cached
# CUDA IPC создаёт Unix-sockets в /run/cuframes, /dev/shm — bind на host
# для cross-container scenarios (через ipc=shareable + host-side mounts)
- /run/cuframes:/run/cuframes:rw
# Useful caps для perf / valgrind / gdb
cap_add:
- SYS_PTRACE
security_opt:
- seccomp:unconfined
working_dir: /workspace
command: tail -f /dev/null # держать контейнер живым, в него exec'аемся