Multi-Stage Builds: ইমেজের সাইজ কমানোর ম্যাজিক 🪄
ডকার ইমেজ তৈরি করার সময় আমাদের অনেক টুলস এবং ফাইল প্রয়োজন হয় (যেমন: কম্পাইলার, সোর্স কোড, বিল্ড টুলস)। কিন্তু অ্যাপ্লিকেশন রান করার সময় এই সবকিছুর প্রয়োজন হয় না। Multi-Stage Build হলো এমন একটি পদ্ধতি যার মাধ্যমে আমরা ইমেজের সাইজ অনেক কমিয়ে আনতে পারি এবং সিকিউরিটি বাড়াতে পারি।
১. Multi-Stage Build কি?
একটি মাত্র Dockerfile-এ একাধিক FROM ইন্সট্রাকশন ব্যবহার করাকেই Multi-Stage Build বলা হয়। প্রতিটি FROM একটি নতুন Stage শুরু করে। আপনি এক স্টেজ থেকে অন্য স্টেজে প্রয়োজনীয় ফাইল কপি করে নিয়ে আসতে পারেন এবং অপ্রয়োজনীয় ফাইলগুলোকে পেছনে ফেলে আসতে পারেন।
২. কেন এটি প্রয়োজন? (উপকারিতা)
- ইমেজ সাইজ কমানো: বিল্ড করার টুলস (যেমন: 1GB-এর SDK) বাদ দিয়ে শুধুমাত্র চালানোর উপযোগী ফাইল (যেমন: 10MB-এর বাইনারি) ইমেজে রাখা হয়।
- সিকিউরিটি: ইমেজে যত কম ফাইল থাকবে, অ্যাটাক হওয়ার সুযোগ তত কম থাকবে।
- বিল্ড অপ্টিমাইজেশন: বিল্ড এবং রান-টাইম এনভায়রনমেন্ট আলাদা রাখা যায়।
৩. প্র্যাকটিক্যাল উদাহরণ (Node.js App)
নিচে একটি আদর্শ Multi-Stage Dockerfile দেখানো হলো:
dockerfile
# ১. বিল্ড স্টেজ (Build Stage)
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# ২. প্রোডাকশন স্টেজ (Production Stage)
FROM node:16-alpine
WORKDIR /app
# আগের স্টেজ (builder) থেকে শুধুমাত্র বিল্ড করা ফাইল কপি করা
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]এখানে কি ঘটছে?
AS builder: প্রথম স্টেজটির একটি নাম দেওয়া হয়েছে যাতে পরে এটিকে রেফার করা যায়।COPY --from=builder: এটিই আসল ম্যাজিক! এটি আগের স্টেজ থেকে নির্দিষ্ট ফাইল বা ফোল্ডার নিয়ে আসে।- Alpine Base Image: সেকেন্ড স্টেজে ছোট সাইজের
alpineইমেজ ব্যবহার করে ইমেজের সাইজ আরও কমিয়ে আনা হয়েছে।
৪. Single-Stage vs Multi-Stage
| ফিচার | Single-Stage | Multi-Stage |
|---|---|---|
| Size | অনেক বড় (Large) | অত্যন্ত ছোট (Minimal) |
| Files | সোর্স কোড + বিল্ড টুলস সব থাকে | শুধুমাত্র প্রোডাকশন ফাইল থাকে |
| Security | কম নিরাপদ | বেশি নিরাপদ |
TIP
প্রোডাকশনের জন্য ইমেজ তৈরি করার সময় সবসময় Multi-Stage পদ্ধতি ব্যবহার করবেন। এটি আপনার ক্লাউড স্টোরেজের খরচ বাঁচাবে এবং ডেপ্লয়মেন্ট দ্রুত করবে।