|
@@ -3,15 +3,18 @@
|
|
|
# Source material: https://derickbailey.com/2017/05/31/how-a-650mb-node-js-image-for-docker-uses-less-space-than-a-50mb-image/
|
|
|
# Source material: https://hub.docker.com/_/node/
|
|
|
|
|
|
+
|
|
|
+### Builder Stage (Multi-Stage Docker Build)
|
|
|
# Use the slimed NodeJS source, yielding a space savings of 600MB (~66% of total)
|
|
|
-FROM node:alpine
|
|
|
+FROM node:alpine as builder
|
|
|
+ENV NODEROOT /usr/src/app/
|
|
|
|
|
|
# Create app directory
|
|
|
-WORKDIR /usr/src/app
|
|
|
+WORKDIR $NODEROOT
|
|
|
|
|
|
# Install app dependencies
|
|
|
-# A wildcard is used to ensure both package.json AND package-lock.json AND tslint.json AND tsconfig.json are copied
|
|
|
-# where available (npm@5+)
|
|
|
+# A wildcard is used to ensure the following are copied
|
|
|
+# package.json AND package-lock.json AND tslint.json AND tsconfig.json are copied where available (npm@5+)
|
|
|
COPY *.json ./
|
|
|
|
|
|
# Install all dependencies and copy results
|
|
@@ -21,17 +24,16 @@ COPY . .
|
|
|
# Build library and canvas application then copy results
|
|
|
RUN npm run build
|
|
|
RUN npm run build-canvas
|
|
|
-COPY build/canvas/ build/canvas/
|
|
|
-
|
|
|
-# Open ports for HTTP
|
|
|
-EXPOSE 8080/tcp
|
|
|
+COPY . .
|
|
|
|
|
|
-# Setup standalone simple webserver to run the demo
|
|
|
-RUN npm install http-server -g
|
|
|
+### Runtime Stage (Multi-Stage Docker Build)
|
|
|
+FROM httpd:2.4 as runtime
|
|
|
+ENV NODEROOT /usr/src/app
|
|
|
+ENV HTTPDROOT /usr/local/apache2/htdocs/
|
|
|
|
|
|
-# Start NodeJS at container stand up
|
|
|
-CMD [ "http-server", "build/canvas/", "-p", "8080" ]
|
|
|
+## Code must be placed into /usr/local/apache2/htdocs/
|
|
|
+WORKDIR $HTTPDROOT
|
|
|
+COPY --from=builder $NODEROOT/build/canvas/ .
|
|
|
|
|
|
-# Developer helpers (what is inside this container?)
|
|
|
-RUN node -v
|
|
|
-RUN ls -alh
|
|
|
+# Open ports for HTTP
|
|
|
+EXPOSE 80
|