Merge pull request #457 from joakimfors/master
Streamline Dockerfile for caching and size
This commit is contained in:
commit
51baa9b67b
3 changed files with 76 additions and 29 deletions
|
@ -1,7 +1,6 @@
|
||||||
.git
|
*
|
||||||
docs/_build
|
!src
|
||||||
node_modules
|
!public
|
||||||
test_data
|
!package.json
|
||||||
light
|
!package-lock.json
|
||||||
config.json
|
!docker-entrypoint.sh
|
||||||
*.mbtiles
|
|
||||||
|
|
69
Dockerfile
69
Dockerfile
|
@ -1,30 +1,55 @@
|
||||||
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 \
|
||||||
|
&& apt-get -y --purge autoremove \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
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 \
|
||||||
|
libgles2-mesa \
|
||||||
|
libegl1 \
|
||||||
|
xvfb \
|
||||||
|
xauth \
|
||||||
|
&& apt-get -y --purge autoremove \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY --from=builder /usr/src/app /app
|
||||||
|
|
||||||
ENV NODE_ENV="production"
|
ENV NODE_ENV="production"
|
||||||
ENV CHOKIDAR_USEPOLLING=1
|
ENV CHOKIDAR_USEPOLLING=1
|
||||||
ENV CHOKIDAR_INTERVAL=500
|
ENV CHOKIDAR_INTERVAL=500
|
||||||
|
|
||||||
VOLUME /data
|
VOLUME /data
|
||||||
WORKDIR /data
|
WORKDIR /data
|
||||||
EXPOSE 80
|
|
||||||
ENTRYPOINT ["/bin/bash", "/usr/src/app/run.sh"]
|
|
||||||
|
|
||||||
RUN apt-get -qq update \
|
EXPOSE 8000
|
||||||
&& 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
|
USER node:node
|
||||||
COPY / /usr/src/app
|
|
||||||
RUN cd /usr/src/app && npm install --production
|
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
||||||
|
|
||||||
|
CMD ["-p", "8000"]
|
||||||
|
|
23
docker-entrypoint.sh
Executable file
23
docker-entrypoint.sh
Executable file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
handle() {
|
||||||
|
SIGNAL=$(( $? - 128 ))
|
||||||
|
echo "Caught signal ${SIGNAL}, stopping gracefully"
|
||||||
|
kill -s ${SIGNAL} $(pidof node) 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
trap handle INT TERM
|
||||||
|
|
||||||
|
if ! which -- "${1}"; then
|
||||||
|
# first arg is not an executable
|
||||||
|
xvfb-run -a --server-args="-screen 0 1024x768x24" -- node /app/ "$@" &
|
||||||
|
# Wait exits immediately on signals which have traps set. Store return value and wait
|
||||||
|
# again for all jobs to actually complete before continuing.
|
||||||
|
wait $! || RETVAL=$?
|
||||||
|
wait
|
||||||
|
exit ${RETVAL}
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec "$@"
|
Loading…
Reference in a new issue