From fd0af6b2dddce3f951f5a27da8e9568baaaeb59c Mon Sep 17 00:00:00 2001 From: Jaffar Ashoor Date: Sun, 23 Mar 2025 02:59:40 +0300 Subject: [PATCH] Reduce final docker image size this adds a third stage to the build, copying the required files only from the previos stages, this reduces the final image size from 600MB+ down to ~320MB --- Dockerfile | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4e110a61..3eea9cd5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,12 @@ ### STAGE 0: Build client ### -FROM node:20-alpine AS build +FROM node:20-alpine AS build-client WORKDIR /client COPY /client /client RUN npm ci && npm cache clean --force RUN npm run generate ### STAGE 1: Build server ### -FROM node:20-alpine +FROM node:20-alpine AS build-server ENV NODE_ENV=production @@ -21,9 +21,9 @@ RUN apk update && \ tini \ unzip -COPY --from=build /client/dist /client/dist -COPY index.js package* / -COPY server server +WORKDIR /server +COPY index.js package* /server +COPY /server /server/server ARG TARGETPLATFORM @@ -42,7 +42,20 @@ RUN case "$TARGETPLATFORM" in \ RUN npm ci --only=production -RUN apk del make python3 g++ +### STAGE 2: Create minimal runtime image ### +FROM node:20-alpine + +# Install only runtime dependencies +RUN apk add --no-cache \ + tzdata \ + ffmpeg \ + tini + +WORKDIR /app + +# Copy compiled frontend and server from build stages +COPY --from=build-client /client/dist /app/client/dist +COPY --from=build-server /server /app EXPOSE 80