FROM ubuntu:oracular AS ollama # Get a couple prerequisites RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y \ gpg \ wget \ && apt-get clean \ && rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log} # Install Intel graphics runtimes RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common \ && add-apt-repository -y ppa:kobuk-team/intel-graphics \ && apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y \ libze-intel-gpu1 \ libze1 \ intel-ocloc \ intel-opencl-icd \ xpu-smi \ && apt-get clean \ && rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log} WORKDIR /opt/ollama # Download the nightly ollama release from ipex-llm # NOTE: NO longer at github.com/intel -- now at ipex-llm # This version does not work: ENV OLLAMA_VERSION=https://github.com/ipex-llm/ipex-llm/releases/download/v2.2.0/ollama-ipex-llm-2.2.0-ubuntu.tgz # Does not work -- crashes # ENV OLLAMA_VERSION=https://github.com/ipex-llm/ipex-llm/releases/download/v2.3.0-nightly/ollama-ipex-llm-2.3.0b20250612-ubuntu.tgz RUN wget -qO - ${OLLAMA_VERSION} | \ tar --strip-components=1 -C . -xzv # Install Python from Oracular (ollama works with 3.12) RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y \ gpg \ python3 \ python3-pip \ python3-venv \ wget \ && apt-get clean \ && rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log} # Setup the ollama python virtual environment RUN python3 -m venv --system-site-packages /opt/ollama/venv # Setup the docker pip shell RUN { \ echo '#!/bin/bash' ; \ echo 'source /opt/ollama/venv/bin/activate' ; \ echo 'if [[ "${1}" != "" ]]; then bash -c "${@}"; else bash -i; fi' ; \ } > /opt/ollama/shell ; \ chmod +x /opt/ollama/shell # Activate the pip environment on all shell calls SHELL [ "/opt/ollama/shell" ] # Install ollama python module RUN pip install ollama langchain-ollama SHELL [ "/bin/bash", "-c" ] RUN { \ echo '#!/bin/bash'; \ echo 'echo "Container: ollama"'; \ echo 'set -e'; \ echo 'echo "Setting pip environment to /opt/ollama"'; \ echo 'source /opt/ollama/venv/bin/activate'; \ echo 'export OLLAMA_NUM_GPU=999'; \ echo 'export ZES_ENABLE_SYSMAN=1'; \ echo 'export SYCL_CACHE_PERSISTENT=1'; \ echo 'export OLLAMA_KEEP_ALIVE=-1'; \ echo 'export SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1'; \ echo ''; \ echo 'if [[ "${1}" == "/bin/bash" ]] || [[ "${1}" =~ ^(/opt/ollama/)?shell$ ]]; then'; \ echo ' echo "Dropping to shell"'; \ echo ' shift'; \ echo ' if [[ "${1}" != "" ]]; then cmd="/opt/ollama/shell ${@}"; echo "Running: ${cmd}"; exec ${cmd}; else /opt/ollama/shell; fi'; \ echo 'else'; \ echo ' echo "Launching Ollama server..."'; \ echo ' exec ollama serve'; \ echo 'fi'; \ } > /entrypoint.sh \ && chmod +x /entrypoint.sh RUN { \ echo '#!/bin/bash'; \ echo 'echo "Container: ollama"'; \ echo 'set -e'; \ echo 'echo "Setting pip environment to /opt/ollama"'; \ echo 'source /opt/ollama/venv/bin/activate'; \ echo 'ollama pull qwen2.5:7b' ; \ echo 'ollama pull llama3.2' ; \ echo 'ollama pull mxbai-embed-large' ; \ echo 'ollama pull deepseek-r1:7b' ; \ echo 'ollama pull mistral:7b' ; \ } > /fetch-models.sh \ && chmod +x /fetch-models.sh ENV PYTHONUNBUFFERED=1 # Enable ext_intel_free_memory ENV ZES_ENABLE_SYSMAN=1 # Use all GPUs ENV OLLAMA_NUM_GPU=999 # Use immediate command lists ENV SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1 # Use persistent cache ENV SYCL_CACHE_PERSISTENT=1 VOLUME [" /root/.ollama" ] ENV PATH=/opt/ollama:${PATH} ENTRYPOINT [ "/entrypoint.sh" ]