تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

چک‌پوینت کانتینر در Docker و Kubernetes


۱۶ آذر ۱۴۰۴

کانتینریزیشن (Containerization) فرآیندی است که محیط توسعه را در سطح سیستم‌عامل ایزوله می‌کند و امکان ایجاد یک محیط اجرای قابل حمل را فراهم می‌سازد. کانتینرها منابع میزبان را به اشتراک می‌گذارند، اما برنامه در محیطی امن، قابل پیش‌بینی و کنترل‌شده اجرا می‌شود. این روش توسعه و تست برنامه‌ها را سریع‌تر و منظم‌تر می‌کند و امکان مقیاس‌بندی آسان‌تر را فراهم می‌آورد.

چک‌پوینت شامل دو بخش اصلی است:

  • اکوسیستم کانتینرها: مرور اهداف و کاربردهای اصلی کانتینرها.
  • اجرای دستورات کانتینرها: دستورهای عملی برای Docker و Kubernetes، همراه با بخش‌های تعاملی برای سنجش دانش شما.
چک‌پوینت کانتینر در Docker و Kubernetes

آنچه در ادامه می‌خوانید:

  • کانتینر چیست؟
  • داکر چیست؟
  • کوبرنتیز چیست؟
  • استفاده از خط فرمان
  • اجرای دستورات داکر در اوبونتو
  • اجرای دستورات کوبرنتیز در اوبونتو
  • جمع بندی

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

کانتینرها محیطی قابل‌پیش‌بینی و کنترل‌شده برای توسعه برنامه‌های شما فراهم می‌کند، کانتینر در واقع یک فضای مجازی کوچک و مستقل است که روی سیستم‌عامل میزبان اجرا می‌شود، بدون اینکه کل سیستم‌عامل مجازی شده باشد. این محیط باعث می‌شود برنامه در هر سیستمی که کانتینر روی آن اجرا می‌شود، دقیقا همان رفتار را داشته باشد. وقتی افراد از کانتینر صحبت می‌کنند، معمولا منظورشان موتور کانتینر (Container Engine) است.

برای آشنایی کامل با کوبرنتیز (Kubernetes) و چگونگی کارکرد آن، مقاله زیر را از دست ندهید.
کوبرنتیز (Kubernetes) چیست؟

اصطلاحات مهم کانتینر

در ادامه به معرفی برخی از مهمترین اصطلاحات کانتینر می‌پردازیم.

موتور کانتینر (Container engine)

موتور کانتینر یک راهکار کامل برای کانتینریزیشن است و شامل خود کانتینر، محیط اجرای کانتینر (Container runtime)، تصویر کانتینر (Container image) و ابزارهای ساخت آن‌ها می‌شود. موتور کانتینر ممکن است شامل رجیستری تصاویر کانتینر (Image registry) و ابزارهای ارکستریشن کانتینر (Container orchestration) نیز باشد. یکی از محبوب‌ترین موتورهای کانتینر، Docker است.

تصویر کانتینر (Container image)

تصویر کانتینر یک الگوی آماده برای ساخت محیط داخل کانتینر است. وقتی تصویر اجرا می‌شود، لایه فقط‌خواندنی تصویر با یک لایه خواندنی-نوشتنی ترکیب می‌شود که می‌توان آن را در هر نمونه کانتینر به صورت جداگانه تغییر داد.

رجیستری تصویر (Image registry)

رجیستری تصویر یک مخزن برای ذخیره و مدیریت تصاویر کانتینر است. می‌توانید از آن برای مدیریت و اشتراک‌گذاری تصاویر کانتینر خود استفاده کنید.

محیط اجرای کانتینر (Container runtimes)

محیط‌های اجرای کانتینر وظیفه راه‌اندازی و اجرای کانتینرها را بر عهده دارند. دو گروه اصلی از محیط‌های اجرای کانتینر وجود دارند:

  • Open Container Initiative (OCI): ارائه مشخصات و استانداردهایی برای فرمت‌های کانتینر و فراهم کردن یک پایه استاندارد برای اجرای کانتینر، مثل ابزار معروف runc.
  • Container Runtime Initiative: تمرکز بر ارکستریشن و مدیریت کانتینرها دارد.

ارکستریشن کانتینر (Container orchestration)

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

