पाठ 22 / 28
मल्टी-स्टेज बिल्ड
Multi-stage builds से images छोटे करें जो एक stage में compile करते हैं और अंतिम image में केवल runtime artifacts copy करते हैं।
इसकी ज़रूरत क्यों?
बिल्ड टूल्स, कंपाइलर, और सोर्स कोड अक्सर रनटाइम पर ज़रूरी नहीं होते, फिर भी एक-स्टेज Dockerfile उन्हें भेज देता है — जिससे इमेज और उसकी अटैक सतह बढ़ जाती है।
बिल्ड स्टेज + रनटाइम स्टेज
AS से किसी स्टेज को नाम दें, फिर COPY --from=<stage> केवल बना हुआ आर्टिफ़ैक्ट पतली अंतिम इमेज में लाता है — कंपाइलर और dev डिपेंडेंसी कभी उसमें नहीं जातीं।
# --- build stage ---
FROM node:22 AS build
WORKDIR /app
COPY . .
RUN npm install && npm run build
# --- runtime stage ---
FROM node:22-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY package.json .
RUN npm ci --omit=dev
CMD ["node", "dist/server.js"]