Docker (داکر) یک پلتفرم متن باز است که بر مبنای سیستم عامل لینوکس راهاندازی شده است. میتوان گفت ابزاری است که فرآیند ایجاد، پیاده سازی و اجرای برنامهها را با استفاده از Containerها بسیار ساده میکند.
در ادامه جهت درک بهتر، ابتدا به تعریفContainer و سپس به تعریف Docker و مکانیزم آن به زبان ساده میپردازیم.
Container چیست؟
فرض کنید روی سرور شما یک سیستم عامل لینوکس نصب شده و میخواهید چند برنامه و یا سرویس را در آن راهاندازی کنید که ممکن است به عملکرد سرور شما لطمه بزند. اولین راهحل این است که یک VM (ماشین مجازی) روی سرور بالا بیاورید و یک سیستم عامل روی آن نصب کنید و سرویس خود را روی آن اجرا کنید. خوب این راه حل نسبتا خوبی است اما منابع شما را به شدت درگیر نگهداری VM میکند.
برای حل این مشکل Container مطرح شده که با استفاده از هسته یا همان کرنل لینوکس میتوان یک سیستم عامل دیگر را در قالب یک Container هندل کرد. Container به ما کمک میکند از یک کرنل واحد استفاده کنیم بی آن که از منابع سرور بی جهت استفاده کنیم. با این روش میتوان چند برنامه یا سرویس را بصورت توزیع شده در یک سیستم عامل اجرا کرد.
Container یک بسته سبک و مستقل شامل محیط و پکیج های مورد نیاز برای اجرای یک اپلیکیشن میباشد که شامل :
- system libraries
- system tools
- Settings
است.
Docker چیست؟
Docker یک پلتفرم متن باز است که بر مبنای سیستم عامل لینوکس راهاندازی شده است. میتوانیم از Docker به عنوان یک ماشین مجازی یاد کنیم. اما بر خلاف ماشینهای مجازی که یک سیستم عامل کاملا مستقل ایجاد میکنند، Docker هیچ سیستم عامل جدیدی ایجاد نمیکند. بلکه این امکان را به بسته نرم افزاری ایجاد شده میدهد که از Kernel اصلی سیستم عامل لینوکسی که بر روی آن نصب شده است استفاده کند و در زمان انتقال نیز فقط Package نرم افزاری منتقل میشود. در واقع Docker Engine یا موتور اصلی Docker جایگزین نرم افزار Hypervisor میشود. با اینکار کارایی سیستم به شدت افزایش مییابد. زیرا یک لایه واسط به نام Hypervisorحذف شده و نرم افزار بصورت مستقیم با هسته اصلی سیستم عامل کار میکندبا این تفاوت که کاملا ایزوله شده است.
یکی از مهمترین فاکتورهایی که Docker دارد Open Source بودن آن است. یعنی هر کسی میتواند Docker را تهیه و Source آن را تغییر بدهد و یک محصول جدید معرفی کند و یا قابلیتهای جدیدی به آن اضافه کند.
Docker از شعار Build any app ، Ship any where ، Run any where برای محصول خود استفاده مینماید. به این معنی است که شما با استفاده از داکر میتوانید هر برنامه ای که خواستید ایجاد نمائید سپس آن را به هر جایی که خواستید منتقل نمائید و در نهایت هم از هر جایی که خواستید آن را اجرا نمائید.
Docker برای چه کسانی کاربرد دارد؟
Dockerبرای برنامهنویسها و مدیران شبکه کاربرد دارد، به همین خاطر برخی اوقات به نام DevOps از آن یاد میشود. درواقع ترکیبی از دو اسم Developer و Operations است. برای برنامه نویسها Docker به این معناست که فقط روی کدنویسی خودتان تمرکز کنید و دغدغه اینکه کد شما قرار است بر روی چه سیستم عاملی با چه نیازمندیهایی نصب شود را نداشته باشید. زیرا این کار را Docker برای شما انجام میدهد.
از طرفی هزاران برنامه و نرم افزار متنوع وجود دارند که برای کار کردن در محیط Docker طراحی شدهاند. درواقع شما میتوانید به راحتی از آنها در مجموعه خودتان در قالب یک Docker Container استفاده کنید. در محیطهای عملیاتی Docker این امکان را به همه میدهد که چندین برنامه را همزمان بر روی یک سیستم فیزیکی نصب و اجرا کنند و هیچکدام با یکدیگر کوچکترین ارتباطی نداشته باشند و بصورت کاملا ایزوله در مجموعه فعالیت کنند.
مکانیزم کاری Docker چگونه است؟
همیانطور که در تصویر بالا مشخص است، Docker یک لایه واسط بین سیستمعامل اصلی شما و بسته نرم افزاری شما ایجاد میکند و در واقع با استفاده از این لایه واسط، نرم افزارها را از همدیگر ایزوله میکند. هیچکدام از نرم افزارها از وجود نرم افزار دیگر بر روی سیستم خبری ندارند. این مکانیزم یک چیز عجیب برای لینوکس نیست، در سیستم عامل لینوکس قابلیتهایی برای ایزوله سازی منابع وجود داشته و دارند که هسته سیستمعامل، گروهها و منابع سخت افزاری و نرم افزاری سیستم عامل را بصورت ایزوله شده در اختیار نرم افزارها قرار میدهند که Docker نیز از آنها استفاده میکند.
برای مثال قابلیتهای cgroups و kernel namespaces از جمله مواردی هستند که Docker از آنها برای کار خودش استفاده میکند. قابلیتی مثل kernel namespace باعث میشود که برنامهها هیچ دیدی از محیطی که در آن اجرا میشوند نداشته باشند که این موارد شامل process tree ها، شبکه، ID های کاربران و حتی فایل سیستمهای mount شده نیز میشود، از طرفی قابلیتی مثل cgroups محدودیتهای دسترسی به منابع CPU و RAM و I/O و شبکه را ایجاد میکند.
Docker در محیط های اشتراکی یا Shared Environment امنیت را نیز برای نرم افزارها ما به ارمغان میآورد. اما به عنوان یک مکانیزم امنیتی شناخته نمیشود. شما به عنوان یک برنامه نویس یا شبکه کار بایستی سیستم عامل Docker را بصورت جداگانه ایمن کنید.
در مقاله ” اجزا داکر چگونه عمل میکنند؟ ” به طور گسترده تری در مورد داکر توضیح دادهایم.
جهت مطالعه دیگر مقالات مرتبط صفحه آموزشگاه را مشاهده نمائید.
منبع: www.docs.com