64 lines
1.5 KiB
Docker
64 lines
1.5 KiB
Docker
|
ARG PYTHON_VERSION=3.11
|
||
|
FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.9.10 as watchdog
|
||
|
FROM --platform=${TARGETPLATFORM:-linux/amd64} python:${PYTHON_VERSION}-alpine as build
|
||
|
|
||
|
COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
|
||
|
RUN chmod +x /usr/bin/fwatchdog
|
||
|
|
||
|
ARG ADDITIONAL_PACKAGE
|
||
|
# Alternatively use ADD https:// (which will not be cached by Docker builder)
|
||
|
|
||
|
RUN apk --no-cache add openssl-dev ${ADDITIONAL_PACKAGE}
|
||
|
|
||
|
# Add non root user
|
||
|
RUN addgroup -S app && adduser app -S -G app
|
||
|
RUN chown app /home/app
|
||
|
|
||
|
USER app
|
||
|
|
||
|
ENV PATH=$PATH:/home/app/.local/bin
|
||
|
|
||
|
WORKDIR /home/app/
|
||
|
|
||
|
COPY --chown=app:app index.py .
|
||
|
COPY --chown=app:app requirements.txt .
|
||
|
|
||
|
USER root
|
||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||
|
|
||
|
# Build the function directory and install any user-specified components
|
||
|
USER app
|
||
|
|
||
|
RUN mkdir -p function
|
||
|
RUN touch ./function/__init__.py
|
||
|
WORKDIR /home/app/function/
|
||
|
COPY --chown=app:app function/requirements.txt .
|
||
|
RUN pip install --no-cache-dir --user -r requirements.txt
|
||
|
|
||
|
#install function code
|
||
|
USER root
|
||
|
|
||
|
COPY --chown=app:app function/ .
|
||
|
|
||
|
|
||
|
FROM build as test
|
||
|
ARG TEST_COMMAND=tox
|
||
|
ARG TEST_ENABLED=true
|
||
|
RUN [ "$TEST_ENABLED" = "false" ] && echo "skipping tests" || eval "$TEST_COMMAND"
|
||
|
|
||
|
FROM build as ship
|
||
|
WORKDIR /home/app/
|
||
|
|
||
|
#configure WSGI server and healthcheck
|
||
|
USER app
|
||
|
|
||
|
ENV fprocess="python index.py"
|
||
|
|
||
|
ENV cgi_headers="true"
|
||
|
ENV mode="http"
|
||
|
ENV upstream_url="http://127.0.0.1:5000"
|
||
|
|
||
|
HEALTHCHECK --interval=5s CMD [ -e /tmp/.lock ] || exit 1
|
||
|
|
||
|
CMD ["fwatchdog"]
|