Containerization with Docker & Kubernetes

فصل هفتم:

کانتینرها و Docker – بنای زیرساخت‌های مدرن

پس از اینکه در فصل پیش‌تر مفهوم مجازی‌سازی را یاد گرفتیم، در این فصل یک گام جلوتر می‌رویم. کانتینرها امروزه قلب فناوری‌های مدرن هستند؛ از اپلیکیشن‌های موبایل گرفته تا هوش مصنوعی. در این درس می‌آموزیم کانتینر چیست، چطور با Docker ساخته و اجرا می‌شوند، و Kubernetes آن‌ها را چگونه مدیریت می‌کند.

Machine مجازی (VM) در برابر کانتینر (Container)

ماشین مجازی

Application ۱

Application ۲

Guest OS (Linux / Windows)

Hypervisor

Hardware فیزیکی / Host OS مشترک

کانتینرها

Container ۱

Container ۲

Container ۳

Host OS مشترک

بدون Hypervisor

🎯 آنچه در این فصل یاد می‌گیرید:

  • کانتینر چیست و چرا از ماشین‌های مجازی سبک‌تر و سریع‌تر است
  • ✓ تفاوت Machine مجازی (VM) با کانتینر در یک نگاه
  • Docker: ساخت، اجرا و مدیریت کانتینرها
  • ✓ مفاهیم اساسی: Image، Container و Registry
  • Kubernetes و خودکارسازی مقیاس کانتینرها
  • ✓ کاربرد کانتینرها در دنیای واقعی و مزایای آن‌ها

چرا کانتینرها؟

تا اینجا یاد گرفتیم که مجازی‌سازی به ما اجازه می‌دهد چندین ماشین مجازی روی یک سخت‌افزار فیزیکی اجرا کنیم. اما هر ماشین مجازی یک سیستم عامل کامل دارد و برای راه‌اندازی به ثانیه‌ها زمان و به منابع زیادی نیاز دارد. کانتینرها این مشکل را با یک ایده‌ی ساده اما هوشمندانه حل می‌کنند: به‌جای مجازی‌سازی کل سیستم عامل، فقط آنچه که یک برنامه برای اجرا نیاز دارد را بسته‌بندی می‌کنند.

کانتینرها در سال‌های اخیر به‌شدت محبوب شده‌اند و تقریباً هر شرکت بزرگ از آن‌ها استفاده می‌کند. هدف این درس این است که این مفهوم را به‌زبان ساده و برای یک دانشجوی مبتدی قابل‌فهم کنیم تا پایه‌ی استوار برای یادگیری فناوری‌های مدرن داشته باشد.

کانتینر چیست؟

یک کانتینر یک بسته‌ی کم‌حجم و سبک از یک برنامه است که همه‌ی چیزهایی که برای اجرا نیاز دارد — خود کد، کتابخانه‌ها، تنظیمات و ابزارهای مورد نیاز — را درون خودش حمل می‌کند. این بسته‌بندی باعث می‌شود برنامه در هر محیطی (در ماشین شما، روی سرور توسعه، یا در فضای ابری) دقیقاً یکسان اجرا شود.

یک تشبیه ساده: کانتینر را مثل یک بسته‌ی حمل‌ونقل بار روی یک کشتی تجاری تصور کنید که در آن همه‌ی اجزای یک برنامه به‌صورت منظم بسته‌بندی شده‌اند. هر کانتینر مستقل است، فضای مجزای خود را دارد و بدون مزاحمت با کانتینرهای دیگر اجرا می‌شود.

💡 نکته‌ی کلیدی: کانتینرها «ماشین‌ها» را مجازی نمی‌کنند، بلکه برنامه‌ها را بسته‌بندی می‌کنند. همین تفاوت، آن‌ها را سبک و سریع می‌سازد.

مزایای کانتینرها

🏎️ سبک و سریع راه‌اندازی

کانتینر در کمتر از یک ثانیه اجرا می‌شود، در حالی که ماشین مجازی به چند ثانیه تا چند دقیقه زمان نیاز دارد.

🎯 استقلال از محیط

برنامه هر جایی دقیقاً یکسان اجرا می‌شود — مشکل «روی دستگاه من کار می‌کند» از بین می‌رود.

🔒 جداسازی

خرابی یا خطای یک کانتینر روی بقیه تأثیر نمی‌گذارد؛ هر کانتینر فضای امن خودش را دارد.

VM در برابر کانتینر

برای درک قدرت کانتینرها، بهتر است آن‌ها را با ماشین‌های مجازی (VM) مقایسه کنیم. تفاوت اصلی در «لایه‌ی میانه» است. ماشین مجازی یک سیستم عامل کامل (Guest OS) روی Hypervisor اجرا می‌کند، اما کانتینرها سیستم عامل میزبان (Host OS) را به‌اشتراک می‌گذارند و فقط خود برنامه و وابستگی‌هایش را بسته‌بندی می‌کنند.

