فهرست محتوا
داکر چیست؟
امروزه توسعهدهندگان برای ساخت اپلیکیشنها و برنامهها به چیزی بیش از کدنویسی نیاز دارند. وجود زبانها، فریمورکها، معماریها و رابطهای گرافیکی مختلف کار توسعه و یا برنامهنویسی را پیچیده میکنند. داکر با قابلیتهای پیشرفته خود باعث سرعت بخشیدن به کار توسعهدهندگان شده و این امکان را به آنها میدهد تا با داشتن آزادیعمل در انتخاب ابزارها، برنامهها و ایجاد محیطهای پیادهسازی مختلف برای هر پروژه برنامهنویسی، خلاقیت و نوآوری خود را تا حدی زیادی افزایش دهند. Docker نرمافزار متنباز (Open Source) و زیرمجموعهای از پروژه موبی (Moby Project) میباشد که اولین بار در سال ۲۰۱۳ معرفی شد و توسعهدهندگان با استفاده از آن میتوانند کانتینرهایی (Container) را ایجاد، مستقر، اجرا و مدیریت کنند. کانتینرها واحدهای استانداردی هستند که کدهای منبع (Source Codes) برنامهها را با ابزارهای سیستم ، پایگاهداده، کتابخانههای برنامهنویسی و متعلقات مرتبط با آنها ترکیب کرده و در مجموع هر چیزی که اپلیکیشنها و برنامهها به آن نیاز دارند را در خود جای میدهند.
کانتینرها به صورت مشترک از هسته یک سیستم عامل استفاده میکنند اما هر یک در محیطی کاملا ایزوله قرار داشته و در کل کار توسعه و پیادهسازی برنامههای توزیعشده (Distributed Application) را آسانتر میکنند. Docker با زبان برنامهنویسی GO نوشته شده و همچنین این امکان را به شما میدهد تا برنامههای خود را قبل از انتشار مورد آزمایش قرار دهید. محبوبیت کانتینرها به دلیل استفاده فزآینده سازمانها و شرکتها از سازوکار توسعه ابری بومی (Native Cloud) و محیطهای چند ابری ترکیبی (Hybrid Multicloud) روزبهروز در حال افزایش است. توسعهدهندگان میتوانند بدون داکر و با استفاده از ابزارهای سیستمعاملهایی مانند لینوکس نیز کانتینر ایجاد کنند اما نرمافزار Docker فرآیند ایجاد کانتینرها را بسیار آسان، سریع و ایمنتر میکند. ما در این مقاله به شکلی دقیق به بررسی تاریخچه داکر، نحوه عملکرد، ویژگیها و اجزای تشکیلدهنده آن خواهیم پرداخت، پس تا انتهای مقاله با ما همراه بمانید.
تاریخچه داکر
سولومون هیکس (Solomon Hykes)، نرمافزار Docker را در سال ۲۰۱۳ در حین کار برای شرکت dotCloud (شرکت فعال در حوزه هاستینگ ابری) ایجاد کرد. داکر در ابتدا به عنوان ابزاری برای آسانتر کردن توسعه و پیادهسازی اپلیکیشنها و برنامهها ساخته شده بود. کانتینرهای داکر مبتنی بر کانتینرهای لینوکس هستند که اولین بار در سال ۲۰۰۸ بر روی این سیستم عامل قرار گرفتند اما کانتینرهای لینوکس به دلیل پیچیدگی چندان مورد استفاده قرار نمیگرفتند. تا اینکه شرکت داکر (Docke Inc) پلتفرمی ساده و کاربرپسند را برای پیادهسازی کانتینرها ایجاد کرد که به سرعت نیز مورد توجه توسعهدهندگان و مدیران سیستم (Sysadmin) قرار گرفت. شرکت Docker در ماه مارس ۲۰۱۴، این فناوری را متنباز کرد که همین امر باعث شد تا داکر در پلتفرم گیتهاب (GitHub) تبدیل به یکی از محبوبترین پروژهها شود و بلافاصله میلیونها دلار سرمایه از طرف شرکتهایی مانند مایکروسافت و IBM برای آن جمعآوری شد. Docker در مدت زمان بسیار کوتاهی، به ابزاری محبوب برای توسعه و استقرار نرمافزارها و اپلیکیشها تبدیل شد تا حدی که تقریباً همه افراد فعال در حوزه DevOps از آن استفاده میکردند. امروزه بیش از ۱۸ میلیون توسعهدهنده از این پلتفرم استفاده میکنند و داکر از این لحاظ رتبه اول را در اختیار دارد.
داکر چگونه کار میکند؟
Docker به طور خلاصه این امکان را به کاربران میدهد تا کانتینرهای مجازی را ایجاد و مدیریت کنند و از طریق یک سیستم عامل به آنها دسترسی داشته باشند. هر کانتینر کتابخانهها، فایلهای پیکربندی، ابزارهای سیستمعامل و هر آنچه که برای توسعه برنامهها و اپلیکیشنها نیاز دارید را در خود جای میدهد و به همین دلیل به آنها سرور استفاده میکنند و با وجود داکر تنها به یک سیستم عامل نیاز دارید که همین موضوع باعث کاهش مصرف منابع سختافزاری میشود. داکر در ابتدا تنها با سیستمعامل لینوکس سازگار بود اما امروزه از اکثر سیستمعاملهای غیرلینوکسی مانند ویندوز و مک نیز پشتیبانی میکند. برخی نسخههای Docker با پلتفرمهایی مانند خدمات تحت وب آمازون (AWS) و Microsoft Azure نیز سازگار هستند. سرویسهای AWS (مانند AWS Fargate، Amazon ECS، Amazon EKS و AWS Batch) پیادهسازی و مدیریت کانتینرهای Docker را تا حدی زیادی آسان میکنند. عکس زیر عملکرد داکر و سرور مجازی یا ماشین مجازی را مقایسه میکند.
میگویند. کانتینرها به صورت مشترک از منابع سیستمعامل وداکر دارای رویکردی استاندارد و یکپارچه برای اجرای کدها میباشد و به مانند یک سیستمعامل برای کانتینرها عمل میکند. شما میتوانید به راحتی داکر را بر روی سرور خود نصب کنید و با استفاده از یکسری دستورات ساده، کانتینرها را مدیریت (ایجاد، راهاندازی، توقف، حذف ، ….) کنید. ظهور فناوری کانتینر با وجود قابلیتهای مجازیسازی (Virtualization) و جداسازی فرآیندها که در هسته لینوکس تعبیه شدهاند، امکانپذیر شد. همانطور که هایپروایزر ماشینهای مجازی (VM) را قادر میسازد تا به صورت مشترک از منابع سختافزاری سرور فیزیکی (CPU، RAM، …) استفاده کنند، ابزارهای داکر نیز این امکان را به کانتینرها و اپلیکیشنهای آنها میدهد تا به صورت اشتراکی به منابع سیستم عامل میزبان دسترسی داشته باشند. داکر نیز بر مبنای مدل کلاینت-سرور (Client-Server) کار میکند که در آن کلاینت داکر (Docker client) از طریق رابط Rest API با Docker Daemon ارتباط برقرار میکند. کلاینت داکر و Docker Daemon یا باید بر روی یک سیستم اجرا شوند و یا از راه دور با هم ارتباط برقرار کنند. فناوری کانتینر در کل شامل سه بخش مختلف میشود:
۱- سازنده (Builder) : ابزار یا مجموعهای از ابزارها است که برای ساخت کانتینرها مورد استفاده قرار میگیرند، مانند Distrobuilder (برای لینوکس) و Dockerfile (برای داکر).
۲- موتور (Engine) : برنامهای است که برای اجرای کانتینرها مورد استفاده قرار میگیرد، مانند Docker daemon.
۳- ارکستراسیون (Orchestration) : فناوری است که برای مدیریت اکثر کانتینرها به کار گرفته میشود، مانند Kubernetes و OKD.
چرا باید از Docker استفاده کنیم؟
انعطافپذیری بالا: شما میتوانید کانتینرهای Docker را بدون ایجاد هیچگونه تغییری، در هر مرکزداده، دسکتاپ ،محیط ابری و یا ترکیبی از محیطهای مختلف اجرا کنید.
ایجاد خودکار کانتینر: داکر میتواند بر اساس کدهای منبع یک برنامه، به صورت خودکار برای آن یک کانتینر ایجاد کند.
امکان استفاده مجدد از کانتینرها: داکر این امکان را به کاربران میدهد تا از کانتینرهایی که قبلا ایجاد کردهاند، مجددا استفاده کنند.
کانتینرهای رایگان و متنباز: شما میتوانید به صورت رایگان به کتابخانههای کانتینرهای داکر دسترسی داشته باشید، کانتینرهایی که توسط سایر توسعهدهندگان از سرتاسر دنیا ایجاد شدهاند.
ایجاد نسخههای مختلف از کانتینرها: شما با استفاده Docker میتوانید نسخههای مختلفی از کانتینرها را ایجاد و مدیریت کنید.
تحویل سریع و منظم برنامهها: Docker با فناوری کانتینرسازی خود مدت زمان توسعه و تحویل برنامهها و اپلکیشنها را بسیار کاهش میدهد. کانتینرها در مجموع باعث یکپارچهسازی فرآیند توسعه میشوند.
امکان به اشتراکگذاری کانتینرها: شما میتوانید کانتینرها و تمام متعلقات آنها (مانند کدها) را به آسانی با دیگران به اشتراک بگذارید.
امتحان برنامهها قبل از انتشار: توسعهدهنگان میتوانند قبل از انتشار برنامههای خود، آنها را در محیطی کاملا حرفهای مورد آزمایش قرار دهند و در صورت وجود هر نوع ایرادی آنها را برطرف کنند.
سبک و مقرونبهصرفه بودن: داکر نسبت به ماشینهای مجازی که از فناوری Hypervisor استفاده میکنند، ارزانتر بوده و از منابع سختافزاری کمتری استفاده میکند و در نتیجه با کمک آن میتوانید هزینههای خود را تا حد زیادی کاهش دهید.
جداسازی برنامهها: با کمک کانتینرهای داکر میتوانید نسخههای مختلف برنامهها را از هم جدا و آنها را به صورت کاملا ایزوله اجرا کنید.
مدیریت آسان: Docker مجموعهای از ابزارهای مورد نیاز برای توسعه برنامهها را به صورت یکجا در خود جای داده است که همین امر مدیریت برنامه و کانتینرها را آسان میکند.
داکر از چه قسمتهای تشکیل شده است؟
دیمون داکر (Docker Daemon)
دیمون داکر سرویسی است که درخواستهای Docker API را میپذیرد و با استفاده از آن میتوان اشیای داکر (Docker Objects) مانند ایمیجها (Images)، کانتینرها، شبکهها (Networks) و والیومها (Volumes) را مدیریت کرد. یک دیمون برای مدیریت سرویسهای Docker میتواند با سایر دیمونها نیز ارتباط برقرار کند. به سروری کهDocker Daemon بر روی آن اجرا میشود نیز میزبان داکر (Docker Host) میگویند.
کلاینت داکر (Docker Client)
کلاینت داکر در واقع روش اصلی تعامل کاربران با نرمافزار Docker است. به عنوان مثال وقتی کاربر دستوری مانند docker run را وارد میکند، کلاینت این دستور را برای اجرا به dockerd (فرآیندی که کانتینرها را مدیریت میکند) ارسال میکند. دستورات docker از رابط Docker API استفاده میکنند.
دسکتاپ داکر (Docker Desktop)
دسکتاپ داکر برنامهای است که میتوانید آن را به آسانی بر روی محیط سیستمعامل مک، ویندوز و یا لینوکس نصب کنید. Docker Desktop این امکان را به شما میدهد تا برنامهها و میکروسرویسهای کانتینری ایجاد کنید و آنها را با دیگران اشتراک بگذارید. دسکتاپ داکر شامل ابزارهایی مانند موتور داکر، دیمون داکر، کلاینت داکر، داکر کامپوز (Docker Compose)، کوبرنیتز (Kubernetes) و کلاینت CLI داکر (Docker CLI Client) میشود. توسعهدهندگان همچنین با استفاده از دسکتاپ داکر میتوانند به داکر هاب دسترسی داشته باشند.
رجیستری داکر (Docker Registry)
رجیستری داکر ابزاری است که ایمیجهای داکر را در خود ذخیره میکند. به عنوان مثال داکر هاب (Docker Hub) بزرگترین Registry داکر است که هر فردی میتواند از آن استفاده کند و نرمافزار Docker نیز به گونهای پیکربندی شده است که افراد میتوانند به راحتی به جستجوی ایمیجهای مورد نظر خود در داکر هاب بپردازند. شما همچنین میتوانید یک رجیستری اختصاصی برای خود ایجاد و با استفاده از دستورات docker pull و docker run ایمیجهای مورد نیاز خود را از رجیستری دریافت کنید. رجیستری داکر یک مخزن متنباز مبتنی بر مجوز آپاچی است.
داکر ایمیج (Docker Image)
ایمیج (تلفظ صحیح انگلیسی آن ایمِج است) فایلی است که حاوی یکسری دستورالعملهای خاص برای ایجاد کانتینر میباشد. یک ایمیج معمولا مبتنی بر ایمیج دیگری بوده اما دارای یکسری قابلیتهای اضافه میباشد. به عنوان مثال، ممکن است ایمیجی بسازید که مبتنی بر یکی از ایمیجهای سیستمعامل اوبونتو (Ubuntu) باشد اما بتواند وبسرور انجین ایکس، برنامههای شما و هر آنچه که برای اجرای آنها نیاز دارید را برای شما راهاندازی کند. برای ساخت Imageهای سفارشی نیز باید در ابتدا یک داکرفایل (Dockerfile) ایجاد کنید. ایمیجهای داکر همچنین این امکان را به شما میدهند تا برنامههای خود را با دیگران به اشتراک بگذارید. افراد در کل ترجیح میدهند به جای ساختن یک ایمیج جدید، از ایمیجهای داکر هاب و یا سایر توسعهدهندگان استفاده کنند. ایمیجها علاوهبراین، حاوی کدهای منبع برنامه و همچنین تمام ابزارها و کتابخانههایی هستند که افراد برای اجرای برنامهها در قالب کانتینر به آنها نیاز دارند. ایمیجها بر خلاف کانتینرها قابلیت اجرایی ندارند و تنها میتوان آنها را خواند (Read-only هستند).
کانتینر (Container)
کانتینر در واقع یک نسخه قابل اجرا از یک ایمیج میباشد و با استفاده از قابلیتهای Docker API یا CLI میتوان کانتینرهایی را ایجاد، حذف، متوقف و جابهجا کرد. شما همچنین میتوانید Containerهای خود را به یک یا چند شبکه مختلف متصل کنید و برای آنها فضای ذخیرهسازی در نظر بگیرید و یا بر اساس وضعیت فعلی آن، ایمیج جدیدی را ایجاد کنید. هر کانتینر در Docker به صورت پیشفرض در محیطی ایزوله قرار دارد.
داکرفایل (Dockerfile)
Dockerfile یک فایل متنی ساده است که تمام دستوراتی که برای ایجاد ایمیج به آن نیاز دارید را در خود جای داده است. داکرفایل باعث میشود تا فرآیند ایجاد ایمیج به صورت خودکار اجرا شود. نوع سیستمعامل، زبانها، متغیرهای محیطی، پورتهای شبکه (Network Ports) و سایر مولفههای مورد نیاز برای اجرای ایمیجها توسط دستورالعملها و قوانین داکرفایل مشخص میشود.
داکر هاب (Docker Hub)
داکر هاب در واقع بزرگترین کتابخانه یا مخزن ایمیجهای داکر میباشد که بیش از ۱۰۰،۰۰۰ ایمیج کانتینری را در خود نگه میدارد. کاربران Docker Hub میتوانند ایمیجهای خود را بدون هیچ مشکلی با سایر توسعهدهندگان به اشتراک بگذارند. البته مخازن ایمیج دیگری نیز وجود دارد که مهمترین آنها گیتهاب (GitHub) میباشد.
سوالات متداول
هایپروایزر چیست؟
هایپروایزر (Hypervisor) نرمافزار مجازیسازی است که با استفاده از آن میتوان ماشینهای مجازی (VM) را راهاندازی و اجرا کرد. هایپروایزر این امکان را فراهم میکند تا ماشینهای مجازی به صورت اشتراکی از منابع سختافزاری کامپیوتر میزبان خود (Host Computer) استفاده کنند.
Kubernetes چیست؟
Kubernetes یا کوبرنتیز که با نام K8s نیز شناخته میشود، سیستم متنبازی است که اولین بار توسط مهندسان گوگل با هدف خودکارسازی فرآیند استقرار، مقیاسبندی و مدیریت برنامههای کانتینری طراحی شد.
آیا داکر رایگان است؟
نرمافزار Docker دارای ۴ پلن Personal، Pro، Team و Business است که هر کدام دارای امکانات مختلفی میباشد. پلن Personal تنها پلن رایگان داکر است.
در تهیه این مقاله از مقالات وبسایتهای معتبری مانند freecodecamp، ibm و phoenixnap استفاده شده است.
2 دیدگاه. Leave new
خیلی ممنون از مقاله ی مفیدتون
وقتی یک اپلیکیشن را داکر کردیم، می توانیم آن را روی هر هاست میزبانی مستقر کنیم یا بایستی روی هاست خاصی باشد؟
سلام کاربر عزیز
این کاملاً بستگی دارد که آیا هاستی که تهیه میکنید از کانتینر ران شده ساپورت میکند یا خیر. میتوانید از شرکتی که قصد تهیه هاست دارید این مورد را پیگیری نمایید.