Files
cuframes-composer/docker/Dockerfile
T
gx f8e27b9e85 Phase 10/11 WIP — pool + motion-mode + 8×8 templates (rolled back)
Объединённое состояние работ:
  - Phase 10: source pool, motion-driven layout, Frigate motion_pulse,
    zone-filter в pool, --source / --motion-mode CLI
  - Phase 11 Steps 1-3c: 8×8 микро-сетка, JSON templates с asymmetric
    layouts (tpl_1/3/4/5/6/7/8), reload через ZMQ, auto-labels per camera

В прод отдеплоено и откачено: используем gx/cuframes-composer:0.10 как
baseline. Phase 11 продолжится в branch phase11b-cpp как C++ refactor
с ООП-моделью Cell/Layout/Decoration.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-03 21:24:23 +01:00

92 lines
4.7 KiB
Docker
Raw 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.
# 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 pkg-config \
libpng-dev libfreetype-dev \
libzmq3-dev libjson-c-dev libmosquitto-dev \
libavformat-dev libavcodec-dev libavutil-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.
# netcat-openbsd — для healthcheck'а через ZMQ ping (см. HEALTHCHECK ниже).
# ffmpeg — для transmux raw h264 → mpegts (shell pipe chain после
# grid_record); без него ffmpeg-mux downstream не справляется с
# intra refresh без IDR boundaries.
RUN apt-get update && apt-get install -y --no-install-recommends \
libpng16-16 libfreetype6 \
libzmq5 libjson-c5 libmosquitto1 \
libavformat58 libavcodec58 libavutil56 \
fonts-dejavu-core \
netcat-openbsd \
&& 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
# Phase 11 — layout templates.json. Editable in-container или mount override.
COPY docker/templates.json /etc/cfc-grid/templates.json
# NVIDIA_DRIVER_CAPABILITIES должен включать 'video' для NVENC через libnvidia-encode.
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility,video
# Healthcheck — проверяет что ZMQ control plane port слушается.
# Полная functional проверка через ZMQ ping требует ZMTP handshake (plain nc
# не подходит — это binary wire protocol с greeting), поэтому здесь только
# liveness через TCP probe. Composer thread'ы (compose/encode) могут зависнуть
# без падения main process'а, но external monitor (MQTT health uptime_s,
# Prometheus в Phase 7) дополнит контроль over time.
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD nc -z 127.0.0.1 5599 || exit 1
ENTRYPOINT ["/usr/local/bin/grid_record"]
CMD ["--help"]