File size: 2,593 Bytes
74c716c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d375a3
74c716c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
670aac3
 
6bd9f2a
74c716c
 
 
 
 
 
670aac3
 
1d375a3
 
 
 
 
 
670aac3
 
 
 
 
 
 
 
 
 
 
 
 
1d375a3
74c716c
 
 
1d375a3
74c716c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c484b06
 
74c716c
 
0eea426
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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"]