داکر (Docker) چیست؟

در این درس از معماری مایکروسرویس ها برای اپلیکیشن های Containerized شده در دات نت، قرار است که کمی در رابطه با داکر صحبت کنیم. در همین ابتدای کار از شما دعوت می‌کنیم که در صورت تمایل از بسته ی آموزش ویدئویی شروع به کار با داکر (Docker) در ویندوز و بسته ی آموزش ویدئویی داکر (Docker) و Container در پروژه های ASP.NET Core دیدن بفرمایید.

داکر چیست؟

نرم افزار داکر یک پروژه اپن سورس برای خودکارسازی روال deployment اپلیکیشن ها می باشد. این کار با در دست داشتن Container قابل حمل و یا Portable و خود شمول و یا self-sufficient که می توانند بر روی Cloud و یا دیتاسنترهای on-premise اجرا بشوند اتفاق می‌افتد. ضمنا داکر یک کمپانی نیز می‌باشد که این تکنولوژی را ایجاد و در حال تکامل دادن آن است. داکر به ‌صورت همکارانه با سرویس دهندگان Cloud و همچنین مایکروسافت فعالیت می کند. در رابطه با Cloud می توانید از بسته ی آموزش ویدئویی توسعه مایکروسرویس ها در سی شارپ و Azure و بسته ی آموزش ویدئویی ابزارهای مدیریتی در Azure دیدن کنید.

به طور معمول Container های مربوط به داکر می‌توانند در مکان‌های مختلف از قبیل دیتاسنترهای on-premise ،Service provider های خارجی و یا بر روی Cloud اجرا بشوند. Image container های مربوط به داکر می‌توانند به صورت Native بر روی لینوکس و ویندوز اجرا می‌گردند. اما Image های مربوط به ویندوز می توانند فقط بر روی Windows host ها و Image های مربوط به لینوکس می‌توانند بر روی Linux Host ها و Windows Host ها اجرا شوند. در این قسمت منظور از Host یک سرور و یا ماشین مجازی است. برای اجرا کردن Image های مربوط به لینوکس بر روی ویندوز نیز از ابزارهای مختلفی شبیه Hyper-V Linux VM استفاده می کنیم.

برنامه نویسان و توسعه دهندگان نرم افزار می توانند از محیط های توسعه مختلف بر روی ویندوز و لینوکس و یا MacOS استفاده کنند. بر روی ماشین development، برنامه نویس می تواند یک Docker Host اجرا کند و در آن Docker Image ها را Deploy کند که این Docker Image ها می‌توانند شامل خود برنامه و dependency های مختلف آن باشند. توسعه‌دهندگان نرم‌افزاری که بر روی لینوکس و یا MacOS کار می‌کنند می‌توانند از Docker Host برای Docker Host مبتنی بر لینوکس استفاده کنند و آنها فقط می‌توانند Image هایی را ایجاد کنند که برای Container های Linux تعریف شده‌اند. توسعه دهندگانی که بر روی MacOS کار می‌کنند نیز می‌توانند کد های خود را ویرایش کرده و Docker CLI را از درون MacOS اجرا کنند. اما در زمان ایجاد کردن این آموزش، این برنامه نویسان می توانند به صورت مستقیم Container ها را بر روی MacOS اجرا نمایند. برنامه نویسانی که بر روی Palform ویندوز کار می‌کنند می‌توانند Image ها را برای لینوکس و یا برای ویندوز ایجاد نمایند.

به منظور Host کردن Container ها در محیط‌های توسعه و فراهم کردن ابزارهای توسعه اضافی برای برنامه نویسان، داکر به همراه (Docker Community Edition (CE برای ویندوز و MacOS منتشر شده است. این نرم افزار باعث می شود که VM و یا ماشین های مجازی ضروری برای مثال Docker Host برای Host کردن Container ها ایجاد بشوند. علاوه بر این موضوع می‌توان از Docker Enterprise Edition نیز استفاده کرد. از این ابزار زمانی استفاده می کنیم که می‌خواهیم برنامه های تجاری ایجاد کنیم که توسط متخصصین IT که نرم‌افزارهای حساسی را در Production ایجاد و Deploy می‌کنند ساخته می‌شوند.

برای اجرا کردن Windows Container ها به طور کلی دو نوع Runtime وجود دارد:

  • گزینه اول Windows server container می باشد که به سادگی می تواند Application Isolation را با استفاده از Process ها و Name Space های دیگر فراهم کند. یک windows server container یک kernel را به همراه container host و تمامی container های دیگر در حال اجرا بر روی host به صورت مشترک استفاده می‌نماید.
  • گزینه دوم استفاده کردن از Hyper-V Container ها می باشد که می توانند Isolation فراهم شده با تکنیک Windows server container ها را گسترش بدهند. این کار با اجرا کردن هر Container در یک ماشین مجازی کاملا بهینه سازی شده انجام می پذیرد. در این روش Kernel مربوط به Container host به صورت مشترک توسط Hyper-V Container ها مورد استفاده قرار نمی گیرد و از این جهت Isolation بهتری را فراهم می‌کند.

این را نیز بگوئیم که Image های مربوط به این Container ها به روشی یکسان ایجاد و عمل می‌کنند. تفاوت این دو روش در نحوه ایجاد شدن Container از Image مربوطه است. اجرا کردن یک Hyper-V Container نیازمند یک پارامتر اضافی نیز می باشد. در این قسمت بحث را به پایان می رسانیم و در قسمت بعدی این موضوع را با یکدیگر ادامه خواهیم داد.