Dockerfile Basics: কাস্টম ইমেজ তৈরির শুরু 🏗️
এতক্ষণ আমরা ডকার হাব থেকে রেডি-মেড ইমেজ ডাউনলোড করে ব্যবহার করেছি। কিন্তু বাস্তব জীবনে আপনি যখন নিজের কোনো অ্যাপ্লিকেশন (Node.js, Python, Java) কন্টেইনারাইজ করতে চাইবেন, তখন আপনার নিজের একটি ইমেজ তৈরি করতে হবে। আর এই ইমেজ তৈরির জন্য যে টেক্সট ফাইলটি ব্যবহৃত হয়, তাকেই বলা হয় Dockerfile।
১. Dockerfile কি?
Dockerfile হলো একটি সাধারণ টেক্সট ফাইল যেখানে ধাপে ধাপে কিছু ইন্সট্রাকশন বা কমান্ড লেখা থাকে। ডকার এই ফাইলটি পড়ে অটোমেটিক একটি ইমেজ তৈরি করে ফেলে। সহজ কথায়, এটি হলো আপনার অ্যাপ্লিকেশনের ইমেজের একটি "রেসিপি"।
২. Dockerfile Structure (মেইন ইন্সট্রাকশন)
একটি বেসিক Dockerfile-এ সাধারণত নিচের ইন্সট্রাকশনগুলো থাকে:
# ১. বেস ইমেজ সেট করা
FROM node:18-alpine
# ২. কন্টেইনারের ভেতরে কোন ফোল্ডারে কাজ হবে
WORKDIR /app
# ৩. হোস্ট মেশিন থেকে ফাইল কপি করা
COPY . .
# ৪. ডিপেনডেন্সি ইন্সটল করা
RUN npm install
# ৫. পোর্ট ডকুমেন্টেশন (ঐচ্ছিক কিন্তু জরুরি)
EXPOSE 3000
# ৬. এনভায়রনমেন্ট ভেরিয়েবল (ঐচ্ছিক)
ENV NODE_ENV=production
# ৭. কন্টেইনার চালু হওয়ার সময় কোন কমান্ড চলবে
CMD ["npm", "start"]৩. গুরুত্বপূর্ণ ইন্সট্রাকশনগুলোর ব্যাখ্যা
FROM: প্রত্যেকটি Dockerfile অবশ্যই এই কমান্ড দিয়ে শুরু হতে হবে। এটি ঠিক করে দেয় আপনার ইমেজটি কোন বেস ইমেজের উপর ভিত্তি করে তৈরি হবে।RUN: ইমেজ বিল্ড হওয়ার সময় কন্টেইনারের ভেতরে কোনো কমান্ড (যেমন:apt update,npm install) চালানোর জন্য এটি ব্যবহৃত হয়।COPYvsADD: লোকাল ফাইল ইমেজে নেওয়ার জন্যCOPYব্যবহার করা হয়।ADDএকটু বেশি পাওয়ারফুল (যেমন: URL থেকে ফাইল নামানো বা আর্কাইভ ফাইল এক্সট্রাক্ট করা), তবে সাধারণ কাজের জন্যCOPYরেকমেন্ডেড।CMD: এটি কন্টেইনারটি "রান" হওয়ার সময় কার্যকর হয়। একটি Dockerfile-এ শুধুমাত্র একটিCMDথাকতে পারে।WORKDIR: এটি কন্টেইনারের ভেতরে আপনার কাজের ডিরেক্টরি সেট করে দেয় (Linux-এরcdকমান্ডের মতো)।
৪. Build Context এবং .dockerignore
আপনি যখন docker build কমান্ড চালান, তখন সেই ফোল্ডারের সব ফাইল ডকার ইঞ্জিনের কাছে পাঠানো হয়। একে বলে Build Context। অপ্রয়োজনীয় ফাইল (যেমন: node_modules, .git, লার্জ ফাইল) ইমেজে যাওয়া আটকাতে আমরা .dockerignore ফাইল ব্যবহার করি।
৫. Layer Caching (বিল্ড স্পিড বাড়ানো)
ডকার প্রতিটি ইন্সট্রাকশনকে এক একটি Layer হিসেবে সেভ করে রাখে। আপনি যদি কোনো লাইনে পরিবর্তন না করেন, তবে ডকার আগের জমানো (Cache) লেয়ার ব্যবহার করে। টিপস: সবসময় ডিপেনডেন্সি ইন্সটল করার ধাপটি (RUN npm install) ফাইল কপি করার আগেই করার চেষ্টা করুন, যাতে কোড চেঞ্জ করলেও ডকার বারবার লাইব্রেরি ইন্সটল না করে।
৬. কিভাবে ইমেজ বিল্ড করবেন?
টার্মিনালে গিয়ে নিচের কমান্ডটি ব্যবহার করুন (যেখানে Dockerfile আছে):
docker build -t my-app:v1 .-t: ইমেজটি ট্যাগ বা নাম দেওয়ার জন্য।.: বর্তমান ফোল্ডারকে বিল্ড কন্টেক্সট হিসেবে ব্যবহারের জন্য।
IMPORTANT
একটি ভালো Dockerfile আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং সিকিউরিটি বহুগুণ বাড়িয়ে দিতে পারে। চেষ্টা করবেন সবসময় ছোট সাইজের বেস ইমেজ (যেমন: alpine ভার্সন) ব্যবহার করতে।