From c95488733b0d0b11a98e6b5a6f58551155275927 Mon Sep 17 00:00:00 2001
From: rhenck <richard.henck@tu-berlin.de>
Date: Mon, 31 Aug 2020 17:56:09 +0200
Subject: [PATCH] Improve multistage building of docker images

This includes running unit tests when building.
The docker compose setup uses only the first stage of the image building
process, which uses node as server. The next step, for production, uses
nginx as server software.
---
 docker/Dockerfile         | 16 +++++++++++++++-
 docker/Dockerfile-prod    | 34 ----------------------------------
 docker/docker-compose.yml |  1 +
 3 files changed, 16 insertions(+), 35 deletions(-)
 delete mode 100644 docker/Dockerfile-prod

diff --git a/docker/Dockerfile b/docker/Dockerfile
index b778f698..f1d3335e 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:14.8
+FROM node:13.14.0 as dev
 
 # install chrome for protractor tests
 RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
@@ -18,6 +18,20 @@ RUN npx webdriver-manager update
 
 COPY . /app
 
+RUN ng test --watch=false
+
+RUN ng build --output-path=dist
+
 EXPOSE 4200
 
 CMD ng serve --disableHostCheck --host 0.0.0.0
+
+# ===========================================
+
+FROM nginx:1.19.1-alpine as prod
+
+COPY --from=build /app/dist /usr/share/nginx/html
+
+EXPOSE 80
+
+CMD ["nginx", "-g", "daemon off;"]
diff --git a/docker/Dockerfile-prod b/docker/Dockerfile-prod
deleted file mode 100644
index 80634c22..00000000
--- a/docker/Dockerfile-prod
+++ /dev/null
@@ -1,34 +0,0 @@
-FROM node:13.14.0 as build
-
-# install chrome for protractor tests
-RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
-RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
-RUN apt-get update && apt-get install -yq google-chrome-stable
-
-WORKDIR /app
-
-ENV PATH /app/node_modules/.bin:$PATH
-
-COPY package.json /app/package.json
-RUN npm install
-
-# install webdriver for browser testing
-RUN npm i --prefix=./node_modules/protractor --save webdriver-manager@latest
-RUN npx webdriver-manager update
-
-COPY . /app
-
-RUN ng test --watch=false
-RUN ng e2e --webdriver-update=false --port 4202
-
-RUN ng build --output-path=dist
-
-# ===========================================
-
-FROM nginx:1.19.1-alpine
-
-COPY --from=build /app/dist /usr/share/nginx/html
-
-EXPOSE 80
-
-CMD ["nginx", "-g", "daemon off;"]
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 24d24f83..84ae47a4 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -6,6 +6,7 @@ services:
     build:
       context: ../
       dockerfile: docker/Dockerfile
+      target: dev
     container_name: testcenter-frontend-dev
     volumes:
       - ../:/app
-- 
GitLab