جدول مقایسه

نمودار بالا نشان می‌دهد که در سمت چپ، یک ماشین مجازی یک لایه‌ی Guest OS و Hypervisor را دارد، در حالی که در سمت راست، کانتینرها مستقیماً روی سیستم عامل میزبان اجرا می‌شوند. این تفاوت باعث می‌شود کانتینرها بسیار سبک‌تر و سریع‌تر باشند.

ملاکماشین مجازی (VM)کانتینر
اندازهچند گیگابایتچند مگابایت
زمان راه‌اندازیثانیه‌ها تا دقیقه‌هاکمتر از یک ثانیه
سیستم عامل مهمانبله (Guest OS)خیر (Kernel مشترک)
منابعزیادکم
کاربرد ایده‌آلتجزای کامل OSمیکروسرویس، توسعه سریع

Docker – ابزار محبوب ساخت کانتینر

Docker شناخته‌شده‌ترین و پرکاربردترین ابزار برای ساخت، اجرا و مدیریت کانتینر است. اگر بخواهیم یک تشبیه بزنیم، Docker همان «فابریک» است که کانتینرها را می‌سازد.

سه مفهوم کلیدی برای کار با Docker وجود دارد که در ادامه به زبان ساده توضیح داده می‌شوند و باید حتماً آن‌ها را از هم تفکیک کرد.

📦 Image

یک Image یک الگوی قابل‌اجرا و ثابت است. مثل یک «قالب کیک» عمل می‌کند که دستورالعمل‌های ساخت دارد، اما هنوز کیک (برنامه‌ی اجرا) نیست. هر Image از چند لایه ساخته می‌شود.

🚀 Container

یک Container یک نمونه‌ی فعال و در حال اجرا از یک Image است. مثل کیک آماده که از قالب ساخته شده و در حال سرو است. می‌توان چندین Container از یک Image ساخت.

📚 Registry

یک Registry جایی است که Images ذخیره و به اشتراک گذاشته می‌شوند. معروف‌ترین آن‌ها Docker Hub است. با یک command می‌توانید هر Image را دانلود یا آپلود کنید.

ساختار یک Image در Docker – لایه‌لایه

Layer 4: App

Layer 3: Lib

Layer 2: Tools

Layer 1: Base OS

Image ID: a1b2...

هر لایه یک Image مستقل است که Docker آن را به اشتراک می‌گذارد

📚 Registry Docker Hub GitHub Packages Harbor (مخزن ابری Images)

pull push

🚀 Running Container docker run -p 80:8080 -d myapp (یک کانتینر اجرا شده)

run

چند دستور ساده در Docker

دستورهای زیر نمونه‌هایی از رایج‌ترین کارها با Docker هستند. به‌عنوان یک دانشجوی مبتدی، درک این الگو برای شروع کافی است.

# دانلود یک Image از Registry
   $ docker pull nginx
   # اجرای کانتینر به‌صورت background در Port 80
   $ docker run -d -p 80:80 nginx
   # ساخت Image از یک Dockerfile
   $ docker build -t myapp .
   # نمایش کانتینرهای فعال
   $ docker ps

هر دستور به سادگی یک کار مشخص انجام می‌دهد. با گسترش یادگیری، می‌توانید Dockerfile بنویسید که دقیقاً مشخص کند یک Image چگونه ساخته شود.

Kubernetes – مدیریت خودکار کانتینرها

تا اینجا یاد گرفتیم یک کانتینر چگونه ساخته و اجرا می‌شود. اما در دنیای واقعی، صدها کانتینر روی ده‌ها سرور وجود دارد. اینجا کار سخت می‌شود. Kubernetes (مخفف K8s) ابزار خودکاری است که این مشکل را حل می‌کند.

Kubernetes به ما اجازه می‌دهد یک مجموعه‌ی کامل از کانتینرها را مدیریت کند. آن‌ها به‌صورت خودکار در صورت افزایش بار بزرگ‌تر (Scale) می‌شوند، اگر سروری خراب شود، کانتینرها را به سرور سالم مهاجرت (Reschedule) می‌دهند، و ترافیک را به‌شکل منصفانه بین آن‌ها تقسیم می‌کنند.

مفاهیم کلیدی Kubernetes

Node (گره)

هر Node یک سرور فیزیکی یا VM است که روی آن کانتینرها اجرا می‌شوند.

Pod

کوچک‌ترین واحد در Kubernetes که معمولاً شامل یک کانتینر است.

Deployment

حالتی از کانتینر است که تعداد و نحوه‌ی مقیاس آن را مشخص می‌کند.

Service

درگاه ورودی پایداری که به پادها دسترسی می‌دهد.

خودکارسازی با Kubernetes

Kubernetes Control Plane

Node 1 Pod A (App1 ×2) Pod B (DB)

