Spaces:
Sleeping
Sleeping
ARG PYTHON_VERSION="3.9.13" | |
ARG PLATFORM_NAME="linux/amd64" | |
FROM --platform=${PLATFORM_NAME} python:${PYTHON_VERSION} | |
# --- SYSTEM ARCHITECTURE | |
ARG TARGETPLATFORM | |
ARG TARGETARCH | |
ARG TARGETVARIANT | |
RUN printf "I'm building for TARGETPLATFORM=${TARGETPLATFORM}" \ | |
&& printf ", TARGETARCH=${TARGETARCH}" \ | |
&& printf ", TARGETVARIANT=${TARGETVARIANT} \n" \ | |
&& printf "With uname -s : " && uname -s \ | |
&& printf "and uname -m : " && uname -mm | |
# --- Environment variables | |
ENV REQUIREMENTS_FILE="requirements.txt" | |
ENV OUTDIR="/root" | |
ENV PROJECT_DIR="/home/user/ml" | |
ENV PROGRAM_DIR="/opt/program" | |
ENV HOME_DIR="/root/ml" | |
ENV LOCAL_DEV_DIR="docker" | |
ENV ALIASES_FILE="/root/aliases.sh" | |
ENV DEBIAN_FRONTEND=noninteractive | |
# --- Dockerfile Metadata | |
LABEL Maintainer="Victor Calderon" | |
# ---------------------- EXPOSING PORTS FOR APP ------------------------------- | |
EXPOSE 7860 | |
EXPOSE 8501 | |
# --------------------- INSTALLING EXTRA PACKAGES ----------------------------- | |
# --- Updating packages and installing packages at the system-level | |
RUN apt-get update && apt-get install -y apt-transport-https | |
RUN apt-get install -y \ | |
git \ | |
ssh \ | |
&& \ | |
# Cleaning out | |
rm -rf /var/lib/apt/lists/* && \ | |
# Cleaning installs | |
apt-get clean | |
COPY ${REQUIREMENTS_FILE} "${HOME_DIR}/${REQUIREMENTS_FILE}" | |
RUN pip install --upgrade pip && \ | |
python -m pip install --no-cache-dir -r "${HOME_DIR}/${REQUIREMENTS_FILE}" | |
# ------------------------- COPYING AND DIRECTORIES --------------------------- | |
RUN useradd -m -u 1000 user | |
USER user | |
ENV HOME=/home/user \ | |
PATH=/home/user/.local/bin:$PATH | |
RUN mkdir -p ${PROJECT_DIR} | |
RUN chown user:user -R ${PROJECT_DIR} | |
COPY --chown=user ./src ${PROJECT_DIR}/src | |
# --------------------------- PYTHON-RELATED-LOCAL ---------------------------- | |
# ----------------------------- PYTHON-SPECIFIC ------------------------------- | |
# Set some environment variables. PYTHONUNBUFFERED keeps Python from | |
# buffering our standard output stream, which means that logs can be | |
# delivered to the user quickly. PYTHONDONTWRITEBYTECODE keeps Python | |
# from writing the .pyc files which are unnecessary in this case. We also | |
# update PATH so that the train and serve programs are found when the | |
# container is invoked. | |
ENV PYTHONUNBUFFERED=TRUE | |
ENV PYTHONDONTWRITEBYTECODE=TRUE | |
ENV PATH="${PROGRAM_DIR}:${PATH}" | |
ENV PYTHONPATH="${PROGRAM_DIR}:${PYTHONPATH}" | |
RUN chown user:user -R ${PROJECT_DIR} | |
WORKDIR ${PROJECT_DIR} | |
# CMD ["uvicorn", "src.api.index:app", "--host", "0.0.0.0","--port", "7860"] | |
CMD ["python", "src/app_service/app.py"] | |