# syntax=docker/dockerfile:1.7 FROM node:22-alpine AS deps WORKDIR /app # Cache mount survives layer invalidation — package.json churn no longer re-downloads the world RUN --mount=type=cache,target=/root/.npm npm ci --omit=dev FROM node:22-alpine AS runtime WORKDIR /app ENV NODE_ENV=production COPY --from=deps /app/node_modules ./node_modules COPY . . USER node CMD ["node", "server.js"]