From: Code-Otto Date: Fri, 12 Apr 2024 15:35:19 +0000 (+0200) Subject: Move the new Dockerfile to Dockerfile.experimental X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=43b2ee00fda688feb1c3f73169c846fecde8a774;p=flatnotes.git Move the new Dockerfile to Dockerfile.experimental - Moved new Dockerfile to Dockerfile.experimental - Restored previous Dockerfile and added pip/pipenv cache cleanup - Dockerfile can now choose between su-exec/gosu via an environment variable --- diff --git a/Dockerfile b/Dockerfile index 2d874de..855b088 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ ARG BUILD_DIR=/build -# Client Build Container +# Build Container FROM --platform=$BUILDPLATFORM python:3.11-slim-bullseye AS build ARG BUILD_DIR @@ -16,31 +16,14 @@ RUN npm ci COPY client ./client RUN npm run build -# Pipenv Build Container -FROM python:3.11-alpine3.19 as pipenv-build - -ARG BUILD_DIR - -ENV APP_PATH=/app - -RUN apk add --no-cache build-base rust cargo libffi libffi-dev libssl3 openssl-dev - -RUN pip install --no-cache-dir pipenv - -WORKDIR ${APP_PATH} - -COPY LICENSE Pipfile Pipfile.lock ./ -RUN mkdir .venv -RUN pipenv install --deploy --ignore-pipfile && \ - pipenv --clear - # Runtime Container -FROM python:3.11-alpine3.19 +FROM python:3.11-slim-bullseye ARG BUILD_DIR ENV PUID=1000 ENV PGID=1000 +ENV EXEC_TOOL=gosu ENV APP_PATH=/app ENV FLATNOTES_PATH=/data @@ -48,13 +31,21 @@ ENV FLATNOTES_PATH=/data RUN mkdir -p ${APP_PATH} RUN mkdir -p ${FLATNOTES_PATH} -RUN apk add --no-cache su-exec libssl3 libgcc curl +RUN apt update && apt install -y \ + curl \ + gosu \ + && rm -rf /var/lib/apt/lists/* + +RUN pip install --no-cache-dir pipenv WORKDIR ${APP_PATH} +COPY LICENSE Pipfile Pipfile.lock ./ +RUN pipenv install --deploy --ignore-pipfile --system && \ + pipenv --clear + COPY server ./server COPY --from=build ${BUILD_DIR}/client/dist ./client/dist -COPY --from=pipenv-build ${APP_PATH}/.venv/lib/python3.11/site-packages/ /usr/local/lib/python3.11/site-packages/ VOLUME /data EXPOSE 8080/tcp diff --git a/Dockerfile.experimental b/Dockerfile.experimental new file mode 100644 index 0000000..de217a1 --- /dev/null +++ b/Dockerfile.experimental @@ -0,0 +1,66 @@ +ARG BUILD_DIR=/build + +# Client Build Container +FROM --platform=$BUILDPLATFORM python:3.11-slim-bullseye AS build + +ARG BUILD_DIR + +RUN mkdir ${BUILD_DIR} +WORKDIR ${BUILD_DIR} + +RUN apt update && apt install -y npm + +COPY package.json package-lock.json .htmlnanorc ./ +RUN npm ci + +COPY client ./client +RUN npm run build + +# Pipenv Build Container +FROM python:3.11-alpine3.19 as pipenv-build + +ARG BUILD_DIR + +ENV APP_PATH=/app + +RUN apk add --no-cache build-base rust cargo libffi libffi-dev libssl3 openssl-dev + +RUN pip install --no-cache-dir pipenv + +WORKDIR ${APP_PATH} + +COPY LICENSE Pipfile Pipfile.lock ./ +RUN mkdir .venv +RUN pipenv install --deploy --ignore-pipfile && \ + pipenv --clear + +# Runtime Container +FROM python:3.11-alpine3.19 + +ARG BUILD_DIR + +ENV PUID=1000 +ENV PGID=1000 +ENV EXEC_TOOL=su-exec + +ENV APP_PATH=/app +ENV FLATNOTES_PATH=/data + +RUN mkdir -p ${APP_PATH} +RUN mkdir -p ${FLATNOTES_PATH} + +RUN apk add --no-cache su-exec libssl3 libgcc curl + +WORKDIR ${APP_PATH} + +COPY server ./server +COPY --from=build ${BUILD_DIR}/client/dist ./client/dist +COPY --from=pipenv-build ${APP_PATH}/.venv/lib/python3.11/site-packages/ /usr/local/lib/python3.11/site-packages/ + +VOLUME /data +EXPOSE 8080/tcp +HEALTHCHECK --interval=60s --timeout=10s CMD curl -f http://localhost:8080/health || exit 1 + +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT [ "/entrypoint.sh" ] diff --git a/entrypoint.sh b/entrypoint.sh index 30a5bad..d9fbf3c 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -31,7 +31,7 @@ if [ `id -u` -eq 0 ] && [ `id -g` -eq 0 ]; then chown -R ${PUID}:${PGID} ${FLATNOTES_PATH} echo Starting flatnotes as user ${PUID}... - exec su-exec ${PUID}:${PGID} ${flatnotes_command} + exec ${EXEC_TOOL} ${PUID}:${PGID} ${flatnotes_command} else echo "A user was set by docker, skipping file permission changes."