From 073abf1fda072f516aff48001fd544e1854a2a1d Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Sun, 18 Apr 2021 21:56:29 +0300 Subject: [PATCH] update Dockerfiles based on official example --- .dockerignore | 12 ++++++++---- Dockerfile | 43 +++++++++++++++++++++++++++++-------------- Dockerfile.prod | 43 +++++++++++++++++++++++++++++-------------- 3 files changed, 66 insertions(+), 32 deletions(-) diff --git a/.dockerignore b/.dockerignore index 11c0c5e..90b0ae1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,7 +1,13 @@ +Dockerfile +Dockerfile.prod +.dockerignore +node_modules +npm-debug.log +README* +LICENSE .next .vscode e2e-screenshots -node_modules tests .env* .eslintrc.json @@ -10,6 +16,4 @@ tests .gitlab-ci.yml .nvmrc .stylelintrc -LICENSE -README* -stack-compose* \ No newline at end of file +stack-compose* diff --git a/Dockerfile b/Dockerfile index dc7d45f..bef9174 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,26 +1,41 @@ -FROM node:14-alpine as builder - +# Install dependencies only when needed +FROM node:14-alpine AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app COPY package.json package-lock.json ./ -RUN npm install +RUN npm ci -COPY tsconfig.json next-env.d.ts .babelrc next.config.js next-sitemap.js ./ -COPY src src/ -COPY public public/ -COPY types types/ +# Rebuild the source code only when needed +FROM node:14-alpine AS builder +WORKDIR /app +COPY . . +COPY --from=deps /app/node_modules ./node_modules ENV NEXT_TELEMETRY_DISABLED=1 ENV NEXT_PUBLIC_API_URL=https://api.dev.sahkoinsinoorikilta.fi/api ENV NEXT_PUBLIC_SITE_URL=https://dev.sahkoinsinoorikilta.fi RUN npm run build -FROM node:14-alpine as server -WORKDIR /www -COPY package.json package-lock.json next.config.js next-sitemap.js ./ -COPY --from=builder .next .next -COPY --from=builder node_modules node_modules -COPY --from=builder public public +# Production image, copy all the files and run next +FROM node:14-alpine AS runner +WORKDIR /app + +ENV NODE_ENV production + +COPY --from=builder /app/next.config.js ./ +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/package.json ./package.json RUN npm prune --production +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 +RUN chown -R nextjs:nodejs /app/.next +USER nextjs + EXPOSE 3000 -ENTRYPOINT ["npm", "run", "serve"] + +CMD ["npm", "run", "serve"] diff --git a/Dockerfile.prod b/Dockerfile.prod index 2f1ff6c..bd6ae94 100644 --- a/Dockerfile.prod +++ b/Dockerfile.prod @@ -1,26 +1,41 @@ -FROM node:14-alpine as builder - +# Install dependencies only when needed +FROM node:14-alpine AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app COPY package.json package-lock.json ./ -RUN npm install +RUN npm ci -COPY tsconfig.json next-env.d.ts .babelrc next.config.js next-sitemap.js ./ -COPY src src/ -COPY public public/ -COPY types types/ +# Rebuild the source code only when needed +FROM node:14-alpine AS builder +WORKDIR /app +COPY . . +COPY --from=deps /app/node_modules ./node_modules ENV NEXT_TELEMETRY_DISABLED=1 ENV NEXT_PUBLIC_API_URL=https://api.sahkoinsinoorikilta.fi/api ENV NEXT_PUBLIC_SITE_URL=https://sahkoinsinoorikilta.fi RUN npm run build -FROM node:14-alpine as server -WORKDIR /www -COPY package.json package-lock.json next.config.js next-sitemap.js ./ -COPY --from=builder .next .next -COPY --from=builder node_modules node_modules -COPY --from=builder public public +# Production image, copy all the files and run next +FROM node:14-alpine AS runner +WORKDIR /app + +ENV NODE_ENV production + +COPY --from=builder /app/next.config.js ./ +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/package.json ./package.json RUN npm prune --production +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 +RUN chown -R nextjs:nodejs /app/.next +USER nextjs + EXPOSE 3000 -ENTRYPOINT ["npm", "run", "serve"] + +CMD ["npm", "run", "serve"]