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