Dockerfile: use separate setup and final images

This makes the build simpler since we don't have to remove setup
dependencies like pip or poetry.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
Jakub Sokołowski 2023-02-23 10:57:43 +01:00
parent c29dff074a
commit 74f85cac50
No known key found for this signature in database
GPG Key ID: FE65CD384D5BF7B4
1 changed files with 21 additions and 17 deletions

View File

@ -1,15 +1,24 @@
FROM ghcr.io/sartography/python:3.11
FROM ghcr.io/sartography/python:3.11 AS base
ARG commit
# Prepare Python virtual environment
ENV VIRTUAL_ENV=/app/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN pip install poetry
RUN useradd _gunicorn --no-create-home --user-group
WORKDIR /app
FROM base AS setup
RUN pip install poetry
# libpq-dev for pg_config executable, which is needed for psycopg2
RUN set -xe \
&& apt-get update -q \
&& apt-get install -y -q \
RUN apt-get update -q \
&& apt-get install -y -q \
libpq-dev
WORKDIR /app
ADD pyproject.toml poetry.lock /app/
ADD connectors /app/connectors
RUN poetry install
@ -20,16 +29,11 @@ COPY . /app/
# otherwise it does not know what the main app module is
RUN poetry install
# remove packages that are not needed in production.
# just for security. won't help image size.
RUN set -xe \
&& apt-get remove -y \
gcc \
libssl-dev \
postgresql-client \
python3-dev \
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*
FROM base AS final
LABEL source="https://github.com/sartography/connector-proxy-status-im"
LABEL description="Connector gateway for external services."
COPY --from=setup /app /app
ENTRYPOINT ["/app/bin/boot_server_in_docker"]