یادداشت ویراستار: اصل این مطلب در تیر ۹۵ نوشته شده بود و در دی ۹۹ دوباره بررسی و بهروز شده است. همچنین در اردیبهشت ۱۴۰۰ توسط کارشناسان سرور و شبکه فالنیک، بررسی و تایید شده است.
حتما هنگام استعلام قیمت سرور، متوجه هزینه های راه انداختن شبکه شده اید. مجازی سازی راه حلی ست که به ما امکان می دهد بعضی از خدمات شبکه های کامپیوتری را با هزینه ای به مراتب کمتر در اختیار داشته باشیم. در این مجال قصد داریم به موضوع Container و Docker چیست بپردازیم و مزایا و معایب آن را بررسی کنیم.
- Container چیست؟
- مقایسه کانتینر و ماشین مجازی
- معایب کانتینر
- Docker container چیست؟
- کلاس container چیست؟
- کانتینر در برنامه نویسی چیست؟
- تکنولوژی Container و Docker در سرورهای اچ پی
Container چیست؟
در یک جمله میتوان مفهوم Container – کانتینر را این گونه گفت: کانتینر، نرم افزار مجازی سازی در سطح سیستم عامل است. Container، یک بسته نرم افزاری است و شامل هر آن چیزی است که نرم افزار برای اجرا به آن نیاز دارد، مثلا برنامههای قابل اجرا که تنظیمات، کتابخانهها و System Tools را شامل میشود. Container ها مانند برنامههای نرم افزاری سنتی که به شما اجازه میدهند مستقل از نرم افزارهای دیگر و خود سیستم عامل کار کنید، نصب نمیشوند. مهمترین دغدغه کانتینرها این است که چگونه محیطی فراهم کنند تا نرم افزارهایی که در یک محیط پردازشی اجرا میشوند با انتقال به محیط دیگر، بدون ایراد و مشکل اجرا شوند.
Container ها به مشتریان این قابلیت را میدهند، تا برنامهها و وابستگیهای آنها را به صورت یک فرآیند ایزوله شده در سیستم اجرا کنند. تمام اجزای ضروری مورد نیاز یک برنامه به صورت یک image بستهبندی میشود. image مربوطه در یک محیط ایزوله اجرا شده و فضای حافظه، CPU و فضای ذخیره سازی خود را با سیستم عامل به اشتراک نخواهد گذاشت. این عمل موجب میشود که فرآیندهای موجود در Container، قادر به مشاهده سایر فرآیندها در خارج از آن نباشند.
ایمیجها متشکل از برنامه و اجزای مورد نیاز برای اجرای برنامه است و همین باعث پورتابل بودن کانتینر میشود. با استفاده از این ایمیجها امکان ساخت کانتینر را خواهید داشت. از طرفی ایمیجها میتوانند به صورت مشترک بین چند کانتینر استفاده شوند و یا از ایمیج برای ساخت ایمیج دیگر استفاده کرد. همه اینها باعث افزایش سرعت اجرا و نیاز به منابع کمتر در کانتینر میشود.
مقایسه کانتینر و ماشین مجازی
با استفاده از ماشین مجازی میتوان سخت افزار را به چندین سیستم عامل اختصاص داد یعنی VM ها به ماشین هاست اضافه میشوند تا با اشتراک گذاری سخت افزار بین چندین کاربر، این گونه به نظر رسد که سرورهای مجزا داریم. اما کانتینرها، سیستم عامل را مجازی سازی میکنند و قسمتهای مجازی سازی شده برای اجرای اپلیکیشنهای کانتینر استفاده میشود.
یکی از بزرگترین مزیتهای استفاده از تکنولوژی Container، سرعت ساخت و راه اندازی بسیار بالای آنها در مقایسه با ماشین مجازی (VM) است. همچنین Container با حذف وابستگیها و از بین بردن ناسازگاریهای نرم افزاری، باعث افزایش بهرهوری در مرحله توسعه نرم افزار میشود. هر Container، به عنوان یک سرویس مجزا در نظر گرفته میشود و در صورت نیاز میتوان به راحتی آن را بهروز رسانی کرده و ارتقا داد بدون این که نگران اختلال آن با سایر نرم افزارهای موجود در سیستم باشیم. همچنین از آنجا که پردازشهای موجود در Container ایزوله شده است، هر گونه ارتقا یا تغییر در Container، سایر Container ها را تحت تاثیر قرار نمیدهد.
ماشین مجازی زمان بیشتری برای بوت شدن سیستم عاملشان نیاز دارند در حالی که زمان لازم برای بوت کانتینر بسیار کم است.
کانتینرها از منابع سروری کمتری استفاده میکنند چون را منابع هسته سیستم عامل (Kernel) به صورت اشتراکی استفاده میکنند. در نتیجه نسبت به ماشین مجازی حجم کمتری دارند و یک سرور میتواند میزبان تعداد بیشنری کانتینر باشد.
در VM به SSH نیاز داریم ولی در کانتینر نیاز به SSH نداریم. کانتینر، کوچکتر و بسیار سریع است، امنیت آن محدود به اپلیکیشن است و از پردازشهای خاص استفاده میکند ولی در VM اینگونه نیست.
معایب کانتینر
معایب Container عبارتند از:
- محدود به محیطهایی است که لینوکس و ویندوز استفاده میکنند.
- چون سرعت ایجاد و تست برنامههای مبتنی بر کانتینر زیاد است، شبکههای سنتی نمیتوانند امنیت مناسبی برای آنها تامین کنند بنابراین یکی از اهداف حملات هکرها هستند.
- برنامه های تحت کانتینر نیاز به تخصص بالایی دارند و گاهی چند تیم روی قسمت کوچکی از اپ کار میکنند بنابراین معماری مبتنی بر کانتینر، پیچیده است.
Docker container چیست؟
در تعریف ساده کانتینر داکر چیست میتوان این گونه گفت: کانتینر داکر، پلتفرم توسعه نرم افزاری متن بازی است که مهمترین مزیت آن پکیج کردن اپلیکیشنها در یک کانتینر است و امکان پورتابل بودن آنها روی هر سیستمی که سیستم عامل ویندوز یا لینوکس اجرا میکند را فراهم میکند. سیستم ویندوزی میتواند با استفاده از ماشین مجازی، کانتینر لینوکس اجرا کند.
تکنولوژی Container مانند Docker، به توسعهگران این امکان را میدهد که اپ و مولفههای مورد نیاز برای اجرای آن در یک فایل سیستمی کامل، کنار هم قرار بگیرند. این مولفهها شامل هر چیزی است که برای اجرا لازم دارد شامل code و runtime و system tools و system libraries. با این روش صرف نظر از محیطی که اپ در آن اجرا میشود، اجرای درست اپ گارانتی میشود. این نرم افزار یک لایه به لینوکس برای مجازی سازی در سطح سیستم عامل اضافه میکند و لایه مجازی سازی را در قالب یک اپلیکیشن در سیستم عامل اجرا میکند.
داکر در زمینه کانتینر نقش مهمی بازی میکند و مسئول اجرای درست کدهایی است که در کانتینر قرار دارد. داکر شامل دستوراتی است که توسعهگر در کلاینت داکر وارد و آنها را اجرا میکند. این روش باعث میشود قطعات کدها کوچکتر شوند. این قطعات کوچک راحتتر منتقل میشوند و میتوانند هر جایی که ویندوز و لینوکس در حال اجرا هستند اجرا شوند. داکر باعث توسعه بیشتر در برنامهها میشود و آنها را به فانکشنهای خاص تبدیل میکند. همچنین سرعت تست را هم افزایش میدهد.
کلاس container چیست؟
کلاس کانتینر کلاسی است که آبجکتها را در حافظه یا استوریج اکسترنال نگه میدارد. کلاس کانتینر دارای رفتار از پیش تعریف شده است و هدف از آن مخفی کردن تکنولوژی استفاده شده در نگهداری لیست آبجکتها در حافظه است.
اگر کلاس Container حاوی گروهی از چند آبجکت مختلف باشد، heterogeneous container نامیده میشود و اگر حاوی گروهی از آبجکتهای یکسان باشد، homogeneous container نامیده میشود.
کانتینر در برنامه نویسی چیست؟
Container باعث سهولت بسیار در برنامه نویسی میشود. امروزه تقریبا تمام زبانهای کامپیوتری دارای کانتینر هستند: ArrayLists و Map در جاوا؛ List و Dict در پایتون و STL در C++. کانتینر ها در برنامه نویسی شامل آبجکتهایی هستند که تمام ویژگی های لازم برای اجرای موارد تکرار شوند را دارند مثلا تمام اجزا و ویژگیهای لازم برای نمایش عکس ها در جاوا.
Container در جاوا یا هر زبان دیگری باعث سهولت برنامه نویسی و تست آن میشود. مثلا مجموعه تگ های کانتینر مثل div و article و nav و section در HTML 5 وجود دارد که به راحتی میتوانید گروهبندی های مورد نیازتان را پیاده سازی کنید.
تکنولوژی Container و Docker در سرورهای اچ پی
مدیرعامل شرکت Docker در رویداد HPE Discover 2016 به همراه مدیرعامل شرکت HP خانم مگ ویتمن روی صحنه حاضر شد تا درباره همکاری اچ پی و داکر صحبت کنند. او گفت: “پیش زمینه دسترسی به تکنولوژی Dockerروی تمامی سرورها و پلت فرم های همگرای اچ پی باعث میشود این شرکت از مزایای این تکنولوژی بهرهمند شود و در عین حال، مزیت حاصل از سیستمهای کنونی نیز تقویت میشود.” او ادامه داد که این همکاری شامل پلت فرم Docker Datacenter نیز میشود و شرکتهایی که از این تکنولوژی استفاده میکنند، بلافاصله از مزایای آن بهرهمند میشوند که شامل بیست برابر شدن بهرهوری در زیرساخت و ۱۳ برابر شدن سرعت انتقال در اپلیکیشنها است.
اچ پی و داکر اعلام کردند که در زمینه برنامه های فروش و پشتیبانی برای مشتریان HP به خصوص آنهایی که از Docker Datacenter استفاده میکنند، با یکدیگر همکاری میکنند. HP طراحی و شبیه سازی را برای Docker Container و میکروسرویس های آن فراهم میکند. Docker نیز از HPE Linux پشتیبانی کرده و محصولات نرم افزاری و فضای ابری HP را مجهز به Docker میکند. سرورهای HP شامل Apollo و Cloudline و سرور های پرولیانت اچ پی در سه ماهه آخر ۲۰۱۶ به Docker مجهز شدند. نرم افزارهای Docker برای استوریج و شبکه سازی نیز در دسترس هستند.