-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
78 lines (59 loc) · 2.16 KB
/
Dockerfile
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
FROM python:3.9-slim AS base
SHELL ["/bin/bash", "-c"]
RUN apt-get update && apt-get -y upgrade \
&& apt-get -y install --no-install-recommends curl python3-dev gcc \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get -y clean
# https://github.com/grpc-ecosystem/grpc-health-probe/#example-grpc-health-checking-on-kubernetes
RUN GRPC_HEALTH_PROBE_VER=v0.3.1 \
&& GRPC_HEALTH_PROBE_URL=https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VER}/grpc_health_probe-linux-amd64 \
&& curl ${GRPC_HEALTH_PROBE_URL} -L -s -o /bin/grpc_health_probe \
&& chmod +x /bin/grpc_health_probe
FROM base AS build
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_DEFAULT_TIMEOUT=100 \
UV_LINK_MODE=copy \
UV_COMPILE_BYTECODE=1 \
UV_PYTHON_DOWNLOADS=never \
UV_PYTHON=/opt/.venv/bin/python3.9 \
UV_PROJECT_ENVIRONMENT=/opt/.venv
WORKDIR /envoy_extproc_sdk
# Install uv
COPY --from=ghcr.io/astral-sh/uv:0.6.8 /uv /usr/local/bin/uv
RUN python -m venv /opt/.venv
ENV PATH="/opt/.venv/bin:$PATH"
# Install dependencies
RUN --mount=type=cache,target=/root/.cache \
--mount=type=bind,source=uv.lock,target=uv.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
uv sync \
--locked \
--no-dev \
--no-install-workspace
# Copy source code and generated protobuf files
COPY . .
COPY ./envoy_extproc_sdk ./envoy_extproc_sdk
COPY generated/python/standardproto/ ./
# Sync the project
RUN --mount=type=cache,target=/root/.cache \
uv sync \
--locked \
--no-dev \
--no-editable
# Install generated code into site-packages
RUN bash ./scripts/install_generated_code.sh
FROM base AS final
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PATH="/opt/.venv/bin:$PATH"
WORKDIR /envoy_extproc_sdk
COPY --from=build /opt/.venv /opt/.venv
COPY --from=build /envoy_extproc_sdk/envoy_extproc_sdk ./envoy_extproc_sdk
COPY --from=build /envoy_extproc_sdk/generated ./generated
ARG GRPC_PORT=50051
EXPOSE ${GRPC_PORT}
ENTRYPOINT ["python","-m","envoy_extproc_sdk"]