بسیاری از توسعه‌دهندگان به خاطر قابلیت حمل (Portability) و عملکرد قابل پیش‌بینی به سراغ کانتینریزیشن می‌روند. جداسازی زیرساخت (Infrastructure Abstraction) این امکان را فراهم می‌کند که یک برنامه را دقیقاً به همان شکل روی چندین سیستم مختلف تست کنید. این پایداری در محیط پایه باعث می‌شود تیم‌های توسعه بتوانند به شکل مشترک و حتی از راه دور کار کنند.

اهداف رایج در استفاده از کانتینرها به شرح زیر می‌باشد:

  • عملکرد قابل پیش‌بینی و قابل حمل
  • بهره‌وری بالا در استفاده از منابع و حافظه
  • معماری بدون حالت (Stateless) همراه با امکان ذخیره داده پایدار
  • کانتینرهای ایزوله با قابلیت شبکه‌سازی در کلاستر
  • ثبت و مانیتورینگ خطاها و خروجی‌ها هنگام تست کانتینر
  • جداسازی برنامه از زیرساخت (Decoupling)
  • پشتیبانی از معماری مایکروسرویس‌ها و تخصصی‌سازی وظایف

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

اگر روی یک پروژه بلندمدت کار می‌کنید که به داده‌های ماندگار نیاز دارد، می‌توانید از Volume برای ذخیره‌سازی داده پایدار و اشتراک‌گذاری داده بین کانتینرها استفاده کنید.

داکر و کوبرنتیز؛ دو راهکار پرکاربرد

Docker یک موتور کانتینر (Container Engine) است که بیشتر برای اجرای یک یا چند برنامه کانتینری به‌طور هم‌زمان استفاده می‌شود. Kubernetes یک نرم‌افزار ارکستریشن (Container Orchestration) است که امکان مدیریت و اجرای تعداد زیادی کانتینر هم‌زمان در مقیاس بزرگ را فراهم می‌کند. کوبرنتیس در ابتدا از Docker Runtime استفاده می‌کرد، اما اکنون بیشتر به سراغ Containerd به‌عنوان لایه انتزاعی اجرا رفته است.

آموزش جامع کار با کانتینرهای داکر (ساخت + مدیریت و حذف کانتینرها) را در مقاله زیر مطالعه کنید.
نحوه کار با کانتینرها

داکر چیست؟

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

داکر چیست؟

اصطلاحات مهم داکر

در ادامه به معرفی برخی از مهمترین اصطلاحات داکر می‌پردازیم.

داکر کامپوز (Docker Compose)

داکر کامپوز یک ابزار خط فرمان (CLI Tool) است که به شما امکان می‌دهد محیط‌های چندکانتینری را اجرا کنید. این محیط‌ها در یک فایل YAML تعریف می‌شوند. در این فایل، مواردی مثل راه‌اندازی وب‌سرور، ریدایرکت پورت‌ها و ایجاد ولوم مشترک مشخص می‌شود.

داکر هاب (Docker Hub)

داکر هاب یک ریجستری تصاویر (Image Registry) است که توسط شرکت Docker مدیریت می‌شود. این ریجستری، منبع اصلی برای ذخیره‌سازی و اشتراک‌گذاری ایمیج‌های داکر است.

ایمیج داکر (Docker Image)

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

والیوم داکر (Docker Volume)

والیوم داکر روشی برای ذخیره‌سازی داده‌ها به‌صورت پایدار است. با والیوم می‌توان داده‌ها را حتی در صورت توقف یا حذف کانتینر، نگه داشت و میان چند کانتینر به اشتراک گذاشت.

سوارم (Swarm)

سوارم مود (Swarm Mode) یک روش برای مدیریت کلاسترها در داکر است که به آن Swarm گفته می‌شود. ابزار متن‌باز SwarmKit که با زبان Go نوشته شده، امکان راه‌اندازی و مدیریت این کلاسترها را فراهم می‌کند.

کوبرنتیز چیست؟

کوبرنتیز (Kubernetes) یک پلتفرم متن‌باز برای اجرای برنامه‌ها و سرویس‌های کانتینری در مقیاس بزرگ است. با کوبرنتیز می‌توانید کانتینرها را روی یک کلاستر از چندین ماشین اجرا و مدیریت کنید. این ابزار به‌طور گسترده برای مقیاس‌گذاری و رفع نیازهای پیچیده کانتینریزیشن استفاده می‌شود.

