ডেভেলপারদের জন্য ডকার: ইমেজ, কনটেইনার এবং কম্পোজ
একজন ডেভেলপার হিসেবে, আপনি সম্ভবত পরিবেশের অসঙ্গতির কারণে হতাশার সম্মুখীন হয়েছেন: "এটা আমার মেশিনে কাজ করে!" ডকার অ্যাপ্লিকেশনগুলিকে কনটেইনারে প্যাকেজ করে এই সমস্যার সমাধান করে। এই গাইডে ডকার ইমেজ, কনটেইনার এবং কম্পোজ ব্যাখ্যা করা হয়েছে যাতে আপনি ধারাবাহিকভাবে অ্যাপ্লিকেশন তৈরি, শিপ এবং চালাতে পারেন।
ডকার কী?
ডকার হল কনটেইনারে অ্যাপ্লিকেশন ডেভেলপ, শিপ এবং চালানোর একটি প্ল্যাটফর্ম। কনটেইনারগুলি হালকা, স্বতন্ত্র, এক্সিকিউটেবল প্যাকেজ যা সফটওয়্যার চালানোর জন্য প্রয়োজনীয় সবকিছু অন্তর্ভুক্ত করে: কোড, রানটাইম, সিস্টেম টুল, লাইব্রেরি এবং সেটিংস।
ইমেজ বনাম কনটেইনার
একটি ইমেজ হল একটি রিড-অনলি টেমপ্লেট যা কনটেইনার তৈরির নির্দেশনা ধারণ করে। একটি কনটেইনার হল একটি ইমেজের রানযোগ্য ইনস্ট্যান্স। আপনি একই ইমেজ থেকে একাধিক কনটেইনার তৈরি করতে পারেন, প্রতিটি অন্যটি থেকে বিচ্ছিন্ন।
ইমেজ নিয়ে কাজ করা
ইমেজগুলি একটি Dockerfile থেকে তৈরি হয়, যা নির্দেশনা সহ একটি টেক্সট ফাইল। এখানে একটি সাধারণ Node.js উদাহরণ:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
ইমেজ তৈরি করুন:
docker build -t my-app .
ইমেজ তালিকা করুন: docker images
কনটেইনার চালানো
একটি ইমেজ থেকে কনটেইনার শুরু করুন:
docker run -d -p 3000:3000 --name my-container my-app
এটি কনটেইনারটিকে ডিটাচড মোডে (-d) চালায়, পোর্ট 3000 ম্যাপ করে এবং এটির নাম দেয় my-container।
চলমান কনটেইনার তালিকা করুন: docker ps
একটি কনটেইনার থামান: docker stop my-container
একটি কনটেইনার সরান: docker rm my-container
কেন ডকার কম্পোজ ব্যবহার করবেন?
যখন আপনার অ্যাপ একাধিক সার্ভিসের (ডেটাবেস, ক্যাশে, ইত্যাদি) উপর নির্ভর করে, তখন পৃথক কনটেইনার পরিচালনা করা ক্লান্তিকর হয়ে ওঠে। ডকার কম্পোজ আপনাকে একটি YAML ফাইল ব্যবহার করে মাল্টি-কনটেইনার অ্যাপ্লিকেশন সংজ্ঞায়িত এবং চালানোর সুযোগ দেয়।
কম্পোজ ফাইল উদাহরণ
docker-compose.yml তৈরি করুন:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: example
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
সমস্ত সার্ভিস শুরু করুন: docker compose up -d
থামান এবং সরান: docker compose down
ডেভেলপারদের জন্য সেরা অনুশীলন
- .dockerignore ব্যবহার করুন: অপ্রয়োজনীয় ফাইল (node_modules, .git) বাদ দিন যাতে বিল্ড দ্রুত হয়।
- মাল্টি-স্টেজ বিল্ড: বিল্ড এবং রানটাইম স্টেজ আলাদা করে প্রোডাকশন ইমেজ ছোট রাখুন।
- ক্যাশিং কাজে লাগান: Dockerfile নির্দেশনাগুলি কম থেকে বেশি পরিবর্তনশীল ক্রমে সাজান।
- ইমেজ সঠিকভাবে ট্যাগ করুন: প্রোডাকশনে
latestব্যবহার এড়িয়ে চলুন; সেমান্টিক ভার্সনিং ব্যবহার করুন। - দুর্বলতার জন্য স্ক্যান করুন: পরিচিত সমস্যার জন্য ইমেজ পরীক্ষা করতে
docker scanব্যবহার করুন।
সাধারণ কমান্ড চিট শিট
| কমান্ড | বর্ণনা |
|---|---|
docker build -t name . | Dockerfile থেকে একটি ইমেজ তৈরি করুন |
docker run -p host:container image | একটি কনটেইনার চালান এবং পোর্ট ম্যাপ করুন |
docker ps -a | সমস্ত কনটেইনার তালিকা করুন |
docker exec -it container bash | চলমান কনটেইনারের ভিতরে একটি শেল খুলুন |
docker compose up | কম্পোজ ফাইলে সংজ্ঞায়িত সার্ভিসগুলি শুরু করুন |
docker compose logs -f | সমস্ত সার্ভিসের লগ অনুসরণ করুন |
সাধারণ জিজ্ঞাসা
একটি ইমেজ এবং একটি কনটেইনারের মধ্যে পার্থক্য কী?
একটি ইমেজ হল একটি স্থির টেমপ্লেট; একটি কনটেইনার হল সেই ইমেজের একটি চলমান ইনস্ট্যান্স। আপনি একটি ইমেজ থেকে অনেক কনটেইনার তৈরি করতে পারেন।
আমি কখন ডকার কম্পোজ ব্যবহার করব?
যখন আপনার অ্যাপ্লিকেশনের একাধিক সার্ভিস (যেমন, ওয়েব সার্ভার, ডেটাবেস, ক্যাশে) একসাথে চালানোর প্রয়োজন হয় তখন কম্পোজ ব্যবহার করুন। এটি ডেভেলপমেন্ট এবং টেস্টিংয়ের জন্য অর্কেস্ট্রেশন সহজ করে।
ডকারে আমি কীভাবে ডেটা স্থায়ী করব?
ভলিউম বা বাইন্ড মাউন্ট ব্যবহার করুন। ভলিউমগুলি ডকার দ্বারা পরিচালিত হয় এবং একটি ডেডিকেটেড এলাকায় সংরক্ষিত হয়; বাইন্ড মাউন্টগুলি হোস্ট ডিরেক্টরির সাথে লিঙ্ক করে। উভয়ই কনটেইনার রিস্টার্টের পরেও টিকে থাকে।
আপনার ডকার ওয়ার্কফ্লো সহজ করতে প্রস্তুত? কনটেইনার লগ দ্রুত ডিবাগ করতে আমাদের Nginx Log Analyzer ব্যবহার করে দেখুন।