چرا سکان آکادمی؟
راه اندازی برنامه در Docker Swarm

راه اندازی برنامه در Docker Swarm

در این قسمت از آموزش کاربردی داکر قرار است، برنامه ی مان را روی Docker Swarm بالا بیاوریم و از این ابزار Orchestration برای مدیریت کانتینرهای برنامه بهره ببریم.

پیش نیازهای مطالعه ی این بخش عبارتند از:

  • Docker Desktop را دانلود و نصب کنید.
  • روش کانتینری کردن یک برنامه (Containerizing) را از فصل های قبلی همین دوره یاد بگیرید.
  • مطمئن شوید که Swarm روی سیستم تان فعال و درحال اجراست. برای این کار می توانید از دستور docker system info استفاده کنید و در جواب این دستور به دنبال Swarm: active بگردید.

اکر Swarm در وضعیت غیرفعال (inactive) بود، به راحتی با استفاده از دستور docker swarm init آن را فعال کنید.

🟠 نکته: دستور docker system info یکی از دستورات خوب در داکر است که به شما اطلاعات مهمی از وضعیت داکر روی سیستم تان می دهد. از جمله اطلاعاتی که می توانید از جواب این دستور دریافت کنید عبارتند از:

  • وضعیت Debug Mode را می توانید با True/False ببینیم.
  • تعداد و آماری از Server ها و Imageها را می توانیم داشته باشیم. مثلا چندتا کانتینر داریم، از این تعداد چندتا در حال اجراست، چندتا متوقف (Stop) شده و چندتا در حالت Pause قرار دارد.
  • وضعیت Swarm را متوجه می شویم. که این بخش دو حالت active و inactive دارد.
  • مسیر روت داکر را می توانیم از کلید Docker Root Dir بدانیم.
  • همچنین اگر warning یا مشکلی در داکر وجود داشته باشد هم می توانیم مطلع شویم.

حالا که دیدیم، اجزای جداگانه ی برنامه به عنوان کانتینرهای مستقل اجرا می شوند و نحوه ی deploy آن ها (همان استقرار محصول) با استفاده از Kubernetes را یاد گرفتید، بیایید نحوه مدیریت آنها توسط Docker Swarm را هم بررسی کنیم. Swarm ابزارهای زیادی را برای مقیاس‌بندی، شبکه‌سازی، ایمن‌سازی و نگهداری برنامه‌های کانتینری‌شده، فراهم می‌کند.

برای اطمینان از اینکه برنامه کانتینری ما روی Swarm به خوبی کار می کند، قبل از اینکه برنامه و کانتینر هایش را برروی Production (وضعیتی که برنامه در حال اجرا برای مشتری نهایی است) با Swarm مدیریت کنیم، با کمک گرفتن از Docker Desktop و Swarm راه اندازی شده روی سیستم خودمان، آن را تست می کنیم. محیط Swarm که توسط Docker Desktop ایجاد شده است کامل است، یعنی همه ی ویژگی‌های Swarm را که برنامه شما در یک خوشه (Cluster) واقعی از آن بهره می‌برد را دارد.

شروع کار

Swarm مانند بخش قبلی این دوره کانتینرهای جداگانه ایجاد نمی کند. در عوض، همه ی کارهای Swarm بر عهده ی service هاست. Serviceها گروه های مقیاس پذیری از کانتینرها هستند که در یک شبکه ی مشترک قرار دارند و به طور خودکار توسط Swarm نگهداری می شوند. علاوه بر این، تمام اشیاء Swarm می‌توانند و باید در مانیفست‌هایی به نام فایل‌های پشته (Stack) توصیف شوند. این فایل‌های YAML تمام اجزا و پیکربندی‌های برنامه Swarm شما را تعریف می‌کنند و می‌توان از آنها برای ایجاد و حذف برنامه، در هر محیط Swarm ای به راحتی استفاده کرد.

بیایید یک فایل ساده ی پشته (Stack) برای اجرا و مدیریت برنامه ی مان بنویسم. موارد زیر را در فایلی با نام bb-stack.yaml بنویسید:

