یک محیط توسعهی چندسرویسی
پیش از رفتن به سراغ ابزارهای پیچیدهی ارکستراسیون، docker compose (که در دورهی داکر آموختیم) گزینهای عالی برای اجرای یک مجموعهی کوچک از میکروسرویسها در محیط توسعه یا حتی محیط تولید با مقیاس محدود است:
services:
gateway:
build: ./gateway
ports:
- "80:80"
depends_on:
- orders
- catalog
orders:
build: ./order-service
environment:
- DATABASE_URL=postgres://orders_db:5432/orders
catalog:
build: ./catalog-service
environment:
- DATABASE_URL=postgres://catalog_db:5432/catalog
rabbitmq:
image: rabbitmq:3-management
در این فایل، هر میکروسرویس یک بلوک مستقل با Dockerfile مخصوص خودش دارد و همگی از طریق network داخلی docker compose با هم ارتباط برقرار میکنند. این ساختار برای تیمهای کوچک تا متوسط با تعداد محدودی سرویس (مثلاً کمتر از ده) کاملاً کافی و قابلنگهداری است.
محدودیتهای docker compose در مقیاس بزرگ
اما وقتی تعداد سرویسها زیاد میشود یا نیاز به مقیاسپذیری خودکار (Auto-scaling)، توزیع بار بین چند سرور فیزیکی، بازیابی خودکار از خرابی، و بروزرسانی بدون قطعی (Rolling Update) پیدا میکنید، docker compose که برای یک سرور واحد طراحی شده، دیگر کافی نیست و باید به سراغ ابزارهای ارکستراسیون واقعی مثل Kubernetes بروید که در درس بعد معرفی میشود.