Files
lidar_rendu/Dockerfile

77 lines
2.3 KiB
Docker

FROM nvidia/cuda:12.4.0-devel-ubuntu22.04
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris
# Install system packages + Miniforge for PDAL >= 2.5 (Ubuntu 22.04 ships PDAL 2.3 which can't read COPC v1.1)
RUN apt-get update && apt-get install -y --no-install-recommends \
gdal-bin \
python3-gdal \
python3-pip \
python3-dev \
build-essential \
wget \
&& rm -rf /var/lib/apt/lists/* \
&& wget -q https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh -O /tmp/miniforge.sh \
&& bash /tmp/miniforge.sh -b -p /opt/conda \
&& rm /tmp/miniforge.sh \
&& /opt/conda/bin/conda install -y -c conda-forge pdal \
&& ln -sf /opt/conda/bin/pdal /usr/local/bin/pdal \
&& /opt/conda/bin/conda clean -afy
WORKDIR /app
# Install Python packages via pip
COPY requirements.txt .
RUN pip3 install --no-cache-dir \
numpy \
matplotlib \
whitebox \
rasterio \
'laspy[lazrs]' \
lazrs \
scikit-image \
scikit-learn \
scipy \
tqdm \
Pillow \
pytest \
numba \
rio-cogeo \
titiler.core \
fastapi \
uvicorn \
piexif \
pillow-avif-plugin \
cmcrameri
# Install CuPy for GPU acceleration (optional - will fallback to numpy if not available)
# CUPY_CUDA_COMPILE_WITH_CACHE=1 enables JIT compilation of kernels for
# GPU architectures not included in the pre-built wheel (e.g. sm_89, sm_120).
# The devel image includes nvcc for JIT compilation. If CuPy still fails
# (CUDA_ERROR_NO_BINARY_FOR_GPU), the pipeline falls back to CPU automatically.
ENV CUPY_CUDA_COMPILE_WITH_CACHE=1
RUN pip3 install --no-cache-dir cupy-cuda12x || echo "CuPy not available - GPU acceleration disabled"
# Copy and install the pipeline package
COPY setup.py .
COPY lidar_pipeline/ ./lidar_pipeline/
RUN pip3 install --no-cache-dir .
# Copy backward-compatible entry point
COPY process_lidar.py /usr/local/bin/
RUN chmod +x /usr/local/bin/process_lidar.py
# Create user with uid/gid 1000:1000 and run as that user
RUN groupadd -g 1000 lidar && \
useradd -u 1000 -g lidar -m lidar && \
mkdir -p /data/output /data/input && \
chown -R lidar:lidar /data /data/output /data/input
WORKDIR /data
USER lidar
VOLUME ["/data"]
CMD ["python3", "-m", "lidar_pipeline", "/data/input", "-o", "/data/output"]