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