From 2e4c005ad977a3e6b76565a71a66f2a74d1c8b9c Mon Sep 17 00:00:00 2001
From: Jason Rasmussen <jrasm91@gmail.com>
Date: Thu, 10 Nov 2022 23:22:17 -0500
Subject: [PATCH] refactor: multistage builds (#955)

---
 docker/docker-compose.test.yml |  2 +-
 machine-learning/Dockerfile    | 12 ++++++++----
 server/Dockerfile              | 14 +++++++++-----
 3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/docker/docker-compose.test.yml b/docker/docker-compose.test.yml
index 8b4c8fe23..343374e5c 100644
--- a/docker/docker-compose.test.yml
+++ b/docker/docker-compose.test.yml
@@ -7,7 +7,7 @@ services:
       context: ../server
       dockerfile: Dockerfile
       target: builder
-    command: npm ci && npm run test:e2e
+    command: npm run test:e2e
     expose:
       - '3000'
     volumes:
diff --git a/machine-learning/Dockerfile b/machine-learning/Dockerfile
index 3c290c8b3..753cb9893 100644
--- a/machine-learning/Dockerfile
+++ b/machine-learning/Dockerfile
@@ -1,5 +1,4 @@
 
-# Build stage
 FROM node:16-bullseye-slim as builder
 
 ARG DEBIAN_FRONTEND=noninteractive
@@ -16,9 +15,14 @@ RUN npm rebuild @tensorflow/tfjs-node --build-from-source
 
 COPY . .
 
+
+FROM builder as prod
+
 RUN npm run build
 
-# Prod stage
+RUN npm prune --omit=dev
+
+
 FROM node:16-bullseye-slim
 
 ARG DEBIAN_FRONTEND=noninteractive
@@ -29,8 +33,8 @@ RUN apt-get update \
   && apt-get install -y ffmpeg \
   && rm -rf /var/cache/apt/lists
 
-COPY --from=builder /usr/src/app/node_modules ./node_modules
-COPY --from=builder /usr/src/app/dist ./dist
+COPY --from=prod /usr/src/app/node_modules ./node_modules
+COPY --from=prod /usr/src/app/dist ./dist
 
 COPY package.json package-lock.json ./
 COPY entrypoint.sh ./
diff --git a/server/Dockerfile b/server/Dockerfile
index 97d345eba..322d05660 100644
--- a/server/Dockerfile
+++ b/server/Dockerfile
@@ -10,18 +10,22 @@ RUN npm ci
 
 COPY . .
 
-RUN npm run build
 
-# Prod stage
+FROM builder as prod
+
+RUN npm run build
+RUN npm prune --omit=dev
+
+
 FROM node:16-alpine3.14
 
 WORKDIR /usr/src/app
 
 RUN apk add --no-cache libheif vips ffmpeg
 
-COPY --from=builder /usr/src/app/node_modules ./node_modules
-COPY --from=builder /usr/src/app/dist ./dist
-COPY --from=builder /usr/src/app/bin ./bin
+COPY --from=prod /usr/src/app/node_modules ./node_modules
+COPY --from=prod /usr/src/app/dist ./dist
+COPY --from=prod /usr/src/app/bin ./bin
 
 COPY LICENSE /licenses/LICENSE.txt
 COPY LICENSE /LICENSE