Come fare la build di un’immagine Docker di un’applicazione NextJs
Abbiamo bisogno di mettere in produzione la nostra applicazione NextJs e ci serve un’immagine Docker leggera su dove farla girare?
Creiamo il nostro Dockerfile in questo modo
# Se stai facendo copia ed incolla, abbi cura di realizzare un .dockerignore!
# Iniziamo il deploy come dipendenza
FROM node:16.13.0-alpine AS deps
# Se ti serve libc per le tue dipendenze, togli il commento dalla riga sottostante:
# RUN apk add --no-cache libc6-compat
# Copiamo solamente il package.json ed installiamo i moduli!
WORKDIR /app
COPY package.json ./
RUN npm install --frozen-lockfile
# END DEPS IMAGE
# Ora creiamo un container solamente per la Build
FROM node:16.13.0-alpine AS BUILD_IMAGE
# Setting della nostra work directory
WORKDIR /app
# Copiamo dalla nostra DEPS, aggiungiamo la'pplicazione
# ed eseguiamo la nostra build di produzione
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build
# Rimuoviamo tutte le dipendenze
# e rieseguiamo l'install ma questa volta con il flag --production.
RUN rm -rf node_modules
RUN npm install --production --frozen-lockfile --ignore-scripts --prefer-offline
# END OF BUILD_IMAGE
# Adesso startiamo la nostra immagine finale.
FROM node:16.13.0-alpine
ENV NODE_ENV production
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
# Andiamo a prenderci i file necessari dalla BUILD_IMAGE - e ci servirà:
# 1. il package.json
# 2. la Next build e tutti gli static files
# 3. i node_modules.
WORKDIR /app
COPY --from=BUILD_IMAGE --chown=nextjs:nodejs /app/package.json ./
COPY --from=BUILD_IMAGE --chown=nextjs:nodejs /app/node_modules ./node_modules
COPY --from=BUILD_IMAGE --chown=nextjs:nodejs /app/public ./public
COPY --from=BUILD_IMAGE --chown=nextjs:nodejs /app/.next ./.next
# 4. Opzionale se la tua applicazione ha un next.config.js
COPY --from=BUILD_IMAGE --chown=nextjs:nodejs /app/next.config.js ./
USER nextjs
EXPOSE 3000
CMD [ "npm", "start" ]
Unisciti alla discussione