Dockerfile خوب هم سرعت ساخت را بالا می‌برد و هم سطح حمله را کم می‌کند.

# مرحلهٔ ساخت
FROM node:20 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# مرحلهٔ اجرا
FROM node:20-slim
WORKDIR /app
COPY --from=build /app/dist ./dist
USER node
CMD ["node", "dist/server.js"]
  • Multi-stage: ابزارهای ساخت در ایمیج نهایی نمی‌مانند.
  • ترتیب لایه‌ها: فایل‌هایی که کمتر عوض می‌شوند (مثل package.json) را زودتر کپی کنید تا کش بماند.
  • .dockerignore: node_modules و فایل‌های لازم‌نشده را کنار بگذارید.
  • کاربر غیرroot: برنامه را با USER اجرا کنید.
  • نسخهٔ ایمیج پایه را ثابت و سبک انتخاب کنید.