# NowYouSeeMe Docker Image # Multi-stage build for optimized production image # Stage 1: Build environment FROM ubuntu:20.04 AS builder # Set environment variables ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH} # Install system dependencies RUN apt-get update && apt-get install -y \ build-essential \ cmake \ git \ wget \ curl \ pkg-config \ libopencv-dev \ libeigen3-dev \ libboost-all-dev \ libssl-dev \ libffi-dev \ python3 \ python3-pip \ python3-dev \ python3-venv \ && rm -rf /var/lib/apt/lists/* # Install CUDA (if needed for GPU support) # Uncomment the following lines if CUDA support is required # RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb \ # && dpkg -i cuda-keyring_1.0-1_all.deb \ # && apt-get update \ # && apt-get install -y cuda-toolkit-11-6 # Create virtual environment RUN python3 -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # Copy requirements and install Python dependencies COPY requirements.txt /tmp/ RUN pip install --upgrade pip setuptools wheel RUN pip install -r /tmp/requirements.txt # Copy source code COPY . /app/ WORKDIR /app # Build C++ components RUN chmod +x tools/build.sh RUN ./tools/build.sh # Stage 2: Runtime environment FROM ubuntu:20.04 AS runtime # Set environment variables ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV PATH="/opt/venv/bin:$PATH" # Install runtime dependencies RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ libopencv-core4.2 \ libopencv-imgproc4.2 \ libopencv-imgcodecs4.2 \ libopencv-videoio4.2 \ libopencv-highgui4.2 \ libeigen3-dev \ libboost-system1.71.0 \ libboost-thread1.71.0 \ libssl1.1 \ libffi6 \ && rm -rf /var/lib/apt/lists/* # Copy virtual environment from builder COPY --from=builder /opt/venv /opt/venv # Copy built application COPY --from=builder /app/build /app/build COPY --from=builder /app/src /app/src COPY --from=builder /app/tools /app/tools COPY --from=builder /app/config /app/config COPY --from=builder /app/docs /app/docs # Create non-root user RUN useradd -m -u 1000 nowyouseeme && \ chown -R nowyouseeme:nowyouseeme /app # Set working directory WORKDIR /app # Switch to non-root user USER nowyouseeme # Expose ports EXPOSE 8080 8081 8082 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD python3 -c "import sys; sys.exit(0)" || exit 1 # Default command CMD ["python3", "src/ui/holodeck_ui.py"] # Stage 3: Development environment (optional) FROM runtime AS development # Install development dependencies USER root RUN apt-get update && apt-get install -y \ git \ vim \ gdb \ valgrind \ && rm -rf /var/lib/apt/lists/* # Install development Python packages RUN pip install \ pytest \ pytest-cov \ black \ flake8 \ mypy \ pylint # Switch back to non-root user USER nowyouseeme # Development command CMD ["bash"]