multiarch accelerated base image
Some checks failed
Build-Publish-Multi-Arch / build (linux/amd64) (push) Successful in 11s
Build-Publish-Multi-Arch / build (linux/arm64) (push) Failing after 19s
Build-Publish-Multi-Arch / create-manifest (push) Has been skipped

This commit is contained in:
Your Name
2025-09-22 23:58:31 +12:00
parent 943172e8e0
commit 5b01992b33

View File

@@ -1,155 +1,100 @@
# Accelerated Base Image with Intel QuickSync, NVIDIA CUDA, FFmpeg, and Python support
# Provides a comprehensive base for ML/CV applications with hardware acceleration
# Multi-architecture accelerated base image with hardware encoding support
# Supports Intel QuickSync, NVIDIA CUDA, FFmpeg, and Python
FROM ubuntu:22.04
LABEL maintainer="j"
LABEL description="Base image with Intel QuickSync, NVIDIA CUDA support, FFmpeg, and Python 3.11"
# Prevent interactive prompts during package installation
ENV DEBIAN_FRONTEND=noninteractive
# Install system dependencies including Intel and NVIDIA support
# Install base dependencies and development tools
RUN apt-get update && apt-get install -y \
# Base utilities
# Basic tools
curl \
wget \
git \
build-essential \
pkg-config \
software-properties-common \
# Python 3.11
python3.11 \
python3.11-dev \
cmake \
# Python and pip
python3 \
python3-pip \
python3.11-venv \
# FFmpeg with hardware acceleration support
ffmpeg \
# VAAPI dependencies (generic, works on both x86_64 and arm64)
python3-dev \
# Media libraries
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libswscale-dev \
libavdevice-dev \
libavfilter-dev \
# Intel Media SDK dependencies (for QuickSync)
intel-media-va-driver-non-free \
vainfo \
libva-drm2 \
libva-dev \
libva2 \
# OpenGL/Graphics libraries
libgl1 \
libva-drm2 \
libva-x11-2 \
# Additional libraries
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender-dev \
libgomp1 \
libglu1-mesa \
libglu1-mesa-dev \
libgl1-mesa-dev \
libgl1-mesa-glx \
# OpenCV dependencies
libopencv-dev \
libgstreamer1.0-0 \
libgstreamer-plugins-base1.0-0 \
libgstreamer-plugins-bad1.0-0 \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
gstreamer1.0-tools \
# Video codec libraries
libx264-dev \
libx265-dev \
libvpx-dev \
libfdk-aac-dev \
libmp3lame-dev \
libopus-dev \
# Image format libraries
libjpeg-dev \
libpng-dev \
libtiff-dev \
libwebp-dev \
# Additional ML/numeric libraries
libhdf5-dev \
libatlas-base-dev \
gfortran \
# Clean up
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install architecture-specific Intel drivers (only on x86_64)
RUN if [ "$(dpkg --print-architecture)" = "amd64" ]; then \
apt-get update && apt-get install -y \
intel-media-va-driver-non-free \
i965-va-driver \
&& rm -rf /var/lib/apt/lists/*; \
# Install FFmpeg with hardware acceleration support
# Using static build for consistency across architectures
RUN ARCH=$(uname -m) && \
if [ "$ARCH" = "x86_64" ]; then \
wget -q https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz && \
tar -xf ffmpeg-master-latest-linux64-gpl.tar.xz && \
mv ffmpeg-master-latest-linux64-gpl/bin/* /usr/local/bin/ && \
rm -rf ffmpeg-master-latest-linux64-gpl*; \
elif [ "$ARCH" = "aarch64" ]; then \
wget -q https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linuxarm64-gpl.tar.xz && \
tar -xf ffmpeg-master-latest-linuxarm64-gpl.tar.xz && \
mv ffmpeg-master-latest-linuxarm64-gpl/bin/* /usr/local/bin/ && \
rm -rf ffmpeg-master-latest-linuxarm64-gpl*; \
fi
# Set Python 3.11 as default
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1 && \
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 && \
update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
# Install NVIDIA CUDA support (will be ignored on non-NVIDIA systems)
# Using a minimal CUDA runtime that works on both architectures
RUN ARCH=$(uname -m) && \
if [ "$ARCH" = "x86_64" ]; then \
apt-get update && \
apt-get install -y --no-install-recommends \
cuda-compat-11-8 \
libnvidia-encode-515 \
libnvidia-decode-515 \
|| echo "CUDA packages not available, skipping"; \
elif [ "$ARCH" = "aarch64" ]; then \
echo "ARM64 CUDA support will be provided by host system if available"; \
fi && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Upgrade pip and install essential Python packages
RUN python -m pip install --upgrade pip setuptools wheel
# Create non-root user for running applications
RUN useradd -m -s /bin/bash appuser
# Install core Python ML/CV packages (CPU versions by default)
# CUDA versions can be overlaid at runtime or in derived images
RUN pip install --no-cache-dir \
# Set up Python environment
RUN pip3 install --no-cache-dir --upgrade pip setuptools wheel
# Install commonly needed Python packages for media processing
RUN pip3 install --no-cache-dir \
numpy \
scipy \
pandas \
matplotlib \
pillow \
Pillow \
opencv-python-headless \
scikit-learn \
tqdm \
pyyaml \
requests
# Install PyTorch CPU version (can be overridden in derived images for CUDA)
# Note: PyTorch provides different wheels for different architectures
RUN pip install --no-cache-dir \
torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
# Set environment variables for hardware acceleration
# VAAPI driver configuration (paths will be set at runtime via entrypoint)
# Python environment
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
# OpenCV
ENV OPENCV_VIDEOIO_PRIORITY_GSTREAMER=1
# FFmpeg hardware acceleration preference
ENV FFMPEG_HWACCEL_PRIORITY="vaapi,cuda,auto"
# NVIDIA Container Toolkit environment variables (will be used if NVIDIA runtime is available)
ENV NVIDIA_VISIBLE_DEVICES=all
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility,video
# Create a non-root user for running applications
RUN useradd -m -s /bin/bash -u 1000 appuser && \
usermod -a -G video appuser
# Create common directories
RUN mkdir -p /app /data /models && \
chown -R appuser:appuser /app /data /models
# Create entrypoint script to set architecture-specific environment variables
RUN echo '#!/bin/bash\n\
export LIBVA_DRIVERS_PATH=/usr/lib/$(uname -m)-linux-gnu/dri\n\
if [ "$(uname -m)" = "x86_64" ]; then\n\
export LIBVA_DRIVER_NAME=iHD\n\
fi\n\
exec "$@"' > /entrypoint.sh && \
chmod +x /entrypoint.sh
imageio \
imageio-ffmpeg
# Set working directory
WORKDIR /app
# Health check command to verify Python and FFmpeg are working
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD python -c "import torch, cv2, numpy; print('OK')" && ffmpeg -version > /dev/null 2>&1
# Default to non-root user (can be overridden in derived images)
# Switch to non-root user by default
USER appuser
# Set entrypoint
ENTRYPOINT ["/entrypoint.sh"]
# Set environment variables for hardware acceleration
ENV LIBVA_DRIVER_NAME=iHD
ENV LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri
# Default command - can be overridden in derived images
# Default command
CMD ["/bin/bash"]