From 34d82166e4c60a42be5a80f0711923d7a97ae4c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20M=C3=BCller-Downing?= Date: Tue, 22 Sep 2020 22:30:37 +1000 Subject: [PATCH] Trim Docker image size * Only copy production node dependencies into image * Use multi-stage build to make use of node dependency cache * Use non-root user --- Dockerfile | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 566d1d4a..9f3070f3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,39 @@ -FROM node:12.18-alpine - +# Build image +FROM node:12.18-alpine AS build ARG DATABASE_TYPE - ENV DATABASE_URL "postgresql://umami:umami@db:5432/umami" \ DATABASE_TYPE=$DATABASE_TYPE +WORKDIR /build -WORKDIR /app -EXPOSE 3000 +COPY package.json yarn.lock /build/ -COPY package.json yarn.lock /app/ -RUN yarn install --frozen-lockfile +# Install only the production dependencies +RUN yarn install --production -COPY . /app +# Cache these modules for production +RUN cp -R node_modules/ prod_node_modules/ + +# Install development dependencies +RUN yarn install + +COPY . /build RUN yarn build +# Production image +FROM node:12.18-alpine AS production +WORKDIR /app + +# Copy cached dependencies +COPY --from=build /build/prod_node_modules ./node_modules + +# Copy generated Prisma client +COPY --from=build /build/node_modules/\.prisma/ ./node_modules/\.prisma/ + +COPY --from=build /build/yarn.lock /build/package.json ./ +COPY --from=build /build/.next ./.next +COPY --from=build /build/public ./public + +USER node + +EXPOSE 3000 CMD ["yarn", "start"]