کوبرنتیز برای پیکربندی و مدیریت خود مجموعه‌ای از اصطلاحات و مفاهیم تخصصی دارد. در ادامه مهم‌ترین آن‌ها را معرفی می‌کنیم.

اصطلاحات مهم کوبرنتیز

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

اجزای کوبرنتیز

دیپلویمنت (Deployment)

دیپلویمنت یکی از انواع بارکاری‌ها (Workloads) در کوبرنتیز است که با استفاده از Replication Set مدیریت چرخه‌ی اجرا (Cycle Management) را بر عهده دارد. این بخش امکان مدیریت تعداد نسخه‌های یک پاد را فراهم می‌کند و مشابه Replication Controller عمل می‌کند، با این تفاوت که برای مقیاس‌پذیری پادها طراحی شده است.

نود (Node)

هر سرور داخل کلاستر کوبرنتیز یک نود محسوب می‌شود. یک نود به‌عنوان کنترل‌پلن (Control Plane) عمل می‌کند و نودهای دیگر نقش نودهای کاری را دارند. هر نود شامل یک کانتینر ران‌تایم است که اجرای اپلیکیشن‌ها و سرویس‌های کانتینری روی آن نود را مدیریت می‌کند.

پاد (Pod)

پاد کوچکترین واحد قابل اجرا در کوبرنتیز است. هر پاد مجموعه‌ای از یک یا چند کانتینر است که به عنوان یک اپلیکیشن واحد کنترل می‌شوند. پادها توسط Replication Controller یا Replication Set ایجاد و مدیریت می‌شوند.

معماری کوبرنتیز

کلاستر کوبرنتیز (Kubernetes Cluster) از یک سرور مرکزی (Control Plane) و چندین نود (Node) تشکیل می‌شود. هر کدام از این اجزا نقش مشخصی دارند و در کنار هم باعث می‌شوند خوشه عملکرد پایدار و هماهنگی داشته باشد. برای اینکه سرورها بتوانند با هم ارتباط برقرار کنند و بارکاری‌ها به درستی مدیریت شوند، کوبرنتیز شامل مجموعه‌ای از اجزای کلیدی است:

اجزای کنترلی (Control Plane Components)

  • ذخیره‌ساز کلید-مقدار (Key-Value Store – etcd): پایگاه داده‌ی توزیع‌شده‌ای که وضعیت و داده‌های پیکربندی خوشه را ذخیره می‌کند.
  • سرور API (kube-apiserver): نقطه‌ی ورود اصلی برای ارسال دستورات و پیکربندی بارکاری‌ها.
  • مدیر کنترلر (kube-controller-manager): وظیفه‌ی مدیریت بارکاری‌ها، اجرای وظایف و تنظیم وضعیت خوشه را دارد.
  • زمان‌بند یا Scheduler (kube-scheduler): مشخص می‌کند هر بارکاری (Pod) روی کدام نود اجرا شود.
  • مدیر کنترلر ابری (cloud-controller-manager): برای تعامل با سرویس‌دهنده‌های ابری و منابع مرتبط به‌کار می‌رود.

اجزای نودها (Node Components)

  • کانتینر ران‌تایم (Container Runtime): مثل Docker یا runc که اجرای کانتینرها را روی هر نود بر عهده دارد.
  • کوبلت (Kubelet): سرویسی که بین نود و کنترل پلین ارتباط برقرار می‌کند و براساس مانیفست‌ها بارکاری‌ها را اجرا و مدیریت می‌کند.
  • کوبه‌پراکسی (kube-proxy): پراکسی سبک برای هدایت درخواست‌ها به سمت کانتینرهای درست.

ابزارهای مدیریت

برای کار با این اجزا، می‌توانید از ابزارهای خط فرمان مخصوص Docker و Kubernetes استفاده کنید. علاوه‌ بر این، ابزارهایی مانند Docker Desktop یا Kubernetes Dashboard هم وجود دارند که مدیریت کانتینرها را ساده‌تر می‌کنند.

برای آشنایی با نحوه استفاده از اسکن آسیب‌ پذیری در Kubescape، مقاله زیر را مطالعه کنید.
نحوه استفاده از اسکن آسیب‌ پذیری در Kubescape

استفاده از خط فرمان

