# Step 1: Build the application FROM node:22-alpine AS builder # Set working directory WORKDIR /app # Install dependencies COPY package.json package-lock.json* ./ RUN npm ci # Copy application source COPY . . # Build the application RUN npm run build # Step 2: Run the application using a minimal image FROM node:22-alpine AS runner # Set working directory WORKDIR /app # Install only production dependencies COPY package.json package-lock.json ./ RUN npm ci --omit=dev # Copy built assets from builder COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next COPY --from=builder --chown=nextjs:nodejs /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules COPY --from=builder --chown=nextjs:nodejs /app/package.json ./package.json COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static # Set environment variable for production ENV NODE_ENV=production # Expose port (default for Next.js) EXPOSE 3000 # Start the Next.js app CMD ["npm", "start"]