در قسمت اول از این مقاله مفهوم Containerها با ارائهی مثالی ساده در ابتدای مقاله شرح داده شد و سپس تعاریف پایه آنها همچون Container Host، Container Image، Sandbox، Container OS Image و مخزن Container بیان گردید. همچنین به شرحی از انواع Windows Containerها همچون Containerهای Windows Server و ایزولهسازی Hyper-V نیز پرداخته شد. در قسمت دوم این مقاله که بخش آخر نیز میباشد، به ارائه توضیحاتی در خصوص کمپانی Docker، استفاده از Containerها برای توسعهدهندگان (Developers) و متخصصان IT و همچنین شرحی از وظایف Orchestrator Containerها که خودکارسازی و مدیریت تعداد زیادی از Containerها و ارتباط آنها را برعهده دارند، خواهیم پرداخت.
شرکت Docker
معمولا با مطالعه درخصوص Containerها، با نام کمپانی Docker مواجه خواهیم شد. Docker نقش مجرایی را دارد که Container Imageها از طریق آن بستهبندی و پیادهسازی میشوند. این فرآیند خودکارسازیشده، Imageهایی (در واقع تعدادی Template) تولید مینماید که میتوان بهعنوان یک Container، آنها را در هر محیطی (On-Premise یا Cloud و یا سیستم شخصی) اجرا نمود.
یک Container مختص به Windows Server را نیز میتوان درست همانند باقی Containerها، با استفاده از Docker مدیریت نمود.
استفاده از Containerها برای توسعهدهندگان
میتوان Containerی ایجاد نمود که از دسکتاپ یک توسعهدهنده گرفته تا یک ماشین تست و مجموعهای از ماشینهای عملیاتی، بهصورت مشابه در عرض چند ثانیه، در هر محیطی پیادهسازی شود. این امر باعث ایجاد اکوسیستمی عظیم و روبهرشد از برنامههای کاربردی شده است که با استفاده از DockerHub در Containerهای کمپانی Docker بستهبنده شدهاند. DockerHub یک رجیستری عمومی برنامههای Containerشده (Containerized-Application) میباشد که Docker آن را مدیریت میکند، درحالحاضر بیش از 180 هزار برنامهی کاربردی در Public Community Repository منتشر نموده است.
هنگامیکه یک برنامهی کاربردی Containere میشود، فقط خودِ برنامه و اجزائی که برای اجرای آن موردنیاز هستند، بهصورت یک Image باهم ادغام میشوند. سپس با توجه به نیاز کاربر، میتوان با استفاده از این Image به ساخت Containerها پرداخت. همچنین میتوان از یک Image بهعنوان پایهای برای ساخت Image دیگری استفاده نمود و از این طریق سرعت بیشتری به ساخت Image داد. چند Container متفاوت میتوانند از Image مشترکی استفاده نمایند و این بدین معنی است که Containerها با سرعت بسیار زیادی اجرا شده و از منابع کمتری استفاده مینمایند. به عنوان مثال میتوان از Containerها جهت Spin-Upنمودن بخشهای سبک و پورتابل برنامهها یا همان «میکرو سرویسها» برای برنامههای توزیعشده استفاده نمود و بهسرعت هر سرویس را بهصورت جداگانه توسعه داد.
Containerها بسیار پورتابل هستند و این به دلیل آن است که هرچیزی را که برای اجرای برنامهی کاربردی مورد نظر نیاز است، در خود جای دادهاند و میتوان آنها را بر روی هر ماشینی که دارای Windows Server 2016 باشد، اجرا نمود. علاوه بر آن میتوان بهصورت Local به ساخت و آزمایش Containerها پرداخت و سپس همان Container Image را بر روی Private Cloud ، Public Cloud و یا ارائهدهندگان خدمات یک شرکت پیادهسازی نمود. طراحی ذاتی Containerها از توسعهی مدرن برنامههای کاربردی در محیطهای Cloud مجازیسازیشده با مقیاس بالا، پشتیبانی مینماید.
توسعهدهندگان برنامههای کاربردی میتوانند با استفاده از Containerها، هر برنامهای را به هر زبانی بسازند. این برنامههای کاربردی کاملاً پورتابل بوده و بدون تغییرات در کد، میتوان آنها را بر روی هر چیزی اعم از لپتاپ، دسکتاپ، سرور، Private Cloud ، Public Cloud یا Service Provider اجرا نمود.
Containerها به توسعهدهندگان برنامههای کاربردی کمک میکنند که به ساخت و ارائه برنامههای کاربردی با کیفیت، با سرعت بیشتری بپردازند.
استفاده از Containerها برای متخصصان IT
متخصصان IT میتوانند از Containerها جهت ارائهی محیطی استانداردسازیشده برای تیمهای توسعه، QA و تولید مجموعهی خود استفاده نمایند. دیگر نیازی نیست نگران مراحل پیچیدهی نصب و پیکربندی باشند. با استفاده از Containerها، تفاوتهای میان نصب OSها و زیرساختهای بنیادی از بین خواهند رفت.
Containerها به مدیران IT کمک میکند زیرساختی را بسازند که بروزرسانی و حفظ آن سادهتر است.
Orchestratorهای Containerها
Containerها بهدلیل سایز کوچک و اپلیکیشنمحور بودن، برای استفاده در محیطهای که سرعت اجرا در آنها بسیار حائز اهمیت است و معماریهای مبتنی بر میکروسرویسها، مناسب هستند. با اینحال هنگام استفاده از Containerها و میکروسرویسها، بهراحتی ممکن است صدها و هزاران جزء در محیط خود داشته باشیم. ممکن است بتوان بهصورت دستی چند ده ماشین مجازی و سرور فیزیکی را مدیریت نمود، ولی غیرممکن است که بتوان بدون خودکارسازی، یک محیط Container با مقیاس بزرگ را مدیریت نمود. عملِ خودکارسازی و مدیریت تعداد زیادی از Containerها و روابط بین آنها با نام «Orchestration» شناخته میشود.
تعریف استاندارد Orchestration شامل اعمال ذیل میباشد:
- برنامهریزی: پیدا نمودن ماشینی مناسب برای اجرای یک Container با توجه به Container Image و درخواست منبع مربوطه.
- Affinity/Anti-Affinity: تعیین اینکه آیا یک سری Container باید در کنار یکدیگر اجرا گردند (بهمنظور عملکرد بهتر) و یا جدا از هم باشند (بهمنظور دسترسپذیری).
- بررسی صحت عملکرد: زیرنظر داشتن بروز خرابی و خطا در Containerها و برنامهریزی دوبارهی آنها بهصورت خودکار.
- Failover: زیرنظر داشتن اینکه بر روی هر ماشین، چه چیزی درحال اجراست و اجرای دوبارهی Containerها از ماشین اختلال دار بر روی Node سالم.
- توسعهدادن: اضافه و یا حذف نمودن خودکار یا دستی Instanceهای Container، برای پاسخگویی به درخواست.
- ایجاد شبکه: ارائهی یک شبکهی مناسب، برای هماهنگسازی Containerها با هدف برقراری ارتباط بر روی چندین ماشین.
- Service discovery: اجازه به Containerها برای اینکه حتی درصورت جابهجایی میان Hostها و تغییر IP، بهصورت خودکار یکدیگر را پیدا نمایند.
- بروزرسانی هماهنگ برنامههای کاربردی: مدیریت بروزرسانی Containerها در جهت جلوگیری از Downtime برنامههای کاربردی و فعالسازی Rollback در صورتی که مشکلی ایجاد شود.
Azure دو Container Orchestrator ارائه میدهد:
- Azure Container Service یا به اختصار AKS
- Service Fabric.
Azure Container Service سبب سهولت در ساخت، پیکربندی و مدیریت تعداد زیادی ماشین مجازی، که از پیش برای اجرای برنامههای Containerشده پیکربندی شدهاند، میشود. این امر باعث میشود که کاربر یا از تواناییهای موجود خود استفاده نموده، یا از جامعهای گسترده و روبهرشد از متخصصین در جهت پیادهسازی و مدیریت برنامههای کاربردی مبتنی بر Container بر روی Microsoft Azure، کمک بگیرد. با استفاده از AKS، میتوان علاوه بر استفاده از ویژگیهای سطح Enterprise، از Kubernetes و Image مختص به کمپانی Docker استفاده نمود و پورتابلبودن برنامهی کاربردی را حفظ کرد.
Azure Service Fabric یک پلتفرم سیستمهای توزیعشده میباشد که بستهبندی، پیادهسازی و مدیریت میکروسرویسها و Containerهای مقیاسپذیر و قابلاطمینان را سهولت میبخشد. Service Fabric به رفع چالشهای چشمگیر توسعه و مدیریت برنامههای کاربردی Cloud-Native میپردازد. توسعهدهندگان و مدیران میتوانند از مشکلات پیچیدهی زیرساختها دوری کرده و بر روی پیادهسازی بارهای کاری Mission-Critical و چالشبرانگیز تمرکز کنند که مقیاسپذیر، قابلتکیه و مدیریتپذیر باشد. Service Fabric نمایندهی نسل بعدی پلتفرمها برای توسعه و مدیریت این برنامههای کاربردی در سطح سازمانی، Tier 1 و در مقیاس Cloud میباشد که بر روی Containerها درحال اجرا هستند.
ــــــــــــــــــــــــــــــــــــ
مفهوم Container و کاربرد Docker در ویندوز – قسمت اول
مفهوم Container و کاربرد Docker در ویندوز – قسمت دوم (پایانی)