# cuframes-composer — production Docker image. # # Multi-stage: # 1) builder: nvidia/cuda CUDA-toolkit + build deps + cmake build # 2) runtime: nvidia/cuda base (минимум: libcudart) + runtime deps + бинарь # # Размер runtime image: ~250 MB (cuda runtime + apt-deps). Build image: ~5 GB. # # Использование: # docker build -t gx/cuframes-composer:0.1 -f docker/Dockerfile . # docker run --gpus all --network=cctv --ipc=container:cuframes-ipc-anchor \ # -v cctv_cuframes_sock:/run/cuframes:ro \ # -v cuda_grid_icons:/icons:ro \ # -v /usr/share/fonts/truetype/dejavu:/fonts:ro \ # -p 5599:5599 \ # gx/cuframes-composer:0.1 grid_record --out - --control tcp://0.0.0.0:5599 ... # # Лицензия: LGPL-2.1+ # ── Builder ────────────────────────────────────────────────────────────── # CUDA 12 (не 13) — нужен для sm_61 (Pascal GTX 1050) в production. # CUDA 13 deprecated Pascal. Ubuntu 22.04 jammy glibc 2.35 forward-compat # на хосте 24.04 noble (glibc 2.39). FROM nvidia/cuda:12.4.1-devel-ubuntu22.04 AS builder RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential cmake git \ libpng-dev libfreetype-dev \ libzmq3-dev libjson-c-dev libmosquitto-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /src COPY . . RUN git submodule update --init --recursive || true # CUDA architectures: production targets compiled to real binary, # а sm_89-virtual генерит PTX для forward JIT на newer GPU (Blackwell sm_120 # = JIT на старте при первом kernel'е). Это избавляет нас от требования # CUDA 12.8+ который sm_120 native. CUDA 12.4 здесь — sweet spot между # Pascal (sm_61) и Ada (sm_89). RUN mkdir -p build && cd build && \ cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CUDA_ARCHITECTURES="61-real;75-real;86-real;89-real;89-virtual" \ .. && \ make -j$(nproc) # ── Runtime ────────────────────────────────────────────────────────────── # runtime variant включает libcudart12 (нужен grid_record/simple_record). FROM nvidia/cuda:12.4.1-runtime-ubuntu22.04 AS runtime # Ubuntu 22.04 jammy: package names иные чем noble (libpng16-16 без t64). # libcudart12 уже в runtime image; здесь только наши user-space deps. RUN apt-get update && apt-get install -y --no-install-recommends \ libpng16-16 libfreetype6 \ libzmq5 libjson-c5 libmosquitto1 \ fonts-dejavu-core \ && rm -rf /var/lib/apt/lists/* # Бинари + libcuframes (статически слинкована не вся, libcuframes shared нужен). COPY --from=builder /src/build/examples/grid_record /usr/local/bin/grid_record COPY --from=builder /src/build/examples/simple_record /usr/local/bin/simple_record COPY --from=builder /src/build/third_party/cuframes/libcuframes/libcuframes.so.0.4.0 \ /usr/lib/x86_64-linux-gnu/libcuframes.so.0 COPY --from=builder /src/build/src/libcuframes_composer.so.0.1.0 \ /usr/lib/x86_64-linux-gnu/libcuframes_composer.so.0 # NVIDIA_DRIVER_CAPABILITIES должен включать 'video' для NVENC через libnvidia-encode. ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility,video ENTRYPOINT ["/usr/local/bin/grid_record"] CMD ["--help"]