Docker কি এবং ডেভেলপারদের এটি শিখতে হবে কেন?
ডেভেলপারদের জন্য Docker-এর ব্যবহারিক ব্রেকডাউন: কন্টেইনার বনাম VM, মূল কমান্ড, Dockerfile, এবং কীভাবে এটি বাস্তব প্রকল্পে ব্যবহার শুরু করতে হয়।
Docker চাকরির বিজ্ঞাপন এবং সেটআপ গাইডে ক্রমাগত আসছে, এবং যদি আপনি কখনও কন্টেইনার ছুঁয়েছেন না তবে এটি এমন একটি দেয়াল মনে হতে পারে যা আপনাকে বাস্তব কোড লেখার আগে অতিক্রম করতে হবে। শব্দকোষ অতিক্রম করলে এটি জটিল নয়।
একটি কন্টেইনার আসলে কী
কন্টেইনার আপনার অ্যাপ্লিকেশনকে এটি চালানোর জন্য প্রয়োজনীয় সবকিছুর সাথে প্যাকেজ করে: কোড, রানটাইম, সিস্টেম লাইব্রেরি এবং কনফিগ ফাইল। এটি ভার্চুয়াল মেশিন নয়। একটি VM সম্পূর্ণ অপারেটিং সিস্টেম, কার্নেল সহ ভার্চুয়ালাইজ করে, যার মানে একটি বুট করতে এক মিনিট সময় লাগতে পারে এবং কয়েক গিগাবাইট RAM খেতে পারে। কন্টেইনার হোস্ট মেশিনের কার্নেল শেয়ার করে এবং শুধুমাত্র প্রক্রিয়া বিচ্ছিন্ন করে, তাই এটি এক সেকেন্ডের কম সময়ে শুরু হয় এবং সাধারণত গিগাবাইটের পরিবর্তে দশ মেগাবাইট ব্যবহার করে।
এই পার্থক্যই Docker স্থানীয় ডেভেলপমেন্ট এবং CI পাইপলাইনে এত দ্রুত দখল করেছে। আপনি একটি ল্যাপটপে Postgres ডাটাবেস, Redis ক্যাশ এবং আপনার অ্যাপ সার্ভার স্পিন আপ করতে পারেন আপনার OS-এ সরাসরি কিছু ইনস্টল না করেই।
আপনার যা জানা দরকার তার মূল অংশ
চারটি শব্দ রয়েছে যা আপনি প্রতিদিন যা নিয়ে কাজ করবেন তার বেশিরভাগই কভার করে:
- Image: একটি Dockerfile থেকে তৈরি শুধুমাত্র পড়ার জন্য টেমপ্লেট। এটিকে একটি ফাইলসিস্টেমের স্ন্যাপশট এবং এটি কীভাবে চালাতে হবে সে সম্পর্কে মেটাডেটা হিসাবে ভাবুন।
- Container: একটি image-এর চলমান উদাহরণ। আপনি যে image থেকে এসেছে তাতে স্পর্শ না করে কন্টেইনার শুরু, থেমে এবং মুছতে পারেন।
- Dockerfile: একটি টেক্সট ফাইল যাতে একটি image তৈরি করার জন্য নির্দেশাবলী রয়েছে, লাইন অনুযায়ী লাইন।
- Registry: যেখানে image সংরক্ষিত এবং টানা হয়, সাধারণত Docker Hub।
একটি Node.js অ্যাপের জন্য ন্যূনতম Dockerfile এরকম দেখায়:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
docker build -t my-app . দিয়ে তৈরি করুন এবং docker run -p 3000:3000 my-app দিয়ে চালান। -p ফ্ল্যাগ আপনার মেশিনের পোর্টকে কন্টেইনারের ভেতরে একটি পোর্টে ম্যাপ করে, যেটি হল কীভাবে আপনি আপনার ব্রাউজার থেকে অ্যাপে পৌঁছান।
কমান্ড যা আপনি ক্রমাগত ব্যবহার করবেন
কয়েকটি কমান্ড বেশিরভাগ দৈনন্দিন কাজ কভার করে:
docker ps— চলমান কন্টেইনার তালিকা করুনdocker ps -a— সমস্ত কন্টেইনার তালিকা করুন, থেমে থাকা অন্তর্ভুক্তdocker images— আপনার মেশিনে image তালিকা করুনdocker logs <container>— চলমান বা ক্র্যাশ করা কন্টেইনার থেকে আউটপুট চেক করুনdocker exec -it <container> sh— চলমান কন্টেইনারের ভেতরে একটি শেল খুলুনdocker rm/docker rmi— আপনার যা আর প্রয়োজন নেই এমন কন্টেইনার এবং image পরিষ্কার করুন
শেষের যুগলটি মানুষ প্রত্যাশা করার চেয়ে বেশি গুরুত্বপূর্ণ। Docker আনন্দের সাথে পুরানো image এবং থেমে থাকা কন্টেইনারে ডিস্ক স্পেস অদৃশ্য হতে দেয়। docker system prune মাঝেমধ্যে চালানো অবাক করা পরিমাণে স্পেস পুনরুদ্ধার করে।
কেন docker-compose ওয়ার্কফ্লো পরিবর্তন করে
বেশিরভাগ বাস্তব প্রকল্পের একটিরও বেশি কন্টেইনার প্রয়োজন: একটি অ্যাপ সার্ভার, একটি ডাটাবেস, হয়তো একটি ক্যাশ। প্রতিটির জন্য docker run কমান্ড লেখা দ্রুত পুরানো হয়। docker-compose.yml আপনাকে সম্পূর্ণ স্ট্যাক একটি ফাইলে সংজ্ঞায়িত করতে দেয়:
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: devpassword
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
docker compose up চালান এবং উভয় সেবা একসাথে শুরু হয়, নেটওয়ার্ক করা যাতে web সেবা নাম দিয়ে db-এ পৌঁছাতে পারে। এটি এমন সেটআপ যা আপনি প্রায় প্রতিটি ওপেন-সোর্স রেপোর README-তে দেখবেন, এবং এটি বোঝা মানে আপনি একটি প্রকল্প ক্লোন করতে পারেন এবং কয়েক মিনিটে এটি চালু করতে পারেন Postgres, Redis এবং অন্য যা কিছু অ্যাপের প্রয়োজন তা ম্যানুয়ালি ইনস্টল করার পরিবর্তে।
যেখানে মানুষ প্রাথমিক পর্যায়ে ট্রিপ আপ করে
ভলিউম প্রথমে প্রায় সবাইকে বিভ্রান্ত করে। ভলিউম ছাড়া, কন্টেইনারের ভেতরে কিছু লেখা কন্টেইনার সরানো হলে অদৃশ্য হয়, যা ডাটাবেসের জন্য একটি সমস্যা। উপরের compose ফাইলে volumes অংশ একটি নাম করা ভলিউম কন্টেইনারের ভেতরে একটি পথে ম্যাপ করে যাতে ডেটা পুনরায় চালু করার পরেও টিকে থাকে।
আরেকটি সাধারণ ভুল হল node_modules বা .git কপি করা image-এ কারণ কোনো .dockerignore ফাইল নেই। একটি যোগ করুন ঠিক একটি .gitignore-র মতো:
node_modules
.git
.env
এটি বিল্ড দ্রুত রাখে এবং image ছোট করে, যা একবার আপনি image একটি registry-তে পুশ করছেন বা Kubernetes-এ স্থাপন করছেন তখন গুরুত্বপূর্ণ হয়।
মৌলিক বিষয়ের পরে কোথায় যেতে হবে
কন্টেইনার তৈরি এবং চালানো স্বাভাবিক অনুভব করার পর, পরবর্তী দরকারী দক্ষতা হল ছোট প্রোডাকশন image-এর জন্য মাল্টি-স্টেজ বিল্ড, Docker নেটওয়ার্কিং মোড বোঝা এবং docker inspect আউটপুট পড়া যখন কিছু সংযোগ না হচ্ছে। কোনোটি কঠিন নয়, এটি শুধু প্রথমবার অপরিচিত।
বাস্তব অ্যাপ্লিকেশন কন্টেইনার করা এবং তাদের ক্লাউড স্থাপনা পাইপলাইনে সংযোগ করার বিষয়ে আরও জানতে, Korra Studio-তে DevOps এবং Cloud সেগমেন্ট দেখুন।
AI সহায়তায় লেখা, পর্যালোচনা ও প্রকাশ করেছেন Michal Pilch (CISSP), Korra Studio।
এটি Korra Studio-র নলেজ বেস থেকে একটি নোট — প্ল্যাটফর্মটি প্রতিটি বিষয়কে ১-এর-সাথে-১ মেন্টরিংয়ের সাথে জুড়ে দেয়।
বিনামূল্যে শুরু করুনarrow_forward