اگر با سرورهای ابری کار کرده باشید، احتمالا با خط فرمان لینوکس (Linux Command Line) آشنایی دارید. خط فرمان همان ابزاری است که برای راه‌اندازی وب‌سرور یا دیتابیس از آن استفاده می‌کنیم. در دنیای کانتینرها، این دستورات نقش مهمی دارند. چند دستور پرکاربرد زیر به شما کمک می‌کنند تا محیط کاربری خود را بهتر مدیریت کنید.

  • cat → نمایش محتوای فایل
  • chmod → تغییر سطح دسترسی فایل یا ابزار
  • curl → انتقال داده از/به یک آدرس مشخص (URL)
  • echo → چاپ یک متن یا مقدار ورودی
  • env → نمایش تمام متغیرهای محیطی
  • exit → خروج از شِل داکر
  • mkdir → ساخت پوشه‌ی جدید
  • pwd → نمایش مسیر فعلی
  • systemctl → مدیریت سرویس‌های سیستمی مثل Docker daemon
  • tail → نمایش ۱۰ خط آخر یک فایل
  • watch → اجرای یک دستور به صورت دوره‌ای (مثلاً هر ۲ ثانیه)
  • whoami → نمایش نام کاربر فعلی

اجرای دستورات داکر در اوبونتو

زمانی که کار با داکر را شروع کردید، اولین قدم، نصب و اجرای یک کانتینر روی اوبونتو است. به‌طور پیش‌فرض، دستور docker فقط توسط کاربر ریشه (root) یا کاربری که عضو گروه docker باشد، قابل اجرا است.برای مدیریت کانتینرها از دستور docker به همراه زیر‌دستورات و فلگ‌های مختلف استفاده می‌کنیم. بعضی از مهم‌ترین‌ها موارد زیر هستند:

  • docker exec → اجرای دستور داخل یک کانتینر فعال. (می‌توانید مسیر را با --workdir مشخص کنید، کاربر را با --user تغییر بدهید، یا متغیر محیطی با -e و --env-file پاس بدهید).
  • docker images → لیست همه‌ی ایمیج‌هایی که روی سیستم دانلود کردید.
  • docker info → نمایش اطلاعات کلی سیستم و وضعیت داکر.
  • docker ps → دیدن کانتینرهای در حال اجرا (-a برای همه کانتینرها حتی متوقف‌شده و -l برای آخرین کانتینر ساخته‌شده).
  • docker rename → تغییر نام یک کانتینر.
  • docker rm → حذف یک کانتینر با شناسه یا اسم.
  • docker run → ساخت و اجرای یک کانتینر جدید از روی ایمیج مشخص. (با -it وارد شل تعاملی می‌شی).
  • docker search → جستجوی ایمیج‌ها در Docker Hub.
  • docker pull → دانلود ایمیج از رجیستری.
  • docker start → راه‌اندازی دوباره یک کانتینر متوقف‌شده.
  • docker stop → متوقف کردن یک کانتینر در حال اجرا.
  • docker tag → تغییر نام یا تگ‌گذاری روی یک ایمیج ساخته‌شده.
  • docker volume → مدیریت دیتا ولوم‌ها برای ذخیره‌سازی دائمی.

این دستورات در واقع ستون اصلی کار با داکر هستند و در هر پروژه‌ای کاربرد دارند.

با استفاده از فلگ --help می‌توانید تمام گزینه‌ها و زیر‌دستورات موجود برای دستورهای مختلف Docker را مشاهده کنید. برخی از پرکاربردترین گزینه‌ها عبارتند از:

  • --name → اختصاص یک نام دلخواه به کانتینر
  • --rm → ساخت کانتینری که بعد از توقف به‌صورت خودکار حذف شود
  • -d → اجرای کانتینر در پس‌زمینه (Detached) بدون اتصال به ترمینال
  • -v → مدیریت Docker Volume یا ساخت bind mount برای نگهداری داده‌ها