version: '3.7'

services:
  bb-app:
    image: bulletinboard:1.0
    ports:
      - "8000:8080"

در این فایل Swarm YAML، ما فقط یک شی داریم. همانطور که بالاتر هم گفتم، یک service معرف گروهی از کانتینر های مرتبط به هم است. در مثال بالا، فقط یک کانتینر خواهیم داشت که این کانتینر هم براساس image ای است که برای برنامه درست کردیم. همچنین در فایل stack بالا، از Swarm خواسته ایم که پرت 8000 از سیستم مان را به پرت 8080 از کانتینر ایجاده شده متصل کند و همه ی ترافیک رسیده به پرت 8000 را به پرت مقصد 8080 هدایت کند.

Serviceها در Kubernetes با Serviceها در Swarm بسیار متفاوت هستند! با اینکه هر دو از اصطلاح Service یا خدمت استفاده می کنند، اما این عبارت در هرکدام از این Orchestrator ها بسیار متفاوت است.

 در Swarm، یک سرویس امکان شبکه، ایجاد کانتینرها و ارائه ابزارهایی برای مسیریابی ترافیک به کانتینرها را فراهم می کند. در Kubernetes، شبکه‌سازی به طور جداگانه انجام می‌شود؛ استقرار (یا کنترل‌کننده‌های دیگر) کانتینرها را با پاد انجام می‌دهد، در حالی که سرویس‌ها فقط مسئول افزودن ویژگی‌های شبکه به آن پادها هستند.

استقرار برنامه و بررسی آنها

برنامه تان را در Swarm مستقر کنید:

docker stack deploy -c bb-stack.yaml demo

اگر همه چیز به خوبی پیش برود Swarm گزارشی از ایجاد و راه اندازی اشیای معرفی شده در stack را نمایش می دهد.

Creating network demo_default
Creating service demo_bb-app

توجه کنید که Swarm علاوه بر سرویسی که برای برنامه تان ایجاد می کند، به طور پیشفرض شبکه ای هم ایجاد می کند.

برای اینکه مطمئن شوید همه چیز به درستی کار می کند، لیست service ها را بررسی کنید:

docker service ls

اگر همه چیز به خوبی پیش رفته باشد، سرویس شما گزارشی مانند گزارش زیر را ارائه می دهد:

ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
il7elwunymbs        demo_bb-app         replicated          1/1   

عبارت 1/1 در بخش REPLICAS نشان می دهد که 1 از 1 کانتینری (X کانتینر از Y کانتینری) که به‌عنوان بخشی از Service تان درخواست کرده‌اید، آماده و در حال اجرا است. همچنین، می بینیم که پورت 8000 در کامپیوتر شما (یا هر سیستمی که در آن درحال توسعه برنامه هستید) به پورت 8080 در کانتینر برنامه ارسال می شود.

مرورگرتان را باز کنید و برنامه تان را در آدرس localhost:8000 مشاهده کنید. شما باید بدون هیچ مشکلی برنامه تان را همانطور که در بخش های قبلی به عنوان یک کانتینر مستقل راه انداختیم مشاهده کنید.

حالا اگر کارتان با برنامه تمام شده است، آن را حذف کنید:

docker stack rm demo

جمع بندی

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

ما علاوه بر استقرار در Swarm، برنامه خود را به عنوان یک فایل پشته (Stack) نیز تعریف کردیم. این فایل متنی ساده حاوی همه ی چیزهایی است که برای ایجاد برنامه، در حالت Production نیاز داریم. این فایل را با همکاران خود به اشتراک بگذارید. با این کار به سادگی می توانیم برنامه مان را در خوشه هایی که برای تست و یا ارائه به مشتری نهایی تهیه شده است، بالا بیاوریم و از آن استفاده کنیم.

پیشنهاد می کنم برای آشنایی بیشتر با Swarm به مقالات زیر سر بزنید.

دوره در حال تکمیل است ... rocket