۸ دلیل استفاده از داکر

دلایل استفاده از داکر

Docker ابزاری مناسب برای تمام برنامه نویسان و توسعه دهندگان است زیرا می‌توانند برنامه ای که توسعه داده اند را فارغ از پلتفرم، در هر محیطی اجرا کنند.

چرا از داکر استفاده کنیم ؟

کانتینر این امکان را به برنامه نویسان می‌دهد تا یک برنامه را با تمام ماژول ها و وابستگی ها (مانند کتابخانه ها و توابع) ایزوله کرده و در سیستم عامل های مختلف اجرا کند. برای مثال اگر شما یک توسعه دهنده PHP هستید احتمالا باید یک وب سرور (مثلا Apache) را بر روی سیستم خود نصب کنید همچنین نیاز به یک پایگاه داده MySQL دارید و اگر پروژه گسترش پیدا کند ممکن است نیاز به نصب چند ماژول اضافی برای PHP و تنظیمات مختلف داشته باشید.

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

۱ – راحتی در استفاده

بخش زیادی از محبوبیت داکر به دلیل راحتی در یادگیری و استفاده از آن است. داکر متن باز است و برای استفاده از داکر تنها کافیست یک کامپیوتر که از VitrualBox پشتیبانی می‌کند داشته باشید. داکر در Windows و MacOS به راحتی توسط نسخه Desktop قابل استفاده است و در Linux نیز به خوبی پشتیبانی می‌شود.

۲ – قابلیت تکثیر در هر نوع پلتفرم

همانطور که پروژه های جاوایی در دستگاه هایی اجرا می‌شوند که JVM داشته باشند، کانتینرهای داکر نیز در ماشین هایی اجرا می‌شوند که داکر در آن‌ در حال اجرا باشد. تمام خصوصیات، ویژگی ها و نیازمندی های اپلیکیشن در یک Dockerfile توصیف می‌شود و در هر پلتفرم و سیستم عاملی توانایی اجرای برنامه وجود دارد.

قابلیت تکثیر در تمام پلتفرم ها باعث می‌شود یک برنامه یا سرویس، فارغ از هرگونه وابستگی ها در هر سیستم عامل و پلتفرمی قابلیت اجرا داشته باشد. در گذشته تیم های توسعه و تیم های عملیات نرم افزار باهم فاصله زیادی داشتند. برنامه نویسان ویژگی های جدید سیستم را توسعه می‌دادند و زمانی که فرآیند توسعه تکمیل می‌شد، کد منبع ورژن جدید را به تیم عملیات که در واقع مدیران سیستم بودند تحویل می‌دادند. این فرآیند باعث بروز مشکلاتی می‌شد، برای مثال مدیران سیستم از نحوه عملکرد برنامه اطلاعی نداشتند و نمی‌توانستند در صورت بروز مشکل در سطح نرم افزار کاری انجام دهند و همچنین برنامه نویسان نیز که خودشان کد را توسعه داده بودند و دید کامل به کد منبع داشتند، نمی‌توانستند برنامه را در محیط عملیاتی اجرا کنند زیرا این کار جزو وظایف مدیران سیستم بود. Docker به دلیل ویژگی کانتینر پلتفرم در هر محیطی قابل اجراست و برنامه نویسان می‌توانند نحوه اجرای کدهای خود در محیط عملیاتی را در یک Dockerfile بنویسند و مدیران سیستم نیز به راحتی توسط Dockerfile برنامه را روی سرورهای عملیاتی اجرا و مدیریت کنند. بخشی از فرهنگ DevOps کاهش فاصله میان تیم های توسعه و عملیات است که در دوره با این فرآیند بیشتر آشنا خواهیم شد.

۳ – ایزوله سازی

تنظیمات و وابستگی هایی که بین کانتینرها وجود دارد باعث هیچگونه تاثیری در تنظیمات سیستم عامل نخواهد شد و این مزیت بزرگی برای کانتینر پلتفرم ها است. با استفاده از ایزوله سازی اپلیکیشن قابلیت اجرای برنامه در هر سیستم عامل و ماشینی فارغ از تنظیمات سیستم عامل مورد نظر وجود دارد. برای مثال می‌توانید اپلیکیشن فرانت اند، بک اند، دیتابیس و وب سرور خود را به صورت کانتینرهای مرتبط باهم اما ایزوله در سطح سیستم عامل اجرا کنید و از ایجاد تداخل بین تنظیمات سیستم عامل و سرویس ها جلوگیری کنید.

۴ – مقیاس پذیری سرویس ها

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

۵ – تحویل بهتر نرم افزار (ادغام و تحویل مداوم – CI/CD)

آشنایی با فرآیند CICD

