optimized Dockerfile for ci/cd pipelines

Simon Schön committed Jun 8, 2022 at 02:46 UTC dc1b4f5ce2564551215ed484bf578aada01491ae
1 file changed +25 -13
docker/Dockerfile
+25 -13
@@ -1,6 +1,4 @@
1 -FROM node:current-alpine
2 -
3 -ARG INCLUDE_MONGODBTOOLS=""
1 +FROM node:current-alpine AS base
2
3 #Add non-root user, add installation directories and assign proper permissions
4 RUN mkdir -p /opt/meshcentral
@@ -9,19 +7,12 @@ RUN mkdir -p /opt/meshcentral
7 WORKDIR /opt/meshcentral
8
9 RUN apk add --no-cache bash
12 -RUN if [ "$INCLUDE_MONGODBTOOLS" == "yes" ] || [ "$INCLUDE_MONGODBTOOLS" == "YES" ]; then apk add --no-cache mongodb-tools; fi
10
14 -RUN mkdir /opt/meshcentral/meshcentral
15 -COPY ./ /opt/meshcentral/meshcentral/
16 -COPY ./docker/config.json.template /opt/meshcentral/config.json.template
17 -COPY ./docker/startup.sh startup.sh
18 -RUN rm -rf ./docker
11
20 -# install dependencies from package.json
21 -RUN cd meshcentral && npm install
12 +FROM base AS builder
13
23 -# install dependencies for plugins
24 -RUN cd meshcentral && npm install nedb
14 +RUN mkdir /opt/meshcentral/meshcentral
15 +COPY ./ /opt/meshcentral/meshcentral/
16
17 # minify files - first try throws Error: Cannot find module 'jsdom'
18 RUN cd meshcentral/translate && node translate.js minifyall; exit 0
@@ -31,6 +22,27 @@ RUN cd meshcentral/translate && node translate.js minifyall
22 RUN cd meshcentral/translate && node translate.js translateall
23 RUN cd meshcentral/translate && node translate.js extractall
24
25 +
26 +FROM base
27 +
28 +ARG INCLUDE_MONGODBTOOLS=""
29 +RUN if [ "$INCLUDE_MONGODBTOOLS" == "yes" ] || [ "$INCLUDE_MONGODBTOOLS" == "YES" ]; then apk add --no-cache mongodb-tools; fi
30 +
31 +# copy files from builder-image
32 +COPY --from=builder /opt/meshcentral/meshcentral /opt/meshcentral/meshcentral
33 +COPY --from=builder /opt/meshcentral/meshcentral/docker/startup.sh ./startup.sh
34 +COPY --from=builder /opt/meshcentral/meshcentral/docker/config.json.template /opt/meshcentral/config.json.template
35 +
36 +# cleanup
37 +RUN rm -rf /opt/meshcentral/meshcentral/docker
38 +RUN rm -rf /opt/meshcentral/meshcentral/node_modules
39 +
40 +# install dependencies from package.json
41 +RUN cd meshcentral && npm install
42 +
43 +# install dependencies for plugins
44 +RUN cd meshcentral && npm install nedb
45 +
46 EXPOSE 80 443 4433
47
48 # volumes