Files
NYSM-NYD/Dockerfile

136 lines
3.1 KiB
Docker

# 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"]