آشنایی با داکر

بصورت کلی Docker یک محصول Open Source است که فرایند ایجاد ، توسعه و اجرا کردن Application ها با استفاده از Container ها در قسمت OS Level Virtualization را بسیار ساده می کند. Container ها به یک برنامه نویس این اجازه را می دهد که application خود را با تمامی اجزای مورد نیاز آن اعم از فایل های dll و کلیه library ها ، کلیه وابستگی ها در قالب یک بسته نرم افزاری ارائه بدهد به شکلی که از بیرون یک نرم افزار واحد به نظر برسد. با استفاده از این مکانیزم برنامه نویس می تواند مطمئن باشد که نرم افزاری که نوشته است فارغ از نوع سیستم عاملی که بر روی آن اجرا می شود نیازی به نصب کردن هیچگونه اجزای جانبی برای اجرای برنامه نخواهد داشت و حتی تنظیمات آن نیز بصورت از پیش تعریف شده انجام می شود.

به تصویر پایین توجه کنید :

در واقع ما می توانیم از Docker به عنوان یک ماشین مجازی یاد کنیم زیرا تا حدود زیادی وقتی صحبت از Docker می شود اکثر دوستان تصورشان یک ماشین مجازی است. اما بر خلاف ماشین های مجازی که یک سیستم عامل کاملا مستقل ایجاد می کنند ، Docker هیچ سیستم عامل جدیدی ایجاد نمی کند بلکه این امکان را به بسته نرم افزاری ایجاد شده می دهد که از Kernel اصلی سیستم عامل لینوکسی که بر روی آن نصب شده است استفاده کند و در زمان انتقال نیز فقط Package نرم افزاری منتقل می شود نه ماشین مجازی ، در واقع Docker Engine یا موتور اصلی Docker جایگزین نرم افزار Hypervisor ما می شود و اینکار یعنی کارایی سیستم ما به شدت افزایش می یابد زیرا یک لایه واسط به نام Hypervisor حذف شده و نرم افزار بصورت مستقیم با هسته اصلی سیستم عامل کار میکند با این تفاوت که کاملا ایزوله شده است. یکی از مهمترین فاکتورهایی که Docker دارد Open Source بودن آن است. این یعنی هر کسی می تواند Docker را تهیه و هسته آن را تغییر بدهد و یک محصول جدید معرفی کند و یا اینکه قابلیت های جدیدی به آن اضافه کند که تا به حال بر روی آن وجود نداشته است.


داکر به درد چه کسانی میخورد ؟

این بسته نرم‌افزاری ابزاری است که هم به درد برنامه نویس ها می خورد و هم به درد مدیرهای شبکه و به همین خاطر هم برخی اوقات به نام DevOps از آن یاد می شود که ترکیبی از دو اسم Developer و Operations است. برای برنامه نویس ها Docker به این معنا است که فقط روی کد نویسی خودتان تمرکز کنید و دغدغه اینکه کد شما قرار است بر روی چه سیستم عاملی با چه نیازمندی هایی نصب شود را نداشته باشید اینکار را Docker برای شما انجام می دهد. از طرفی هزاران برنامه و نرم افزار متنوع وجود دارند که برای کار کردن در محیط Docker طراحی شده اند و شما به عنوان یک ITPRO می توانید به راحتی از آنها در مجموعه خودتان در قالب یک Docker Container استفاده کنید. از طرفی در محیط های عملیاتی Docker این امکان را به همه می دهد که چندین برنامه را همزمان بر روی یک سیستم فیزیکی نصب و اجرا کنند و اینها هیچکدام با یکدیگر کوچکترین ارتباطی نداشته باشند و بصورت کاملا ایزوله در مجموعه فعالیت کنند.

مکانیزم کاری :

یک لایه واسط بین سیستم عامل اصلی شما و بسته نرم افزاری شما ایجاد می کند و در واقع با استفاده از این لایه واسط نرم افزارها را از همدیگر ایزوله می کند ، هیچکدام از نرم افزارها از وجود نرم افزار دیگر بر روی سیستم خبری ندارند . این مکانیزم یک چیز عجیب و غریب برای لینوکس نیست ، در سیستم عامل لینوکس قابلیت هایی برای ایزوله سازی منابع وجود داشته و دارند که هم هسته سیستم عامل و هم گروه ها و منابع سخت افزاری و نرم افزاری سیستم عامل را بصورت ایزوله شده در اختیار نرم افزارها قرار می دهند که Docker نیز از آنها استفاده می کند ، برای مثال قابلیت های cgroups و kernel namespaces از جمله مواردی هستند که Docker از انها برای کار خودش استفاده می کند. قابلیتی مثل kernel namespace باعث می شود که application ها هیچ دیدی از محیطی که در آن اجرا می شوند نداشته باشند که این موارد شامل process tree ها ، شبکه ، ID های کاربران و حتی فایل سیستم های mount شده نیز می شود ، از طرفی قابلیتی مثل cgroups محدودیت های دسترسی به منابع CPU و RAM و I//O و شبکه را ایجاد می کند . Docker در محیط های اشتراکی یا Shared Environment امنیت را نیز برای نرم افزارها ما به ارمغان می آورد. اما به عنوان یک مکانیزم امنیتی شناخته نمی شود.شما به عنوان یک برنامه نویس یا شبکه کار بایستی سیستم عامل Docker را بصورت جداگانه امن کنید.

تفاوت اصلی با virtual machines :

به تصویر زیر دقت کنید :

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

در تصویر بالا هم در داکر و هم در ماشین مجازی دو عنصور Server، Host Os مشترک است.

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

هرچند می‌توان نسخه کوچکی از نسخه‌های مختلف سیستم عامل را نیز نصب کرد ولی باز هم بسیار راحت تر از سیستم ماشین‌های مجازی است. از مزایای استفاده از داکر نسبت به مجازی ساز می‌توان به موارد زیر اشاره کرد:

1. ایجاد و حذف بسیار سریع Container ها

2. ریستارت و خاموش کردن بسیار سریع

3. انتقال پذیری راحت و سبک

4. مدیریت منابع و ریسورس‌ها به صورت قدرتمند و متغیر

5. …

داکر Image :

همانطور که در تصویر بالا مشاهده میکنید ُ یک Base Image مانند Debian روی این داکر نصب شده است و روی آن Image‌های دیگر را نصب کرده ایم.

آنچه که پس از پایان به حالت اولیه خود بازمی‌گردند image ها هستند. چون همانطور از نام آن‌ها مشخص است تنها یک تصویری از پکیج اصلی هستند. برای حذف تغییرات Image می‌توان حالت آن‌ها را با دستورات خاصی ذخیره کرد.

برای container ها هم در واقع می‌توان گفت Container ظرفی است که Image‌ها را در آن اجرا می‌کنند. Container‌ها از روی Image‌ها ایجاد می‌شوند و به وظایف خود عمل می‌کنند. مثلا فرض کنید از یک Centos چند Container می‌سازیم و در هر کدام تغییرات متفاوتی اعمال می‌کنیم.

یا بعنوان یک تشبیه دیگر میتوانیم برنامه نویسی شی گرا را مثال بزنیم که یک کلاس کلی داریم یا همان image در داکر و از روی آن شی میسازیم یا همان container ها .

هرکدام از این کانتینر هارا میتوان تغییرات دلخواه را روی ان انجام داد و متوقف یا دوباره فعالشان کرد .

نویسنده : محمد حسین نیکی ملکی