|
1 | | -ARG PYTHON_IMAGE_VERSION=latest |
2 | | -FROM python:${PYTHON_IMAGE_VERSION}-slim |
3 | | -ARG GRPC_HEALTH_PROBE_VERSION=v0.4.2 |
| 1 | +# syntax=docker/dockerfile:1 |
| 2 | +ARG PYTHON_IMAGE_VERSION=3.7 |
| 3 | +FROM python:${PYTHON_IMAGE_VERSION}-slim as base |
| 4 | +LABEL DEPLOYMENT_TYPE="APP" maintainer="support@hydrosphere.io" |
| 5 | + |
| 6 | +ENV PYTHONUNBUFFERED=1 \ |
| 7 | + PYTHONDONTWRITEBYTECODE=1 \ |
| 8 | + POETRY_PATH=/opt/poetry \ |
| 9 | + VENV_PATH=/opt/pysetup/.venv \ |
| 10 | + POETRY_VERSION=1.1.6 |
| 11 | +ENV PATH="$POETRY_PATH/bin:$VENV_PATH/bin:$PATH" |
| 12 | + |
| 13 | +FROM base AS build |
| 14 | + |
| 15 | +RUN apt-get update && apt-get -y install \ |
| 16 | + curl \ |
| 17 | + sudo \ |
| 18 | + wget && \ |
| 19 | + \ |
| 20 | + GRPC_HEALTH_PROBE_VERSION=v0.4.2 && wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ |
| 21 | + chmod +x /bin/grpc_health_probe && \ |
| 22 | + \ |
| 23 | + curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python && \ |
| 24 | + mv /root/.poetry $POETRY_PATH && \ |
| 25 | + python -m venv $VENV_PATH && \ |
| 26 | + poetry config virtualenvs.create false && \ |
| 27 | + poetry config experimental.new-installer false && \ |
| 28 | + pip install --upgrade pip && \ |
| 29 | + rm -rf /var/lib/apt/lists/* |
4 | 30 |
|
5 | | -ENV APP_PORT=9091 |
6 | | -ENV MODEL_DIR=/model |
| 31 | +COPY poetry.lock pyproject.toml ./ |
| 32 | +RUN poetry install --no-interaction |
7 | 33 |
|
8 | | -ENV POETRY_HOME="/opt/poetry" |
9 | | -ENV VENV_PATH="/opt/pysetup/.venv" |
10 | | -ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" |
11 | 34 |
|
12 | | -VOLUME /model |
13 | | -LABEL DEPLOYMENT_TYPE=APP |
| 35 | +FROM base as runtime |
14 | 36 |
|
15 | | -RUN apt-get update && \ |
16 | | - apt-get -y install wget curl sudo |
| 37 | +RUN useradd -u 42069 --create-home --shell /bin/bash app |
17 | 38 |
|
18 | | -RUN wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ |
19 | | - chmod +x /bin/grpc_health_probe |
20 | | -RUN curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python |
| 39 | +WORKDIR /home/app |
21 | 40 |
|
| 41 | +ENV APP_PORT=9091 |
| 42 | +EXPOSE ${APP_PORT} |
22 | 43 | HEALTHCHECK --start-period=10s CMD /bin/grpc_health_probe -addr=:${APP_PORT} |
23 | 44 |
|
24 | | -WORKDIR /app |
25 | | - |
26 | | -COPY poetry.lock pyproject.toml ./ |
27 | | -RUN poetry config virtualenvs.create false |
28 | | -RUN poetry install --no-interaction |
29 | | - |
30 | | -COPY . /app/ |
| 45 | +COPY --from=build --chown=app:app /bin/grpc_health_probe /bin/grpc_health_probe |
| 46 | +COPY --from=build --chown=app:app $VENV_PATH $VENV_PATH |
31 | 47 |
|
32 | | -RUN chmod +x /app/src/main.py |
33 | | -RUN sync |
| 48 | +COPY --chown=app:app src/ /home/app/src/ |
| 49 | +COPY --chown=app:app start.sh start.sh |
34 | 50 |
|
35 | | -RUN useradd -u 42069 app && \ |
36 | | - mkdir /home/app && \ |
37 | | - chown app /home/app && \ |
38 | | - chown app /app && \ |
39 | | - chmod +x /app/start.sh |
| 51 | +RUN chmod +x /home/app/src/main.py && \ |
| 52 | + sync && \ |
| 53 | + chmod +x /home/app/start.sh |
40 | 54 |
|
41 | 55 | RUN echo "app ALL=NOPASSWD: /usr/bin/apt" > /etc/sudoers |
42 | 56 | USER app |
43 | 57 |
|
44 | | -CMD ["/app/start.sh"] |
| 58 | +ENTRYPOINT ["bash", "/home/app/start.sh"] |
0 commit comments