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"]