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.
This commit is contained in:
Joakim Fors 2020-06-18 12:40:08 +02:00
parent 6ff4cae9b9
commit 6b96f224ae
2 changed files with 57 additions and 29 deletions

View file

@ -1,7 +1,6 @@
.git *
docs/_build !src
node_modules !public
test_data !package.json
light !package-lock.json
config.json !run.sh
*.mbtiles

View file

@ -1,15 +1,8 @@
FROM node:10-stretch FROM node:10-buster AS builder
ENV NODE_ENV="production" RUN export DEBIAN_FRONTEND=noninteractive \
ENV CHOKIDAR_USEPOLLING=1 && apt-get -qq update \
ENV CHOKIDAR_INTERVAL=500 && apt-get -y --no-install-recommends install \
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 \ apt-transport-https \
curl \ curl \
unzip \ unzip \
@ -18,13 +11,49 @@ RUN apt-get -qq update \
libcairo2-dev \ libcairo2-dev \
libgles2-mesa-dev \ libgles2-mesa-dev \
libgbm-dev \ libgbm-dev \
libllvm3.9 \ libllvm7 \
libprotobuf-dev \ libprotobuf-dev \
libxxf86vm-dev \ libxxf86vm-dev \
xvfb \ xvfb \
x11-utils \ x11-utils \
&& apt-get clean && apt-get -y --purge autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /usr/src/app #RUN mkdir -p /usr/src/app
COPY / /usr/src/app COPY / /usr/src/app
ENV NODE_ENV="production"
RUN cd /usr/src/app && npm install --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 ["/usr/src/app/run.sh"]