From 40810b48ebde8b1f21d2448a3a4de0585b1b5e34 Mon Sep 17 00:00:00 2001 From: Corey Date: Mon, 9 Jan 2023 13:26:03 -0500 Subject: [PATCH] feat: Reduce Docker image size by improving stages (#8359) BREAKING CHANGE: The Docker image does not contain the git dependency anymore; if you have been using git as a transitive dependency it now needs to be explicitly installed in your Docker file, for example with `RUN apk --no-cache add git` (#8359) --- Dockerfile | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/Dockerfile b/Dockerfile index a351d090..413a9bd2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,9 @@ ############################################################ # Build stage ############################################################ -FROM node:lts-alpine as build +FROM node:lts-alpine AS build -RUN apk update; \ - apk add git; +RUN apk --no-cache add git WORKDIR /tmp # Copy package.json first to benefit from layer caching @@ -13,37 +12,32 @@ COPY package*.json ./ # Copy src to have config files for install COPY . . -# Clean npm cache; added to fix an issue with the install process -RUN npm cache clean --force - -# Install all dependencies -RUN npm ci - -# Run build steps -RUN npm run build +# Install without scripts +RUN npm ci --omit=dev --ignore-scripts \ + # Copy production node_modules aside for later + && cp -R node_modules prod_node_modules \ + # Install all dependencies + && npm ci \ + # Run build steps + && npm run build ############################################################ # Release stage ############################################################ -FROM node:lts-alpine as release - -RUN apk update; \ - apk add git; +FROM node:lts-alpine AS release VOLUME /parse-server/cloud /parse-server/config WORKDIR /parse-server +# Copy build stage folders +COPY --from=build /tmp/prod_node_modules /parse-server/node_modules +COPY --from=build /tmp/lib lib + COPY package*.json ./ - -# Clean npm cache; added to fix an issue with the install process -RUN npm cache clean --force -RUN npm ci --production --ignore-scripts - COPY bin bin COPY public_html public_html COPY views views -COPY --from=build /tmp/lib lib RUN mkdir -p logs && chown -R node: logs ENV PORT=1337