From 6b96f224ae0feb07d4ccdd35c1c32e5f804b8f8f Mon Sep 17 00:00:00 2001 From: Joakim Fors Date: Thu, 18 Jun 2020 12:40:08 +0200 Subject: [PATCH] Streamline Dockerfile for caching and size Move package installation to top of file to enable layer caching in Docker. Use multi stage builds to reduce final image size. Ignore everything but essential files when creating Docker build context. --- .dockerignore | 13 +++++---- Dockerfile | 73 +++++++++++++++++++++++++++++++++++---------------- 2 files changed, 57 insertions(+), 29 deletions(-) diff --git a/.dockerignore b/.dockerignore index fee5276..2523191 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,7 +1,6 @@ -.git -docs/_build -node_modules -test_data -light -config.json -*.mbtiles +* +!src +!public +!package.json +!package-lock.json +!run.sh diff --git a/Dockerfile b/Dockerfile index 4bc76b7..f51c688 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,59 @@ -FROM node:10-stretch +FROM node:10-buster AS builder + +RUN export DEBIAN_FRONTEND=noninteractive \ + && apt-get -qq update \ + && apt-get -y --no-install-recommends install \ + apt-transport-https \ + curl \ + unzip \ + build-essential \ + python \ + libcairo2-dev \ + libgles2-mesa-dev \ + libgbm-dev \ + libllvm7 \ + libprotobuf-dev \ + libxxf86vm-dev \ + xvfb \ + x11-utils \ + && apt-get -y --purge autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +#RUN mkdir -p /usr/src/app +COPY / /usr/src/app + +ENV NODE_ENV="production" + +RUN cd /usr/src/app && npm install --production + + +FROM node:10-buster-slim AS final + +RUN export DEBIAN_FRONTEND=noninteractive \ + && apt-get -qq update \ + && apt-get -y --no-install-recommends install \ + curl \ + libcairo2 \ + libgles2-mesa \ + libegl1 \ + libprotobuf17 \ + libxxf86vm1 \ + xvfb \ + x11-utils \ + && apt-get -y --purge autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=builder /usr/src/app /usr/src/app ENV NODE_ENV="production" ENV CHOKIDAR_USEPOLLING=1 ENV CHOKIDAR_INTERVAL=500 + VOLUME /data WORKDIR /data + EXPOSE 80 -ENTRYPOINT ["/bin/bash", "/usr/src/app/run.sh"] -RUN apt-get -qq update \ -&& DEBIAN_FRONTEND=noninteractive apt-get -y install \ - apt-transport-https \ - curl \ - unzip \ - build-essential \ - python \ - libcairo2-dev \ - libgles2-mesa-dev \ - libgbm-dev \ - libllvm3.9 \ - libprotobuf-dev \ - libxxf86vm-dev \ - xvfb \ - x11-utils \ -&& apt-get clean - -RUN mkdir -p /usr/src/app -COPY / /usr/src/app -RUN cd /usr/src/app && npm install --production +ENTRYPOINT ["/usr/src/app/run.sh"]