در حال بارگذاری...
مقدمهای بر کانتینرها: تفاوت با ماشین مجازی، Docker، ارکستراسیون با Kubernetes و معماری میکروسرویس.
اهداف این درس
مجازیسازی مشکل را حل کرد، اما هر VM هنوز یک سیستمعامل کامل حمل میکرد؛ یعنی هسته تکراری و سربار. کانتینرها این ایده را یک قدم جلو بردند: فقط برنامه و وابستگیهایش را بستهبندی کن و هسته سیستمعامل را از میزبان قرض بگیر.
بسته نرمافزاری سبکی شامل برنامه و وابستگیهایش (کتابخانهها و تنظیمات) که از هسته سیستمعامل میزبان استفاده میکند و بهصورت ایزوله اجرا میشود.
VM در برابر کانتینر
| ویژگی | ماشین مجازی | کانتینر |
|---|---|---|
| سیستمعامل | Guest کامل با Kernel | به اشتراکگذاری Kernel میزبان |
| اندازه | چند گیگابایت | چند مگابایت |
| زمان راهاندازی | چند دقیقه | چند ثانیه |
| ایزولهسازی | قوی | متوسط (کمتر از VM) |
| ابزار | ESXi, Hyper-V | Docker, containerd |
1docker build -t my-app . # ساخت Image از Dockerfile2docker images # لیست Image ها3docker run -d -p 8080:80 my-app # اجرای کانتینر و نگاشت پورت4docker ps # کانتینرهای در حال اجرا5docker push my-app # ارسال Image به Registryوقتی دهها کانتینر روی چند سرور اجرا میشوند، مدیریت دستی ممکن نیست. Kubernetes (مخفف K8s) کار استقرار، مقیاسپذیری و بازیابی خودکار را انجام میدهد.
در معماری قدیمی (Monolith) کل برنامه یک قطعه واحد بود. در معماری میکروسرویس، برنامه به سرویسهای کوچک و مستقل تقسیم میشود: احراز هویت، پرداخت، جستجو — هرکدام برنامهای جداگانه در کانتینر خود. این طراحی مقیاسپذیری و توسعه تیمی را آسان میکند.
سناریوی واقعی
یک فروشگاه اینترنتی از چند میکروسرویس تشکیل شده: سرویس محصولات، سرویس سبد خرید و سرویس پرداخت. در فروش ویژه، فقط سرویس محصولات مقیاس میگیرد؛ بقیه بدون تغییر میمانند. هر سرویس داخل کانتینر و توسط Kubernetes مدیریت میشود.
اشتباه رایج
بسیاری تصور میکنند Docker یعنی Kubernetes. Docker کانتینر میسازد و اجرا میکند؛ Kubernetes دهها و صدها کانتینر را در چند سرور ارکستره میکند. مقیاس متفاوت است.
نکته آزمون
برای آزمون: VM = سیستمعامل کامل، Container = اشتراک Kernel، Docker = ساخت/اجرا، Kubernetes = ارکستراسیون.
آیا کانتینرها امنتر از VM هستند؟
خیر، ایزولهسازی VM قویتر است. به همین دلیل در محیطهای حساس، کانتینرها داخل VM اجرا میشوند.
یادگیری Docker سخت است؟
نه. با مفاهیم Image، Container و Dockerfile شروع کنید و سپس ارکستراسیون را بیاموزید؛ برای شروع حتی Docker Desktop کافی است.
VM به اشتراکگذاری kernel انجام نمیدهد؛ کانتینر kernel میزبان را به اشتراک میگذارد.
Image قالب فقطخواندنی است؛ Container نسخه در حال اجرای Image.
ارکستراسیون = استقرار، مقیاس و بازیابی خودکار کانتینرها.
کانتینر چه چیزی را با سیستمعامل میزبان به اشتراک میگذارد؟
تفاوت اصلی کانتینر و ماشین مجازی چیست؟
VM یک سیستمعامل مهمان کامل با kernel مخصوص دارد؛ کانتینر فقط برنامه و وابستگیهایش را بستهبندی میکند و kernel سیستمعامل میزبان را به اشتراک میگذارد؛ بنابراین سبکتر و سریعتر است.
Docker چه میکند؟
Docker یک پلتفرم مدیریت کانتینر است: Image را میسازد، Registry را مدیریت میکند و کانتینرها را اجرا میکند.
Kubernetes چه تفاوتی با Docker دارد؟
Docker یک کانتینر را میسازد و اجرا میکند؛ Kubernetes ارکستراسیون است: کانتینرهای متعدد را در چند سرور توزیع، مقیاس، ترمیم و بهروزرسانی میکند.
شبکه کانتینرها چگونه کار میکند؟
هر کانتینر فضای شبکه مجازی خود را دارد؛ از طریق پل مجازی (bridge) یا شبکه Overlay (مثل Calico و Flannel) با سایر کانتینرها ارتباط برقرار میکند.
میکروسرویسها چه مزیت شبکهای نسبت به Monolith دارند؟
هر سرویس میتواند مقیاس مستقل بگیرد، از پروتکل ارتباطی متفاوت استفاده کند و خرابی یک سرویس کل سیستم را متوقف نمیکند. اما پیچیدگی شبکه و مدیریت افزایش مییابد.