# 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'аемся