ai / Dockerfile
celik-muhammed's picture
Upload 27 files
e0b02fa verified
Raw
History Blame Contribute Delete
2.41 kB
# scikit-plots/ai 路 Dockerfile 路 v3.3.0
# Reproducible Linux/amd64 security profile for Hugging Face Docker Spaces.
# SPDX-License-Identifier: BSD-3-Clause
# Immutable multi-platform index for the current official
# python:3.11.16-slim-bookworm image reviewed on 2026-08-30. CI must verify
# both this digest and the selected linux/amd64 manifest before release.
ARG PYTHON_IMAGE=python:3.11.16-slim-bookworm@sha256:0bee7276f83efd4a1ee05bbbf4281d95ed28e079220a9457f25a93e3f1e3c31b
FROM --platform=linux/amd64 ${PYTHON_IMAGE} AS builder
ENV PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_NO_CACHE_DIR=1 \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1
# Build an isolated runtime venv. Only prebuilt wheels whose bytes are named
# by requirements.lock are accepted; no dependency resolver drift or source
# build is permitted in the release image path.
RUN python -m venv /opt/venv
COPY requirements.lock /tmp/requirements.lock
RUN /opt/venv/bin/python -m pip install \
--no-cache-dir \
--require-hashes \
--only-binary=:all: \
-r /tmp/requirements.lock \
&& rm -f /tmp/requirements.lock
FROM --platform=linux/amd64 ${PYTHON_IMAGE} AS runtime
# HF Docker Spaces recommends UID 1000. The app never needs root at runtime.
RUN useradd --create-home --uid 1000 --shell /usr/sbin/nologin user \
&& rm -rf \
/usr/local/lib/python3.11/site-packages/pip* \
/usr/local/lib/python3.11/site-packages/setuptools* \
/usr/local/lib/python3.11/site-packages/wheel* \
/usr/local/bin/pip* \
/usr/local/bin/wheel*
COPY --from=builder /opt/venv /opt/venv
ENV PATH=/opt/venv/bin:$PATH \
HOME=/home/user \
XDG_CACHE_HOME=/tmp/.cache \
HF_HOME=/tmp/huggingface \
TMPDIR=/tmp \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
DEPLOYMENT_PROFILE=strict
WORKDIR /home/user/app
COPY --chown=1000:1000 _utils ./_utils
COPY --chown=1000:1000 app.py deduplicate_dataset.py ./
USER 1000:1000
EXPOSE 7860
# Stdlib-only health probe; no curl/wget package is added to the runtime image.
HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=3 \
CMD python -I -c \
"import urllib.request; urllib.request.urlopen('http://127.0.0.1:7860/health', timeout=4).read(1)" \
|| exit 1
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860", "--no-access-log"]