Docker همچنین ابزار Docker Compose CLI را برای مدیریت محیط‌هایی با چند کانتینر ارائه می‌دهد. با Compose، یک فایل YAML تعریف می‌کنید که شامل محیط وب‌سرور، ریدایرکت پورت‌ها و اشتراک‌گذاری والیوم‌هاست. سپس می‌توانید کانتینرها را با دستورات زیر مدیریت کنید:

  • docker compose up → اجرای محیط چندکانتینری
  • docker compose ps → مشاهده وضعیت کانتینرهای در حال اجرا و ریدایرکت پورت‌ها
  • docker compose logs → دسترسی به لاگ‌های کانتینر
  • docker compose pause → توقف موقت کانتینر
  • docker compose unpause → ادامه اجرای کانتینر بعد از توقف
  • docker compose stop → متوقف کردن کانتینر
  • docker compose down → حذف کانتینرها، شبکه‌ها و ولوم‌های مرتبط با محیط

برای مدیریت ایمیج‌ها (Images) با استفاده از Docker Hub یا Docker Registry خصوصی، می‌توانید از دستورات زیر استفاده کنید:

  • docker login → ورود به حساب کاربری، با استفاده از فلگ -u برای نام کاربری
  • docker commit → ثبت تغییرات یک کانتینر به عنوان یک ایمیج جدید، با فلگ -m برای پیام کامیت و -a برای مشخص کردن نویسنده
  • docker push → ارسال ایمیج به رجیستری، شامل ریپازیتوری شخصی شما
  • docker pull → دانلود ایمیج از رجیستری به یک سیستم جدید

برای نگهداری داده‌های پایدار (Persistent Data)، می‌توان از Docker Volume استفاده کرد. با دستور docker volume می‌توانید:

  • create → ساخت یک ولوم جدید
  • inspect → بررسی جزئیات ولوم در سیستم
  • ls → لیست کردن همه ولوم‌ها
  • :ro→ ایجاد ولوم با دسترسی فقط‌خواندنی

این والیوم‌ها به شما اجازه می‌دهند داده‌ها را بین کانتینر و میزبان (Host) به اشتراک بگذارید و حتی بعد از حذف کانتینر، داده‌ها باقی بمانند.

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

اجرای دستورات کوبرنتیز در اوبونتو

در مقالات معرفی کوبرنتیز، شما از Minikube همراه با Docker برای شبیه‌سازی یک کلاستر روی یک ماشین استفاده کردید. این کار به شما امکان دسترسی به داشبورد مرورگر کلاستر کوبرنتیز را می‌دهد و محیطی آزمایشی برای تمرین دستورات فراهم می‌کند.

برخی از دستورات پرکاربرد Minikube که اجرا کردید عبارت است از:

  • minikube start → راه‌اندازی ابزار و فعال کردن kubectl؛ با گزینه -p یا --profile می‌توان یک خوشه خاص را مشخص کرد
  • minikube dashboard → دسترسی به داشبورد کوبرنتیس با پورت فورواردینگ خودکار؛ با فلگ --url امکان فوروارد از سرور راه دور از طریق SSH فراهم می‌شود
  • minikube service [SERVICE_NAME] –url → دریافت URL یک سرویس در حال اجرا
  • minikube config → مدیریت خوشه با زیر‌دستورات مثل set memory یا get profile
  • minikube delete → حذف یک سرویس برای راه‌اندازی مجدد
  • minikube mount → اتصال موقت یک مسیر از سیستم محلی به خوشه، با دستور local_path:minikube_host_path
  • minikube profile [PROFILE_NAME] → تغییر پروفایل فعال خوشه
  • همچنین از kubectl برای مدیریت منابع و بارکاری‌ها استفاده کردید:
  • kubectl get pods -A → لیست تمام پادهای در حال اجرا در همه namespace‌ها
  • kubectl create deployment [NAME] –image [IMAGE] → ایجاد یک دیپلویمنت به همراه ایمیج مشخص
  • kubectl expose deployment [NAME] –port [PORT] –type [TYPE] → در معرض قرار دادن یک دیپلویمنت با پورت و نوع مشخص
  • kubectl get service [SERVICE_NAME] → بررسی وضعیت سرویس
  • kubectl get nodes –kubeconfig [FILE] → لیست نودهای فعال کلاستر، با امکان استفاده از فایل YAML پیکربندی متفاوت
همین حالا، بدون نیاز به پیکربندی و تنظیمات پیچیده، اپلیکیشن Docker خود را در کمتر از چند ثانیه اجرا کنید!
✅ استقرار سریع ✅ عملکرد پایدار ✅ هزینه مقرون‌به‌صرفه
خرید هاست Docker

جمع بندی

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

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