Docker Compose: এক কমান্ডে একাধিক সার্ভিস
একটি ফাইলে অ্যাপ্লিকেশন, ডেটাবেস ও ওয়েব সার্ভারের বান্ডল বর্ণনা করা, এক কমান্ডে সেটি চালু করা এবং ম্যানুয়াল রিবিল্ড ছাড়াই আপডেট করার পদ্ধতি।
আপডেট: ২৩ আগস্ট, ২০২৬
আপনি একটি দীর্ঘ docker run কমান্ড দিয়ে একটি একক সার্ভিস চালু করতে পারেন। দুটি সার্ভিস যাদের একে অপরকে দেখতে হবে — সেটি আর কাজ করবে না: পরদিনই আপনি প্যারামিটারগুলো ভুলে যাবেন। Compose পুরো বর্ণনাটিকে একটি ফাইলে নিয়ে আসে, যা আপনি পড়তে, সম্পাদনা করতে এবং একটি রিপোজিটরিতে রাখতে পারেন।
ন্যূনতম উদাহরণ
/opt/myapp ডিরেক্টরি, যার ভেতরে compose.yaml:
services:
db:
image: postgres:17
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: app
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
retries: 5
app:
image: ghcr.io/example/app:1.4.2
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DATABASE_URL: postgres://postgres:${DB_PASSWORD}@db:5432/app
ports:
- "127.0.0.1:8080:8080"
volumes:
db-data:
তার পাশে, .env ফাইল:
DB_PASSWORD=long-random-password
chmod 600 .env
docker compose up -d
docker compose ps
docker compose logs -f app
এখানে যা গুরুত্বপূর্ণ
- ঠিকানার বদলে নাম। অ্যাপ্লিকেশনটি
dbনাম দিয়ে ডেটাবেসে পৌঁছায় — Compose একটি শেয়ার্ড নেটওয়ার্ক তৈরি করে যেখানে সার্ভিসের নাম স্বয়ংক্রিয়ভাবে রিজলভ হয়। ডেটাবেসের পোর্ট বাইরে পাবলিশ করার প্রয়োজন নেই, এবং করা উচিতও নয়। restart: unless-stopped। এটি ছাড়া, মেশিন রিবুট হওয়ার পর কিছুই আবার চালু হবে না।- হেলথ চেকসহ
depends_on। সাধারণdepends_onশুধু কনটেইনার চালু হওয়ার জন্য অপেক্ষা করে, ডেটাবেস সংযোগ গ্রহণের জন্য প্রস্তুত হওয়ার জন্য নয়। অ্যাপ্লিকেশনটি আগেই চালু হয় এবং ক্র্যাশ করে। - সঠিক ইমেজ ভার্সন।
postgres:17,postgres:latestনয়।latestব্যবহার করলে, পরবর্তীpullএকদিন এমন একটি মেজর ভার্সন নিয়ে আসবে যা পুরনো ডেটা খুলবে না। 127.0.0.1-এ পাবলিশিং। শুধুমাত্র সার্টিফিকেটসহ একটি ওয়েব সার্ভারের মাধ্যমে বাইরে পোর্ট এক্সপোজ করুন।
দৈনন্দিন কমান্ড
docker compose up -d # bring up or apply changes
docker compose down # stop and remove containers (volumes intact)
docker compose down -v # ...and remove volumes too
docker compose restart app # restart one service
docker compose exec app sh # go inside
docker compose pull && docker compose up -d # update images
docker compose config # show final file with substitutions
docker compose config চালু করার আগে ফাইলটি যাচাই করার সেরা উপায়: এটি দেখাবে ভেরিয়েবলগুলো কীসে প্রসারিত হয়েছে এবং কোনো ইন্ডেন্টেশন হারিয়ে গেছে কি না।
docker compose down -vডেটাবেসসহ ভলিউমগুলো মুছে দেয়। এটি অপরিবর্তনীয়।-vসহ যেকোনো অপারেশনের আগে, নিশ্চিত করুন যে আপনার একটি কপি আছে — দেখুন ব্যাকআপ।
এনভায়রনমেন্ট ফাইল
ওভারলে দিয়ে টেস্টিং এবং প্রোডাকশনের জন্য একই স্ট্যাক আলাদা করা সুবিধাজনক:
docker compose -f compose.yaml -f compose.prod.yaml up -d
দ্বিতীয় ফাইলটি শুধুমাত্র পার্থক্যগুলো ওভাররাইড করে: মেমরি লিমিট, পাবলিশ করা পোর্ট এবং লগ লেভেল।
সাধারণ ভুল
- রিপোজিটরিতে রাখা
compose.yaml-এ সিক্রেট। সেগুলো 600 পারমিশনসহ.env-এ রাখুন এবং কমিট করবেন না। docker-composeএবংdocker composeমেশানো। পুরনো v1 ভার্সন কিছু সিনট্যাক্স বোঝে না এবং প্রজেক্টগুলো ভিন্ন নামে সংরক্ষণ করে। প্লাগইনটি ইনস্টল করুন — দেখুন Docker ইনস্টলেশন।- ভলিউমের বদলে কনটেইনারে ডেটা।
docker compose down-এর পরে, এটি অদৃশ্য হয়ে যাবে। দেখুন ভলিউম। - মেমরি লিমিট নেই। একটি সার্ভিস মেশিনের সমস্ত মেমরি খেয়ে ফেলে, এবং কার্নেল তার প্রতিবেশীদের কিল করে। দেখুন রিসোর্স লিমিট।