DockerAdvanced
Multi-stage Builds
বড় build-এর জন্য আলাদা stage, ছোট runtime — multi-stage pattern ব্যাখ্যা ও উদাহরণ — বাংলায়।
10টি অংশবাংলা ভাষায়
Multi-stage build মানে একই Dockerfile-এ একাধিক FROM — প্রতিটি stage আলাদা environment। আগের stage-এর শুধু দরকারি artifact পরের stage-এ নিয়ে আসা হয়, বাকিটা ফেলে দেওয়া হয়।
কেন দরকার
- ছোট image — build tools আর runtime stage-এ থাকে না
- নিরাপদ — source code/কী surface কমে
- আলাদা config — prod/dev আলাদা stage
- টেকসই builder —
--targetদিয়ে একটি stage বেছে বেশি
আদর্শ Example — TypeScript API
Dockerfiledockerfile
dockerfile
# STAGE 1 —— build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY tsconfig.json ./
COPY src ./src
RUN npm run build
# → dist/ তৈরি
# STAGE 2 —— production dependencies
FROM node:20-alpine AS prod-deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
# STAGE 3 —— runtime
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=prod-deps /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]Build cache-কে কাজে লাগানো
প্রতিটি stage আলাদাভাবে cache হয়। সবচেয়ে স্থিতিশীল file (package.json) আগে কপি ও install করুন — কোড বদলালে dependency layer re-run হয় না।
Stage-এর মধ্যে file চয়ন
COPY --fromdockerfile
dockerfile
# builder stage থেকে শুধু dist
COPY --from=builder /app/dist ./dist
# static assetsও
COPY --from=builder /app/public ./publicनहीं বিল্ড করলে না
Files যেগুলো runtime-এ দরকার না — যেমন source, tests, build tools — সেগুলো runtime stage-এ কপি করবেন না। তাতে image ভারী হয় এবং attack surface বাড়ে।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।