136 lines
3.1 KiB
Docker
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"] |