Manim_Boss / Dockerfile
AkshitShubham's picture
Update Dockerfile
71fa78a verified
FROM nvidia/cuda:12.5.1-cudnn-devel-ubuntu22.04
ENV DEBIAN_FRONTEND=noninteractive \
TZ=Europe/Paris
# Remove any third-party apt sources to avoid issues with expiring keys.
# Install some basic utilities
RUN rm -f /etc/apt/sources.list.d/*.list && \
apt-get update && apt-get install -y --no-install-recommends \
curl \
ca-certificates \
sudo \
git \
wget \
procps \
git-lfs \
zip \
unzip \
htop \
vim \
nano \
bzip2 \
libx11-6 \
build-essential \
libsndfile-dev \
software-properties-common \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
# Install LaTeX (Full) - this should include dvisvgm
RUN apt-get update && apt-get install -y --no-install-recommends \
texlive-full \
&& rm -rf /var/lib/apt/lists/*
# Install nvtop (available in Ubuntu 22.04 default repos)
RUN apt-get update && \
apt-get install -y --no-install-recommends nvtop && \
rm -rf /var/lib/apt/lists/*
# Install Node.js LTS
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
apt-get install -y nodejs && \
npm install -g configurable-http-proxy
# Create a working directory
WORKDIR /app
# Create a non-root user and switch to it
RUN adduser --disabled-password --gecos '' --shell /bin/bash user \
&& chown -R user:user /app
RUN echo "user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/90-user
USER user
# All users can use /home/user as their home directory
ENV HOME=/home/user
RUN mkdir $HOME/.cache $HOME/.config \
&& chmod -R 777 $HOME
# Set up the Conda environment with latest Miniconda
ENV CONDA_AUTO_UPDATE_CONDA=false \
PATH=$HOME/miniconda/bin:$PATH
RUN curl -sLo ~/miniconda.sh https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh \
&& chmod +x ~/miniconda.sh \
&& ~/miniconda.sh -b -p ~/miniconda \
&& rm ~/miniconda.sh \
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main \
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r \
&& conda clean -ya
# Create a Python 3.11 environment for better compatibility
RUN conda create -n manim python=3.11 -y && \
conda clean -ya
# Activate the environment by default
ENV CONDA_DEFAULT_ENV=manim
ENV PATH=$HOME/miniconda/envs/manim/bin:$PATH
WORKDIR $HOME/app
#######################################
# Start root user section
#######################################
USER root
# User Debian packages
## Security warning : Potential user code executed as root (build time)
RUN --mount=target=/root/packages.txt,source=packages.txt \
apt-get update && \
xargs -r -a /root/packages.txt apt-get install -y --no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
RUN --mount=target=/root/on_startup.sh,source=on_startup.sh,readwrite \
bash /root/on_startup.sh
RUN mkdir /data && chown user:user /data
#######################################
# Install Manim dependencies (root)
#######################################
RUN apt-get update && apt-get install -y --no-install-recommends \
# Cairo and Pango for rendering
libcairo2-dev \
libpango1.0-dev \
# FFmpeg for video processing
ffmpeg \
# LaTeX for mathematical typesetting
texlive \
texlive-latex-extra \
texlive-fonts-extra \
texlive-latex-recommended \
texlive-science \
texlive-fonts-recommended \
# Additional LaTeX packages for better compatibility
texlive-xetex \
texlive-luatex \
# CRITICAL: Add dvisvgm explicitly
dvisvgm \
# Font packages
fonts-lmodern \
fonts-texgyre \
# TIPA for phonetic symbols
tipa \
# Additional system dependencies
libffi-dev \
libssl-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
llvm \
libncurses5-dev \
libncursesw5-dev \
xz-utils \
tk-dev \
libxml2-dev \
libxmlsec1-dev \
libffi-dev \
liblzma-dev \
&& rm -rf /var/lib/apt/lists/*
# Verify dvisvgm installation
RUN which dvisvgm && dvisvgm --version
#######################################
# End root user section
#######################################
USER user
# Ensure we're using the manim conda environment
RUN echo "conda activate manim" >> ~/.bashrc
RUN conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
RUN conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
# Install Python packages in the manim environment
RUN --mount=target=requirements.txt,source=requirements.txt \
/home/user/miniconda/envs/manim/bin/pip install --no-cache-dir --upgrade -r requirements.txt
# Install Manim and IPython with specific versions for compatibility
RUN /home/user/miniconda/envs/manim/bin/pip install --no-cache-dir \
manim[jupyterlab] \
IPython \
jupyter \
jupyterlab \
notebook \
# Additional dependencies that might be missing
pillow \
numpy \
scipy \
matplotlib \
moderngl \
moderngl-window \
mapbox-earcut \
colour \
rich \
click \
click-default-group \
cloup \
decorator \
importlib-metadata \
isosurfaces \
manimpango \
markdown-it-py \
mdurl \
multipledispatch \
networkx \
pygments \
pydub \
requests \
screeninfo \
jupyter-collaboration \
skia-python \
srt \
tqdm \
watchdog
# Copy the current directory contents into the container at $HOME/app setting the owner to the user
COPY --chown=user . $HOME/app
RUN chmod +x start_server.sh
# Copy login template if it exists
COPY --chown=user login.html /home/user/miniconda/envs/manim/lib/python3.11/site-packages/jupyter_server/templates/login.html
# Set environment variables for better compatibility
ENV PYTHONUNBUFFERED=1 \
GRADIO_ALLOW_FLAGGING=never \
GRADIO_NUM_PORTS=1 \
GRADIO_SERVER_NAME=0.0.0.0 \
GRADIO_THEME=huggingface \
SYSTEM=spaces \
SHELL=/bin/bash \
# Manim specific environment variables
MANIMGL_LOG_LEVEL=INFO \
# Force software rendering if GPU issues occur
MANIM_RENDERER=cairo
CMD ["./start_server.sh"]