Node 2 Pod A (App1 ×1) Pod C (Cache)

Node 3 Pod D (API) Pod E (Worker)

Kubernetes به‌صورت خودکار اسکیل می‌کند، در صورت خرابی یک Node مهاجرت می‌دهد، و توزیع بار (Load Balancing) انجام می‌دهد.

هر Node یک Server فیزیکی یا VM، و هر Pod یک یا چند کانتینر

چرخه‌ی عمر یک کانتینر – از Build تا Running

💻 Code Dockerfile + کد برنامه

📦 Build docker build Image ساخته می‌شود

🚀 Push docker push Registry ابری

⚙️ Run docker run یا kubectl apply

🌍 Scale K8s خودکار اسکیل می‌کند

مزیت این چرخه: یک‌بار build، همه‌جا اجرا (Build Once, Run Anywhere) هر Image یک لایه از filesystem است و هر Container یک instance فعال از آن Image است

کاربرد عملی کانتینرها

فناوری کانتینر در بحث زیرساخت‌های مدرن بسیار مهم است. کانتینرها امروزه تقریباً همه‌جا هستند — از اپلیکیشن‌هایی که هر روز استفاده می‌کنید تا خدماتی که در فضای ابری اجرا می‌شوند. بگذارید چند مثال واقعی ببینیم تا نقش آن‌ها بهتر درک شود.

🌐 میکروسرویس

پلتفرم‌هایی مثل Netflix و Spotify اپلیکیشن خود را به صدها سرویس کوچک تقسیم کرده‌اند — هرکدام در کانتینر خودش. این باعث می‌شود هر بخش مستقل توسعه و بروزرسانی شود.

☁️ Cloud Native

تمام خدمات ابری مدرن (AWS، GCP، Azure) از کانتینرها برای اجرای خودکار و مقیاس‌پذیر استفاده می‌کنند. کانتینرها زبان مشترک فضای ابری هستند.

⚡ DevOps & CI/CD

توسعه‌دهندگان کانتینرها را در محیط‌های خود می‌سازند و عیناً همان Image را در تولید اجرا می‌کنند. مشکل «روی کامپیوتر من کار می‌کند» کاملاً حذف می‌شود.

📋 خودآزمایی - چقدر یاد گرفته‌اید؟

Q: تفاوت اصلی یک VM با یک کانتینر چیست؟

A: VM یک Guest OS کامل دارد ولی کانتینر Host OS را به اشتراک می‌گذارد؛ برای همین کانتینر سبک‌تر و سریع‌تر است.

Q: سه مفهوم اصلی Docker کدام‌اند و نقش هر یک?

A: Image (الگوی ثابت)، Container (نمونه‌ی فعال و اجرا شده از Image) و Registry (مخزن ذخیره‌ی Images).

Q: چرا کانتینرها «سریع راه‌اندازی» می‌شوند؟

A: چون Guest OS جداگونه ندارند و مستقیم روی Kernel Host اجرا می‌شوند، فقط خود برنامه و وابستگی‌ها را بسته‌بندی می‌کنند.

Q: Kubernetes چه نقشی در مدیریت کانتینرها دارد؟

A: Kubernetes خودکار مقیاس‌بندی، مهاجرت در صورت خرابی و توزیع بار را بین کانتینرها روی چندین Node انجام می‌دهد.

Q: یک کاربرد واقعی کانتینرها را نام ببرید.

A: میکروسرویس‌ها (Microservices): پلتفرم‌هایی مثل Netflix و Spotify هر سرویس را در کانتینر جداگانه اجرا می‌کنند تا مستقل توسعه و مقیاس‌بندی شوند.

خلاصه

کانتینرها یک انقلاب در دنیای زیرساخت‌های نرم‌افزاری هستند. آن‌ها سبک، سریع و قابل‌اعتمادند. Docker ابزار ساخت آن‌هاست، Kubernetes خودکار اجرای آن‌هاست، و همه با هم زیرمجموعه‌ی «فناوری‌های ابری» و «محاسبات مدرن» را تشکیل می‌دهند.

با یادگیری کانتینرها، شما اولین قدم بزرگ برای درک مفاهیم Cloud Native، Microservices، DevOps و AI Infrastructure را برداشته‌اید.

💡 خلاصه فصل هفتم

  • ✓ کانتینر بسته‌ی سبک از یک برنامه است که Host OS را به‌اشتراک می‌گذارد
  • ✓ تفاوت اصلی VM با کانتینر: Guest OS در VM هست، در کانتینر نیست
  • ✓ Docker سه مفهوم دارد: Image، Container و Registry
  • ✓ Kubernetes خودکار مقیاس‌بندی، مهاجرت و توزیع بار کانتینرها را مدیریت می‌کند
  • ✓ کاربردهای اصلی: میکروسرویس، Cloud Native و DevOps