--- a +++ b/production/retriever-server/Dockerfile @@ -0,0 +1,44 @@ +# Base Stage - Buster-Slim is used as a base image +FROM python:3.8-slim AS base + +# Update base image. It might be helpful for security reasons +RUN apt-get update -qq && \ + apt-get upgrade -qq -y && \ + apt-get autoremove -y -qq && \ + apt-get autoclean -y -qq + +# Build stage +FROM base AS build-stage +# Change current directory to build +WORKDIR /build +# Copy requirements list from the host +COPY requirements.txt /build +# Activate virtual environment. +# Download python pacakges and compile some of them +# Install binaries. and the make things clear +ENV PATH="/opt/venv/bin:$PATH" +RUN python -m venv /opt/venv && \ + . /opt/venv/bin/activate && \ + pip install --no-cache-dir --upgrade pip wheel && \ + pip wheel --requirement=requirements.txt --wheel-dir=wheels && \ + pip install --no-deps wheels/*.whl && \ + rm -rf wheels *.egg-info + +# Runtime stage +FROM base AS runtime-stage +# Copy installed libraries from the build stage +COPY --from=build-stage /opt/venv /opt/venv + +COPY retriever_core /retriever_core +ENV PATH="/opt/venv/bin:$PATH" + +WORKDIR /retriever_core +# Create temp path +VOLUME /tmp +# create db dir for FAISS index +RUN mkdir db +# Expose 9095 port for api +EXPOSE 9595 +# Run +ENTRYPOINT ["python"] +CMD [ "rest-api.py" ] \ No newline at end of file