داکر چیست؟
این روزها صحبت داکر (Docker) در محافل فناوری داغ است و به احتمال زیاد از گوشه و کنار تعریفهای داکر
به گوش شما خورده است. به همین منظور در ادامه قصد داریم با هم ببینیم داکر چیست و چرا اینقدر محبوبیت پیدا کرده است؟
حدود ۵ سال پیش فردی با نام سالامان هایکز (Solomon Hykes)، سازوکاری با نام
داکر را راهاندازی کرد. هدف از این کار تعامل راحتتر با کانتینرها (Containers) بود. این ایده با موفقیت
روبرو شد و در سال ۲۰۱۴ پس از انتشار داکر نسخه ۱.۰ شاهد افزایش محبوبیت آن بودیم.
در نتیجه شرکتها یکی پس از دیگری اپلیکیشنهای تحت سرور را به جای ماشینهای مجازی در
بستر داکر راهاندازی کردند. جالب است بدانید چندین بانک بزرگ در زمانی که داکر هنوز در نسخه ۱.۰ به سر
میبرد از این فناوری کمک گرفتند که این امر برای فناوری که در نسخه اولیه قرار دارد از امنیت بالای داکر حکایت میکند.
این روزها داکر و Moby که به عنوان مجموعه بالاسری داکر شناخته میشود، مخاطبین بسیار زیادی جذب کرده
و بنا به گزارش داکر چیزی بیشتر از ۳.۵ اپلیکیشن در کانتینرها از طریق فناوری داکر قرار دارند و بیشتر از ۳.۷ میلیارد اپلیکیشن از این طریق دانلود شده است.
این موارد باعث شده است بزرگانی مانند ردهت، کنونیکال، اوراکل و مایکروسافت نیز به استفاده
از داکر گرایش پیدا کنند و در حال حاضر تقریباً تمامی بزرگان حاضر در بستر رایانش ابری به نوعی از داکر استفاده میکنند.
پیشنهاد میکنیم اگر با رایانش ابری آشنایی کاملی ندارید، به مقاله رایانش ابری چیست را بخوانید.
داکر (Docker) چیست؟
داکر امکانی را فراهم آورده است که پروسهها و نرمافزارها به صورت مجزا در محیط کاملا ایزولهای
بر روی کرنل لینوکس راهاندازی شود که به این محیط و بستهی ایزوله، کانتینر (Container) میگویند.
کانتینر این امکان را برای برنامه نویسان و توسعه دهندگان اپلیکیشن ها فراهم می کند تا یک برنامه را
با تمام ماژول ها و کامپوننتهای وابسته آن ( مانند کتابخانه ها ، توابع و … ) یکی کرده و به صورت یک
پکیج درآورده تا آن برنامه تولید شده در پلتفرم ها و سیستمهای مختلف بدون مشکل اجرا شود، در
حقیقت بدون نگرانی از تنظیمات و وابستگیهای یک Application خاص در پلتفرم های دیگر، آن برنامه
در هر محیطی اجرا شود. پس اگر برنامه نویسی می کنید حتما استفاده از داکر را به شما توصیه می کنیم.
داکر که در بالا به آن اشاره شد وظیفه مدیریت کانتینرها را به عهده دارد و بیشتر شبیه یک
ماشین مجازی عمل میکند، تفاوت داکر با ماشین مجازی در این است که در VM (یا ماشین مجازی) برای
اجرای اپلیکیشن و برنامه های مختلف که بخواهیم به صورت ایزوله و مجزا از هم کار کنند باید VM های مختلف ساخته شود
که همین موضوع بار پردازشی و هدر رفت منابع سیستمی را روی سرور به همراه دارد.
ولی در Docker روی یک VM خاص که میتواند دارای سیستم عامل ویندوز یا لینوکس باشد، ماژول داکر نصب شده
و سپس روی سرویس داکر، کانتینرهای مختلف حاوی برنامه ها و اپلیکیشن های مختلف نصب و اجرا میشوند
بدون اینکه کانتینرها به هم دسترسی داشته باشند. بدین صورت کانتینرها از هم ایزوله هستند و نیاز ما برای ایجاد چندین VM را مرتفع میسازند.
دلایل محبوبیت داکر چیست؟
اگر با مجازیسازی آشنا باشید حتماً به خوبی میدانید سازوکارهای این کار مانند Hyper-V, KVM و Xen، سختافزار
را به صورت مجازی در اختیار مدیران شبکه قرار میدهند. در نتیجه این سازوکارها نیازمند منابع سختافزاری قوی هستند.
از طرف دیگر کانتینرها از سیستمعاملهای به اشتراکگذاری شده بهره میگیرند. در نتیجه با روش کارآمدتری
طرف هستیم که منابع سیستم را بهینهتر استفاده میکند. بر خلاف مجازیسازی سختافزار، کانتینرها بر
بالای یک اینستنس (Instance) لینوکس قرار میگیرند و فضایی کوچک و جمعوجور را برای اپلیکیشنهای فراهم میکنند.
به لطف این ویژگی چیزی حدود ۴ تا ۶ برابر اینستنس بیشتری نسبت به فناوری Xen یا KVM VM بر روی
یک سختافزار واحد اجرا میشود. از طرف دیگر کانتینرها به توسعه دهندگان کمک میکنند تا کدهای خود
را داخل یک مخزن مشترک قرار دهند. این امر فرآیند کدنویسی را سرعت میبخشد و کدها عملکرد بهتری خواهند داشت.
داکر توسعهدهندگان را قادر میسازد تا اپلیکیشنهای خود را راحت و سریع با حجم کمتری به صورت قابل
حمل و پرتابل در یک کانتینر قرار دهند. این اپلیکیشنهابه صورت مجازی از هر جایی قابل اجرا هستند.
این فرآیند از طریق مجزا کردن کدها در داخل یک کانتینر واحد انجام میشود. کاملاً مشخص است
چنین کاری بهینهسازی و آپدیت برنامه را سادهتر میکند. از آنجایی که شرکتهای فعال در عرصه
فناوری به دنبال راههای بیشتری برای ساخت اپلیکشنهای پرتابل میگردند داکر روزبهروز طرفداران جدیدی پیدا میکند.
در این بین اگر با گیتهاب آشنا باشید حتماً به خوبی میدانید که این بستر شرایط همکاری
برای بهاشتراک گذاشتن کدها میان توسعهدهندگان را فراهم کرده است. از این لحاظ میتوان
داکر را به نوعی شبیه به گیتهاب دانست چرا که مخزن رسمی گیتهاب به شرکتهای تجاری کمک میکند
تا نرمافزارهای خود را بهینهتر کرده و اجرا و مدیریت آنها را ارتقا دهند.
از طرف دیگر کانتینرهای داکر به راحتی در فضای رایانش ابری قرار میگیرد و به نوعی طراحی شده که
تقریباً تمامی اپلیکشنهایی که از متدولوژی دواپس (DevOps) بهره میگیرند با داکر تعامل داشته باشند.
داکر محیطی لوکال را برای توسعه فراهم میکند که این محیط دقیقاً عملکرد یک سرور را در اختیار
توسعهدهندگان قرار میدهد. این امر برای روش توسعه CI/CD کاربرد زیادی دارد. از این طریق میتوان
چندین محیط توسعه را از یک هاست مشخص با یک نرمافزار، سیستمعامل و تنظیمات واحد اجرا کرد.
از طرف دیگر پروژه را میتوان روی چند سرور جدید و مختلف آزمایش کرد و تمامی اعضای گروه بر روی
یک پروژه واحد با تنظیمات همانند قادر به همکاری هستند. این کار توسعهدهندگان را قادر میسازد تا
نسخههای جدید برنامه خود را به سرعت آزمایش کرده و از عملکرد صحیح آن اطمینان خاطر حاصل کنند.
پیشنهاد میکنم اگر نیاز بود، مقاله دواپس چیست را مطالعه کنید.
مروی بر تاریخچه کانتینرها و شکل گیری داکر
اگر از قدیمیهای دنیای کامپیوتر باشید به احتمال زیاد FreeBSD Jail که در اواخر سال ۲۰۰۰ استفاده میشد
را به خاطر دارید. جالب است بدانید سابقه کانتینرها به همان دوران باز میگردد. اوراکل نیز مفهوم خاص خودش
را از کانتینرها داشت که با نام Zones شناخته میشد.
با این حساب میتوان گفت توسعهدهندگان احتمال دارد تاکنون حتی بدون اینکه بدانند از کانتینرها کمک گرفته باشند.
برای نمونه هر زمان که از یکی از سرویسهای گوگل مانند جیمیل و گوگل داکس استفاده میکنید عملاً یک کانتینر جدید برای شما ایجاد شده است.
داکر روی LXC سوار میشود و همانند سایر کانتینرها به فایلهای سیستمی، فضای ذخیرهسازی، پردازنده،
رم و دیگر منابع به صورت اختصاصی دسترسی دارد. به این ترتیب میتوان تفاوت اصلی میان کانتینرها
و ماشینهای مجازی (VM)، را در این دانست که وقتی هایپروایزر (Hypervisor) به صورت انتزاعی تمام
یک سیستم را ایجاد میکند، کانتینرها تنها به صورت انتزاعی کرنل سیستمعامل را ایجاد میکنند.
این امر میلیونها دلار صرفهجویی را برای شرکتهای ارائهدهنده خدمات رایانشابری به دنبال دارد و به
همین دلیل است که غولهای فناوری به سرعت به سمت داکر پیش رفتهاند.
استانداردسازی کانتینرها
داکر امکانات جدیدی در اختیار شرکتها قرار داد که پیش از این شاهد آنها نبودیم.
در این زمینه میتوان به سادهسازی اجرا و استفاده آن اشاره کرد. از طرف دیگر داکر با کانتینرهای
دیگری از کنونیکال، گوگل و ردهت همکاری دارد و در نتیجه استانداردسازی خوبی را برای کانتینرها شاهد هستیم.
داکر همچنان به استاندارد سازی ادامه داده و از آنجایی که عملاً این روزها نمیتوان رقیبی برای داکر متصور شد
میتوان آن را روی هر سیستمعاملی اجرا کرد و در نتیجه استانداردسازی مطلوبی را برای داکر شاهد هستیم.
داکر یک پلتفرم نرم افزاری برای ساخت اپلیکیشنهای مبتنی بر Container است.
محیطهای اجرایی کوچک و سبک که به طور مشترک از هسته سیستم عامل استفاده میکنند
اما در عین حال در یک محیط ایزوله و کاملا جدا از هم قرار دارند. هر چند مفهوم container یا نگهدارنده
از مدتها قبل در حوزه IT مطرح بود اما داکر به عنوان یک پروژه متن باز در سال ۲۰۱۳ معرفی و عرضه شد.
در واقع داکر باعث شد container جان تازه ای بگیرد و دوباره محبوب شود. توسعه نرم افزار به سمت استفاده از Container
و میکرو سرویسها رفت و بعدها به عنوان توسعه ابری یا Cloud-native Development شناخته شد. شاید بعضی از مفاهیم
که تا اینجا گفته شد را نشناسید اما اصلا نگران نباشید چون تمام این موارد را تا انتهای مطلب با هم مرور خواهیم کرد
و در پایان متوجه خواهیم شد که داکر چیست و چه کاربردهایی دارد.
منظور از Container چیست؟
یکی از اهدافی که سیستمهای جدید توسعه نرم افزار دنبال میکنند، این است که برنامهها در یک محیط، اما
به صورت ایزوله و جدا از هم نگهداری شوند. به این ترتیب فعالیت آنها بر روی یکدیگر تاثیر نداشته و جدا از هم کار میکنند.
البته اجرای این فرآیند به خاطر استفاده از پکیج ها، کتابخانهها و دیگر کامپونتتهای نرم افزاری میتواند پیچیده شود.
یکی از راههای پیاده کردن این تکنولوژی استفاده از ماشین مجازی (Virtual Machine) است که برنامهها را
روی یک سخت افزار اما کاملا جدا از هم نگه میدارد. پس در این حالت کامپوننتهای ما تداخل خاصی با هم
نداشته و رقابت برای استفاده از منابع سخت افزاری هم به حداقل میرسد. اما ماشینهای مجازی مشکلاتی هم دارند.
اول از همه اینکه نرم افزارهای سنگینی بوده و سخت افزار نسبتا قدرتمندی میخواهند. همینطور هر برنامه نیاز به
سیستم عامل جداگانه دارد که ممکن است این سیستم عاملها حجمهای
چند گیگابایتی داشته باشند. و اینکه ممکن است نگهداری و بروزرسانی آنها دشوار شود.
بررسی عمیقتر Container به همراه یک مثال
در مقابل Container قرار دارد که میتواند جایگزین مناسبی برای ماشینهای مجازی باشد.
Container محیطهای اجرایی را جدا کرده و هسته سیستم عامل را به اشتراک میگذارد.
حجم آنها معمولا به مگابایت بوده و نسبت به ماشینهای مجازی از منابع کمتری استفاده میکند.
همینطور برخلاف ماشینهای مجازی که برای اجرا نیاز به زمان نسبتا زیادی دارند، Containerها بلافاصله اجرا میشوند.
زمانی که Container را با ماشین مجازی مقایسه میکنیم یعنی با یک شبیه ساز طرف حساب هستیم.
اما دقیقا چه چیزی را شبیه سازی میکنیم؟ برای درک بهتر موضوع بهتر است از یک مثال استفاده کنیم.
فرض کنید در شرکتی مشغول به کار هستید و ناهار خود را هر روز در خانه درست کرده و آن را داخل یک
ظرف به شرکت میبرید تا آنجا میل بفرمایید. دیگر لازم نیست داخل شرکت شروع به پختن غذا کنید چون
احتمالا زمان زیادی را از شما میگیرد. کار Container هم تا حدودی شبیه به این است. شما پروژه
خود را (غذا) داخل Container (ظرف غذا) قرار داده و آن را هر کجا که دوست داشتید (مثلا شرکت) میبرید.
سخن پایانی
همانگونه که در بالا هم اشاره شد داکر اجازه اجرای اپلیکیشنهای بیشتری را نسبت
به سایر تکنولوژیها با یک سختافزار مشخص میدهد و این امر ساخت و مدیریت اپلیکیشنها را سادهتر میکند.
جهت مشاهده دوره های آموزشی بر روی این لینک کلیک نمایید.
جدیدترین اخبار مجموعه فراز نتورک را در این صفحه اجتماعی دنبال کنید.
نویسنده: حانیه گل لاله کرمانی
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.