Docker چیست؟ + مزایا و کاربردهای داکر
داکر Docker پس از معرفی در سال 2014 با سرعت سرسام آوری در حال پیشرفت است به گونه ای که با افزایش آگاهی کاربران و پشتیبانی کمپانی سازنده، این ابزار روز به روز به محبوبیت بیشتری دست پیدا می کند و تنها تا سال 2018، بیش از 3.5 میلیون اپلیکیشن با استفاده از فناوری داکر در کانتینرها قرار گرفته و بالغ بر 37 میلیارد اپلیکیشن کانتینر شده توسط داکر، در این مدت دانلود شده است. امروز در این مقاله از داناپ قصد داریم تکنولوژی داکر را معرفی کرده و کاربردهای آن را نیز با هم مرور کنیم، پس با ما همراه باشید.
Docker چیست؟
داکر ابزاری است که امکان ساخت، مستقر نمودن و مدیریت پکیج های مورد نیاز برای اجرای یک اپلیکیشن را در اختیار توسعه دهندگان قرار می دهد. این پکیج های کم حجم که در داکر به عنوان کانتینر (Container) شناخته می شوند حاوی ابزارهای ضروری نظیر کتابخانه ها، ران تایم، کدها، تنظیمات سیستم و… هستند.
در داکر هر کانتینر بدون اینکه به کرنل و سیستم عامل منحصر بفردی متکی باشد با CPU، مموری، بلاک I/O و منابع شبکه ای مخصوص به خود اعمال می شود. در حقیقت ساز و کار داکر تا حدودی شبیه به ماشین مجازی است، با این تفاوت که هر کدام از روش بخصوصی در اشتراک گذاری منابع استفاده می کنند.
کانتینرها یک سرور را به روش های مختلفی گسترش می دهند. برای مثال شما می توانید با استفاده از داکر چندین متغیر نمونه (Instances) از وب سرور nginx به همراه کدهای staging را همزمان اعمال کنید؛ البته برخلاف ماشین مجازی، کانتینرهای مستقر شده بر منابع سرور Tax اعمال نمی کنند.
مزایای کانتینر در Docker
اولین مزیت کانتینرها این است که از سیستم عامل های مشترک استفاده می کنند. یعنی استفاده از کانتینرها، محدود به یک سیستم عامل خاص نمی شود. دومین مزیت آنها این است که امکان ادغام و توسعه کدهای را در یک محیط مشترک به توسعه دهندگان می دهد. این مسئله امکان اشتراک گذاری کدها بین توسعه دهندگان اپلیکیشن را فراهم کرده و به این ترتیب در وقت و هزینه، صرفه جویی خواهد شد.
کانتینرها همچنین به توسعه دهندگان این امکان را می دهند که کدهای نوشته شده را در یک محیط مجزا، نگهداری کنند. بنابراین تغییر و به روز رسانی کدها آسان تر خواهد بود. همچنین امکان توسعه یک پروژه بزرگ و تقسیم آن به زیرمجموعه های کوچک تر به کمک کانتینرها در چارچوب داکر وجود دارد. با این تقسیم کار، زمان لازم برای تحویل پروژه به صورت بهینه کاهش می یابد.
علاوه بر موارد فوق، استفاده از کانتینرهای داکر در فضای ابری نیز ممکن است. داکر به گونه ای طراحی شده است که برای بسیاری از اپلیکیشن های DevOps قابل استفاده بوده و به تنهایی نیز برای مدیریت محیط های توسعه نرم افزار در فضای ابری، قابل استفاده است.
عملکرد Docker چگونه است؟
داکر با ارائه یک روش استاندارد برای اجرای کد، عمل می کند. در واقع داکر یک سیستم عامل برای مدیریت کانتینرها است. داکر روی سرور نصب شده و دستورات ساده ای را طراحی می کند که از آنها می توانید برای ساخت، راه اندازی و توقف کانتینرها استفاده کنید.
به بیان ساده، یک توسعه دهنده از کلاینت داکر استفاده می کند تا به هاست دستور دهد که تصاویر داکر را به صورت کانتینرها بسازد، اجرا کند و یا توزیع نماید. در ادامه، هاست این دستور را بررسی کرده و کانتینرها را از نظر اجرای راه دور اپلیکیشن، بازرسی می کند. توسعه دهنده در ادامه می تواند از CLI یا همان واسط خط فرمان (command line interface) برای توقف، حذف و یا راه اندازی مجدد یک کانتینر استفاده نماید. با کمک REST API کلیه مراحل فوق از راه دور نیز قابل انجام است.
Docker Image
در حقیقت هر کدام از کانتینرهای داکر از روی یک تصویر ساخته می شوند؛ شما می توانید با دانلود این تصاویر از وبسایت رسمی https://hub.docker.com/ کانتینرهای مورد نظر خود را بسازید. با استفاده از یک تصویر قادر خواهید بود چندین کانتینر بسازید، برای مثال با استفاده از آخرین تصاویر nginx می توانید برای موارد زیر یک وب سرور کانتینر مستقر کنید :
- توسعه عملیات وب (DevOps)
- تستینگ
- تولید
- وب اپلیکیشن
Docker files
فایل داکر Dockerfile یک فایل متنی است که دستورات مورد نیاز برای پیاده سازی تصاویر داکر را درون خود دارد. وقتی برای بار اول فایل داکر نوشته می شود، اپراتور (Administrator) می تواند با استفاده از دستور docker build و طبق Command های موجود در فایل تصاویر داکر را بسازد. شما می توانید با استفاده از دستورات و اطلاعات موجود در docker build، از پایداری و ثبات فرآیند توسعه اطمینان حاصل کنید. فایل های داکر با استفاده از دستورات زیر قادر به ساخت تصاویر هستند :
- ADD : فایل ها را از یک منبع در Host درون فایل کانتینر کپی می کند.
- CMD : یک دستور به خصوص را در کانتینر اجرا می کند.
- ENTRYPOINT : هر بار که کانتینر از یک تصویر ساخته می شود، یک اپلیکیشن پیشفرض را برای آن در نظر می گیرد.
- ENV : متغیرهای محیطی را پیاده سازی می کند.
- EXPOSE : یک پورت بخصوص برای شبکه سازی بین کانتینر و دنیای بیرونی مشخص می کند.
- FROM : یک تصویر پایه برای آغاز فرآیند توسعه تعیین می کند.
- MAINTAINER : نام کامل و آدرس ایمیل سازنده عکس را ضمیمه می کند.
- RUN : بخشنامه اجرایی مرکزی برای Dockerfile است.
- USER : نام کاربری اجرا کننده کانتینر را تعیین می کند.
- VOLUME : امکان دسترسی از کانتینر به یک دایرکتوری در ماشین Host را در اختیار کاربر می گذارد.
- WORKDIR : یک path برای اجرای دستور CMD ایجاد می کند.
شما نباید از همه دستورات استفاده کنید، برای مثال در جعبه کد زیر نمونه ای از طرز کار فایل های داکر با استفاده از دستورات MAINTAINER، FROM و RUN را مشاهده خواهید کرد :
1 2 3 |
MAINTAINER NAME EMAIL FROM ubuntu:latest RUN apt-get -y update && apt-get -y upgrade && apt-get install -y build-essential |
Docker Swarm
داکر این امکان را به شما می دهد تا به راحتی با سرورهای دیگر Join شده و یک کلاستر (Cluster) به نام Docker Swarm را تشکیل دهید. به محض ساختن سوارم منیجر (Swarm Manager) یا لیدر (Leader) و سپس پیوست کردن Node ها به آن قادر خواهید بود تا کانتینرها را توسعه دهید؛ لیدر به صورت اتوماتیک Task های مورد نیاز را به Cluster اضافه یا حذف خواهد کرد و شرایطی تثبیت کننده برای سرورها ایجاد می نماید.
نود (node) یک Instance از موتور Docker است که در Swarm شرکت می نماید. سوارم منیجر با ایجاد تعادل در میزان بار (Load) ورودی، سرویس های موجود در سوارم را به نمایش خواهد گذاشت، علاوه بر این داکر سوارم در موارد زیر نیز نقش خواهد داشت :
- بررسی سلامتی کانتینرها
- مجموعه ای از کانتینرها را از یک تصویر بخصوص راه اندازی می کند.
- با توجه به میزان بار (Load)، تعداد کانتینرها را کم یا زیاد می کند.
- بروزرسانی های رولینگ (Rolling Updates) کانتینر را انجام می دهد.
- قابلیت های افزونگی (Redundancy) و failover را برای ما به ارمغان می آورد.
- فرآیند تکرار (Iteration) را به عنوان تغییر خواسته کاربر (Demands Change) به کانتینر اضافه یا حذف می کند.
کاربردهای Docker
1- استفاده موثر از منابع :
اپلیکیشن هایی که بر پایه کانتینرهای داکر توسعه یافته اند به نسبت ماشین مجازی فضای کمتری از مموری را اشغال می کنند. در حقیقت این اپلیکیشن ها به سرعت راه اندازی و متوقف شده و به صورت متراکم در Host جای می گیرند. این موضوع باعث می شود که توسعه دهندگان زمان کمتری را صرف کنند، بنابراین در صرف هزینه نیز صرفه جویی می شود.
البته صرف جویی در هزینه بستگی به نوع اپلیکیشن مورد نظر و فشردگی منابع آن دارد، اما به هر ترتیب استفاده از کانتینرهای داکر به نسبت ماشین مجازی بازدهی بیشتری دارد. علاوه بر این با استفاده از داکر می توان حجم عظیمی از پروژه را با تعداد کمتری سیستم عامل به پایان رساند، به همین دلیل نیاز به پرداخت هزینه برای لایسنس نرم افزارهای متعدد نخواهید داشت.
2- سرعت بخشی به سیکل تحویل نرم افزار :
نرم افزاهای سازمانی باید به سرعت هرچه تمام تر پاسخگوی تغییر حالت باشند؛ بدین معنی که در وهله اول باید متناسب با نیازهای کاربر باشند و در وهله دوم با آپدیت های مستمر و دریافت امکانات جدید، نیازهای کمپانی را به طور کامل رفع نمایند.
بروزرسانی و تولید نسخه های جدید یک نرم افزار با استفاده از کانتینرهای داکر امری بسیار آسان محسوب می شود که به سرعت می توان آن را اعمال کرد. البته در مواقعی نیاز است که به نسخه های قبلی یک نرم افزار مراجعه شود که این هم به لطف داکر در کمترین زمان ممکن قابل اجراست. علاوه بر این ابزار Docker این امکان را توسعه دهندگان می دهد تا از استراتژی هایی نظیر توسعه blue/green برای تولید اپلیکیشن استفاده نمایند.
3- قابلیت انتقال اپلیکیشن :
مکانی که شما می خواهید اپلیکیشن را در معرض استفاده بگذارید بسیار مهم است؛ برای مثال می توان برای حفظ امنیت بیشتر نرم افزار را در محیطی همراه با فایروال اجرا کرد یا اینکه آن را براي دسترسی عموم در فضای ابری قرار داد. البته به دلیل اینکه داکر تمام فاکتورهای لازم برای اجرای یک اپلیکیشن را کپسوله سازی می کند، امکان جابجایی اپلیکیشن در محیط های متفاوت بسیار آسان خواهد شد. در حقیقت هرگونه Host (لپ تاپ فرد توسعه دهنده یا فضای ابری) که ران تایم داکر بر روی آن نصب شده باشد را می توان به عنوان میزبان کانتینرهای داکر در نظر گرفت.
4- معماری میکرو سرویس :
کانتینرهای کم حجم، قابل حمل و جامع داکر باعث می شود که اپلیکیشن های مدرنی تولید کند. بدین گونه که دیگر به راه حل ها و نرم افزارهای قدیمی نیاز نخواهید داشت. کانتینرهای داکر همچنین باعث آسان شدن الگوهای نرم افزاری میکرو سرویس می شود. میکرو سرویس الگویی است که در آن مولفه های یک اپلیکیشن به صورت آزادانه با یکدیگر پیوند می خورند. میکروسرویس ها در حقیقت با استفاده از روش های سنتی، اپلیکیشن های یکپارچه را به سرویس های مجزا تبدیل کرده و سپس با توجه به مقتضیات یک کسب و کار آنها را بر اساس تیم ها و جداول زمانی جداگانه طبقه بندی و مقیاس پذیر خواهد نمود.
البته کانتینرهای داکر، میکروسرویس ها را پیاده سازی نمی کنند بلکه مناسب ترین گزینه برای این الگو به شمار می روند که باعث افزایش سرعت در فرآیند توسعه اپلیکیشن می شود.
5- صرفه جویی در زمان و هزینه :
استفاده از داکر به شما این امکان را می دهد که کدها را سریعتر ارسال کنید، عملیات برنامه را استانداردسازی کنید، کد را به صورت یکپارچه درآورید و با بهینه سازی استفاده از منابع، هزینه خود را کاهش دهید. کاربران داکر به صورت متوسط 7 برابر سریعتر از سایر کاربران، نرم افزار تحویل می دهند. اپلیکیشن های کانتینرسازی شده به کمک داکر امکان توسعه، شناسایی خطاها و رفع آنها را فراهم می کنند. در نهایت کانتینرهای داکر اجرای کدهای بیشتر را در یک سرور امکان پذیر ساخته و در این صورت هزینه توسعه یک نرم افزار یا اپلیکیشن به شدت کاهش خواهد یافت.
مطالب زیر را حتما مطالعه کنید
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
سلام و درود
من یه پکیج اموزشی تهیه کردم و بسیار راضی بودم
برای من بسیار عالی بود
سایت بسیار خوبی است
ارزوی موفقیت روز افزون را برای همه عزیزان در داناپ را دارم
با سپاس
سلام کاربر گرامی
خوشحال هستیم که دوره های ما توانسته به رشد و پیشرفت شما کمک کنه. لطفا نظر خود را در مورد دوره مربوطه در همان صفحه و با دادن امتیاز به دوره اعلام بفرمایید.