Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 34 additions & 55 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,61 +1,42 @@
FROM python:3.11-slim AS base
ENV DEBIAN_FRONTEND=noninteractive
ENV ACCEPT_EULA=y
WORKDIR /opt/app-root/src/mostlyai/
FROM alpine:latest AS alpine
# ! We're using alpine as a hack to fetch the musl libraries.

FROM base AS deps

USER root

RUN groupadd -r nonroot && useradd -r -g nonroot -m nonroot
FROM cgr.dev/chainguard/wolfi-base:latest AS base
ENV LANG="C.UTF-8"
ENV UV_FROZEN=true
ENV UV_NO_CACHE=true

RUN apt-get update -y \
&& apt-get install -y libaio1 curl gnupg unzip \
# * PostgreSQL Connector Dependencies
&& apt-get install -y libpq-dev gcc g++ \
# * Kerberos Dependencies for Hive Connector
&& apt-get install -y libkrb5-dev krb5-user \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN chmod 777 /app
RUN apk add --no-cache wget bash tzdata
RUN apk add --no-cache python-3.12-dev
RUN apk add --no-cache uv
COPY --from=alpine --chmod=755 /lib/*musl-*.so.1 /lib/
USER nonroot

RUN VERSION_ID=$(grep VERSION_ID /etc/os-release | cut -d '"' -f 2) \
&& curl -sSL -o /tmp/packages-microsoft-prod.deb https://packages.microsoft.com/config/debian/$VERSION_ID/packages-microsoft-prod.deb \
&& dpkg -i /tmp/packages-microsoft-prod.deb \
&& apt-get update -y \
&& apt-get install -y unixodbc-dev msodbcsql18 mssql-tools \
&& apt-get clean \
&& rm -f /tmp/packages-microsoft-prod.deb \
&& rm -rf /var/lib/apt/lists/*
ENV PATH="/opt/mssql-tools/bin:$PATH"
FROM base AS final
USER root
RUN apk add --no-cache krb5-dev libpq unixodbc-dev libaio krb5
RUN CURRENT_ARCH=$(uname -m | sed 's|x86_64|amd64|g') \
&& wget https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_$CURRENT_ARCH.apk -qO /tmp/msodbcsql.apk \
&& apk add --no-cache --allow-untrusted /tmp/msodbcsql.apk \
&& rm -rf /tmp/msodbcsql.apk \
&& apk add --no-cache glibc-iconv

# * Oracle Connector Dependencies
RUN CURRENT_ARCH=$(uname -m | sed 's|x86_64|x64|g') \
&& if [ "$CURRENT_ARCH" = "x64" ]; then \
curl https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-basic-linux.$CURRENT_ARCH-21.1.0.0.0.zip \
-o /tmp/oracle-instantclient.zip \
&& curl https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-sqlplus-linux.$CURRENT_ARCH-21.1.0.0.0.zip \
-o /tmp/oracle-sqlplus.zip \
&& if [ "$CURRENT_ARCH" != "x64" ]; then exit 0; fi \
&& wget https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-basic-linux.$CURRENT_ARCH-21.1.0.0.0.zip -qO /tmp/oracle-instantclient.zip \
&& wget https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-sqlplus-linux.$CURRENT_ARCH-21.1.0.0.0.zip -qO /tmp/oracle-sqlplus.zip \
&& unzip /tmp/oracle-instantclient.zip -d /opt/oracle \
&& unzip /tmp/oracle-sqlplus.zip -d /opt/oracle \
&& sh -c "echo '/opt/oracle/instantclient_21_1' > /etc/ld.so.conf.d/oracle-instantclient.conf" \
&& ldconfig \
&& rm -rf /tmp/* \
; fi

ENV PATH="/opt/oracle/opt/oracle/instantclient_21_1:$PATH"
ENV LD_LIBRARY_PATH=/opt/oracle/instantclient_21_1
ENV ORACLE_HOME=/opt/oracle/instantclient_21_1

FROM deps AS build
ENV UV_SYSTEM_PYTHON=1
ENV UV_FROZEN=true
ENV UV_NO_CACHE=true
ENV UV_PROJECT_ENVIRONMENT=/usr/local

COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
&& rm -rf /tmp/oracle-sqlplus.zip /tmp/oracle-instantclient.zip \
&& sh -c "echo '/opt/oracle/instantclient_21_1' > /etc/ld.so.conf.d/oracle-instantclient.conf"
ENV PATH="$PATH:/opt/oracle/instantclient_21_1"
ENV ORACLE_HOME="/opt/oracle/instantclient_21_1"

COPY ./uv.lock ./pyproject.toml ./
RUN uv sync --no-editable --all-extras --no-extra local-gpu \
RUN apk add --no-cache --virtual temp-build-deps gcc~12 postgresql-dev \
&& uv sync --no-editable --all-extras --no-extra local-gpu \
--no-install-package torch \
--no-install-package torchvision \
--no-install-package torchaudio \
Expand All @@ -76,18 +57,16 @@ RUN uv sync --no-editable --all-extras --no-extra local-gpu \
--no-install-package cupy-cuda12x \
--no-install-package triton \
--no-install-package mostlyai \
--no-install-project
--no-install-project \
&& apk del temp-build-deps

RUN uv pip install --index-strategy unsafe-first-match torch==2.6.0+cpu torchvision==0.21.0+cpu --extra-index-url https://download.pytorch.org/whl/cpu

COPY mostlyai ./mostlyai
COPY README.md ./
RUN uv pip install -e .

COPY ./tools/docker_entrypoint.py /opt/app-root/src/entrypoint.py
COPY ./tools/docker_entrypoint.py ./entrypoint.py

USER nonroot
WORKDIR /home/nonroot

EXPOSE 8080
ENTRYPOINT [ "python", "/opt/app-root/src/entrypoint.py" ]
ENTRYPOINT [ "uv", "run", "--", "entrypoint.py" ]