ডকার মাল্টি-স্টেজ বিল্ড: ছোট, নিরাপদ ও দ্রুত ইমেজ তৈরির কৌশল


[ ১০ জিবি সার্ভারে ২ জিবি ডকার ইমেজ? স্পেসের ২০% নষ্ট! Docker Multi-Stage Build এর মাধ্যমে ইমেজ সাইজ কমানো সম্ভব। এটি build tools, dev dependencies সরিয়ে ছোট, secure এবং দ্রুত ইমেজ তৈরি করে। CI/CD pipeline দ্রুততর হয়, resource consumption কমে। Clean ও maintainable Dockerfile তৈরি করে। performance, security, scalability বৃদ্ধি পায়। Docker ব্যবহারকারীদের জন্য এটি "best practice"। ]

Docker Multi-Stage Build

ধরুন আপনি একটি হোস্টিং প্ল্যাটফর্মে ১০ জিবি জায়গা বিশিষ্ট একটি সার্ভার কিনেছেন। আপনার অ্যাপ্লিকেশনটি আপনি Docker ব্যবহার করে containerize করেছেন। এখন যখন আপনি Docker image build করলেন, তখন দেখতে পেলেন শুধুমাত্র build করার পরেই ইমেজটি হয়ে গেছে প্রায় ২ জিবি।

ফলাফল? আপনার হোস্টিং স্পেসের প্রায় ২০% জায়গা চলে গেল শুধুমাত্র একটি ইমেজ রাখতেই। এতে আপনার সার্ভারের মূল্যবান স্পেস সীমিত হয়ে পড়ল—যা পারফরম্যান্স এবং অন্যান্য ফাইল/সার্ভিসের জন্য বড় সমস্যা তৈরি করতে পারে।

এছাড়া, যদি আপনি এই ইমেজটি AWS EC2 Instance বা অন্য কোন ক্লাউড সার্ভারে রান করেন, তাহলে আপনাকে অপ্রয়োজনীয় ২ জিবি ডেটা ট্রান্সফার ও স্টোরেজ এর জন্য আলাদা কস্ট দিতে হবে। এবং এটা প্রতি মাসেই জমতে জমতে বড় অঙ্কে পৌঁছাতে পারে।

Docker Multi-Stage Build-এর গুরুত্ব


1. ইমেজ সাইজ কমায়

ডকার ইমেজে build tools, dev dependencies, test ফাইল ইত্যাদি থাকলে ইমেজ অনেক বড় হয়। Multi-stage build ব্যবহারে এগুলো শুধু build stage-এ থাকে, এবং প্রোডাকশন ইমেজে কেবল প্রয়োজনীয় ফাইলগুলোই কপি হয়।

উদাহরণ:

  • Without Multi-Stage: 1.5GB
  • With Multi-Stage: 150MB

2. Security বাড়ায়

Build stage-এ থাকা debug tools, source code, dev dependencies, .env ফাইল ইত্যাদি যদি প্রোডাকশন ইমেজে চলে যায়, তাহলে security breach হতে পারে। Multi-stage build এসব ফাইল সরিয়ে clean image তৈরি করে।


3. Faster CI/CD pipeline

ছোট ইমেজ তৈরি হলে তা:

  • কম সময়ে build হয়
  • দ্রুত push/pull হয়
  • deployment pipeline দ্রুত কাজ করে

এতে CI/CD automation অনেক দ্রুত ও নির্ভরযোগ্য হয়।

4. Clean ও Maintainable Dockerfile

Build process এবং runtime environment আলাদা stage-এ রাখা হলে Dockerfile আরও পরিষ্কার, manage করা সহজ এবং environment-specific customization সহজ হয়।


5. কম resource consumption

ছোট ইমেজ মানে:

  • কম RAM ও CPU ব্যবহার
  • কম storage খরচ
  • embedded device বা low-resource server-এও চালানো যায়

উপসংহার

Docker Multi-Stage Build production-grade অ্যাপ্লিকেশন তৈরির জন্য একটি অত্যন্ত গুরুত্বপূর্ণ টুল। এটি performance, security, scalability এবং maintainability — সব দিক থেকে উপকার দেয়। যারা Docker ব্যবহার করেন, তাদের জন্য এটি এখন “best practice” হয়ে উঠেছে।

Example:


# STAGE - 1
FROM node:18 AS builder
WORKDIR /app 
COPY package*.json ./
RUN npm install 

COPY . .

# STAGE - 2

FROM node:18-slim AS production 
WORKDIR /app 
COPY --from=builder /app /app 
RUN npm prune --production
# ENTRYPOINT ["node", "index.js"]
EXPOSE 5000
CMD ["/app/start.sh"]

Posted by Md. Ruhul Amin, 1 month ago

More Blogs

author-image
Author
Md. Ruhul Amin
blog-image
ছোট, নিরাপদ ও দ্রুত: ডকার ইমেজ তৈরির সর্বোত্তম অনুশীলন

ডকার ইমেজের সাইজ ছোট রাখা অত্যন্ত গুরুত্বপূর্ণ। নির্দিষ্ট ভার্সন ব্যবহার (যেমন `FROM node:18`), `-slim` ব্যবহার করে বেইজ ইমেজের আকার কমানো, `.dockerignore` ফাইল ব্যবহার করে অপ্রয়োজনীয় ফাইল...

1 month ago

Read more
blog-image
পারফর্মােন্স ও নিরাপত্তা নিরীক্ষণে Percona Monitoring and Management (PMM) এর কার্যকারিতা

পারফর্মােন্স ও নিরাপত্তা নিশ্চিত করার জন্য ডাটাবেইজ মনিটরিং অত্যন্ত গুরুত্বপূর্ণ। Percona Monitoring and Management (PMM) টুলটি এই কাজে অসাধারণ। বিভিন্ন এনভায়রনমেন্টের (Production, UAT, Testing, Development) ডাটাবেইজ সার্ভারগুলোকে কেন্দ্রীয়...

1 month ago

Read more
blog-image
মাইক্রোসার্ভিসে কাস্টম ডোমেইন ব্যবহার: একটি সহজ নির্দেশিকা

মাইক্রোসার্ভিসে কাস্টম ডোমেইন ব্যবহারের সহজ উপায়। Node.js, PHP, Python এ তৈরি Microservice এর জন্য `http://edns.system.com` URL ব্যবহার। `127.0.0.1` এর পরিবর্তে ডোমেইন ব্যবহারে DNS Server ও HOSTS ফাইলের ভূমিকা।...

2 months ago

Read more
blog-image
Distributed Networking Application System Design Architecture (episode -01)

পর্ব ১: ইন্টারনেটের ভেতরের গল্প! বিভিন্ন প্রোগ্রামিং ভাষার দল মিলে Network Application তৈরি করে। এই Application এর Architecture ধাপে ধাপে বুঝতে চেষ্টা করবো। Client-Server...

1 month ago

Read more