CI یا Continues Integration (ادغام مداوم) فرآیندی است که توسعه دهندگان می‌توانند توسط یک ورژن کنترل کد مانند Git به صورت مداوم فیچر های مختلف برنامه را توسعه دهند و با کد اصلی به صورت اتوماتیک ادغام کنند.

CD یا (Continues Delivery) (تحویل مداوم) فرآیندی در مهندسی نرم افزار است که در طی آن تیم های نرم افزاری برنامه را در چرخه های زمانی کوتاه تحویل می‌دهند. این بدین معناست که محیط تست و توسعه و عملیاتی برنامه یکسان است و با استفاده از داکر برنامه در هر پلتفرم و سیستم عاملی به صورت ایزوله اجرا می‌شود.

۶ – معماری میکرو سرویس

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

سیستم های نرم افزاری از ساختارهای Monolithic شروع شدند که سرویس های مختلف اپلیکیشن به صورت یکپارچه در یک کد منبع مدیریت می‌شد و پس از مدتی یک کد منبع حجیم و غیرقابل انطعاف وجود داشت که با بروز خطا در یک قسمت کد، عملکرد سایر قسمت های کد منبع دچار مشکل می‌شد. به تدریج با محبوبیت اینترنت و افزایش کاربران و همچنین افزایش ترافیک دریافتی سرویس دهنده های بزرگ،‌ ساختار Monolithic باعث صرف زمان زیادی در Maintain می‌شد و برای مقیاس پذیری هزینه بالایی به وجود می‌آورد. به همین دلیل در سال های اخیر استفاده از معماری های میکرو سرویس و ابری محبوبیت بالایی در سازمان های بزرگ پیدا کرده است به دلیل اینکه در ساختار میکروسرویس، معماری سرویس ها متشکل از سرویس های کوچک هست که فقط یک کار انجام می‌دهند، اما همین یک کار را به خوبی انجام می‌دهند. به زبان ساده کد منبع اپلیکیشن در ساختار Monolithic از یک کد حجیم و غیرقابل انعطاف به بخش های کوچیک تری شکسته می‌شود تا توسعه، مدیریت و مقیاس پذیری برنامه در ساختار میکرو سرویس راحت تر شود و با از کار افتادن یک سرویس، بقیه سرویس ها دچار تداخل و خطا نشوند.

۷ – امنیت

امنیت ذغدغه بزرگی در زمینه IoT است. برنامه هایی که روی کانتینر پلتفرم داکر اجرا می‌شوند امنیت بیشتری نسبت به برنامه هایی که در سطح سیستم عامل خام نصب می‌شوند دارند. اگر یک کانتینر دچار مخاطره ای شود، نمی‌تواند تاثیری رو کانتینرهای مجزای دیگر یا سیستم عامل بگذارد. کانتینرها با استفاده از ایزوله سازی در PID، شبکه و NameSpace ها امنیت بیشتری به ارمغان می‌آورند.

اگر از نگاه یک معمار سیستم به امنیت داکر نگاه کنیم، داکر با استفاده از cgroups و namespace ها می‌تواند منابع مورد نیاز را به کانتینرها اختصاص دهد به صورتی که یک کانتینر نمی‌تواند به Process کانتینرهای دیگر دسترسی داشته باشد و هر کانتینر با استفاده از network stack مربوط به خود، دسترسی های مشخصی برای برقراری ارتباط دارد. البته همانطور که می‌دانید بخش مهمی از امنیت داکر به مهندسی که معماری داکرایز شده را طراحی می‌کند بستگی دارد تا تمام الزامات امنیتی را رعایت کند. 

۸ – داکرهاب (Docker Hub)

معمولا برنامه نویسان برای اجرای برنامه های خود نیاز به Stack خاصی دارند. برای مثال این استک می‌تواند LAMP (Linux,Apache,MySQL,PHP) باشه یا MEAN(Mongo,Express,Angular,Node) یا هر نوع استکی که برای راه اندازی پروژه نیاز است. شما می‌توانید با استفاده از Image های داکر سرویس هایی که نیاز دارید را توصیف و توسط کانتینرها راه اندازی کنید و این استک در هر نوع پلتفرم و سیستم عاملی قابلیت اجرا دارد. همچنین داکرهاب یک منبع رسمی برای دریافت Image های داکر است که کمک شایانی به افزایش سرعت توسعه و تحویل نرم‌افزار می‌کند.

داکر توسط زبان برنامه نویسی GoLang توسعه یافته است.

برای یادگیری داکر می‌توانید در دوره آموزشی داکر برای همه در وبسایت آرکادمی، راهنمای تخصصی برنامه نویسان برای بازار کار شرکت کنید.

محمد بابازاده
متخصص DevOps و توسعه دهنده Python