DockerIntermediate
Docker Compose
এক file-এ একাধিক service — compose.yml, up/down/logs/exec — বাংলায় সম্পূর্ণ গাইড।
12টি অংশবাংলা ভাষায়
একটি app-এর অনেকগুলো piece (API, database, redis, nginx) দরকার — প্রতিটি আলাদা docker run লিখা কঠিন। Docker Compose কয়েকটি container-কে একটি compose.yml file-এ ঘোষণা করে এক কমান্ডে চালায়।
compose.yml
compose.ymlyaml
yaml
services:
api:
build: .
ports:
- "4000:4000"
environment:
- MONGO_URI=mongodb://mongo:27017/blog
- PORT=4000
depends_on:
- mongo
- redis
mongo:
image: mongo:7
volumes:
- mongo-data:/data/db
redis:
image: redis:7-alpine
volumes:
mongo-data:প্রধান কমান্ড
Compose managebash
bash
docker compose up -d # build + start (background)
docker compose up -d --build # কোড বদলালে rebuild
docker compose ps # service status
docker compose logs -f api # logs follow
docker compose exec api sh # service-এর ভেতরে
docker compose down # stop + remove
docker compose down -v # volumes-ও মুছে (ডেটা যাবে!)প্রয়োজনীয় sections
| Key | কাজ |
|---|---|
services: | প্রতিটি container-defined service |
build: | local folder থেকে image build |
image: | ready image ব্যবহার |
ports: | host:container port mapping |
environment: | env variables |
volumes: | mount ও named volumes |
depends_on: | startup order (shallow) |
env_file: | .env file থেকে load |
container_name: | เฉพาะ container নাম |
Build vs Image
দুইভাবে declareyaml
yaml
services:
# local Dockerfile থেকে build
api:
build: ./api
# ready-made official image
mongo:
image: mongo:7depends_on-এর সীমা
depends_on শুধু startup order নিশ্চিত করে — database-এর ভেতর থেকে 'ready' হওয়ার গ্যারান্টি নয়। API প্রয়োজনে connection retry করবে নাহলে database-এর healthcheck ব্যবহার করবে (পরবর্তী lessons-এ দেখব)।
Project name
Compose project-এর নাম ফোল্ডারের নাম থেকে আসে (হতে -p flag দিয়ে override)। সেই নামে network ও container prefix হয়।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।