1+ # vim: filetype=dockerfile
2+
3+ ARG FLAVOR=${TARGETARCH}
4+
5+ ARG ROCMVERSION=6.3.3
6+ ARG JETPACK5VERSION=r35.4.1
7+ ARG JETPACK6VERSION=r36.4.0
8+ ARG CMAKEVERSION=3.31.2
9+
10+ # CUDA v11 requires gcc v10. v10.3 has regressions, so the rockylinux 8.5 AppStream has the latest compatible version
11+ FROM --platform=linux/amd64 rocm/dev-almalinux-8:${ROCMVERSION}-complete AS base-amd64
12+ RUN yum install -y yum-utils \
13+ && yum-config-manager --add-repo https://dl.rockylinux.org/vault/rocky/8.5/AppStream/\$ basearch/os/ \
14+ && rpm --import https://dl.rockylinux.org/pub/rocky/RPM-GPG-KEY-Rocky-8 \
15+ && dnf install -y yum-utils ccache gcc-toolset-10-gcc-10.2.1-8.2.el8 gcc-toolset-10-gcc-c++-10.2.1-8.2.el8 \
16+ && yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
17+ ENV PATH=/opt/rh/gcc-toolset-10/root/usr/bin:$PATH
18+
19+
20+
21+
22+ FROM --platform=linux/arm64 almalinux:8 AS base-arm64
23+ # install epel-release for ccache
24+ RUN yum install -y yum-utils epel-release \
25+ && dnf install -y clang ccache \
26+ && yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo
27+ ENV CC=clang CXX=clang++
28+
29+ FROM base-${TARGETARCH} AS base
30+ ARG CMAKEVERSION
31+ RUN curl -fsSL https://github.com/Kitware/CMake/releases/download/v${CMAKEVERSION}/cmake-${CMAKEVERSION}-linux-$(uname -m).tar.gz | tar xz -C /usr/local --strip-components 1
32+ COPY CMakeLists.txt CMakePresets.json .
33+ COPY ml/backend/ggml/ggml ml/backend/ggml/ggml
34+ ENV LDFLAGS=-s
35+
36+ FROM base AS cpu
37+ RUN dnf install -y gcc-toolset-11-gcc gcc-toolset-11-gcc-c++
38+ ENV PATH=/opt/rh/gcc-toolset-11/root/usr/bin:$PATH
39+ RUN --mount=type=cache,target=/root/.ccache \
40+ cmake --preset 'CPU' \
41+ && cmake --build --parallel --preset 'CPU' \
42+ && cmake --install build --component CPU --strip --parallel 2
43+
44+
45+ FROM base AS build
46+ ARG GOVERSION=1.24.4
47+ RUN curl -fsSL https://golang.org/dl/go${GOVERSION}.linux-$(case $(uname -m) in x86_64) echo amd64 ;; aarch64) echo arm64 ;; esac).tar.gz | tar xz -C /usr/local
48+ ENV PATH=/usr/local/go/bin:$PATH
49+ WORKDIR /go/src/github.com/ollama/ollama
50+ COPY . .
51+ ARG GOFLAGS="'-ldflags=-w -s'"
52+ ENV CGO_ENABLED=1
53+ RUN --mount=type=cache,target=/root/.cache/go-build \
54+ go build -trimpath -buildmode=pie -o /bin/ollama .
55+
56+ FROM --platform=linux/amd64 scratch AS amd64
57+
58+ FROM --platform=linux/arm64 scratch AS arm64
59+
60+ FROM ${FLAVOR} AS archive
61+ COPY --from=cpu dist/lib/ollama /lib/ollama
62+ COPY --from=build /bin/ollama /bin/ollama
63+
64+ FROM ubuntu:24.04
65+ RUN apt-get update \
66+ && apt-get install -y ca-certificates curl openssl \
67+ && apt-get install --only-upgrade -y libpam0g libpam-modules libpam-modules-bin libpam-runtime \
68+ libsystemd0 libudev1 \
69+ && update-ca-certificates \
70+ && apt-get clean \
71+ && rm -rf /var/lib/apt/lists/*
72+ COPY --from=archive /bin /usr/bin
73+ ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
74+ COPY --from=archive /lib/ollama /usr/lib/ollama
75+ ENV OLLAMA_HOST=0.0.0.0:11434
76+ EXPOSE 11434
77+ ENTRYPOINT ["/bin/ollama" ]
78+ CMD ["serve" ]
0 commit comments