داکر (Docker) پلتفرم پرطرفدار این روزهای حوزه مهندسی نرمافزار و بهترین ابزار برای توسعهدهندگان، مهندسان نرمافزار و مدیران سیستم است. برنامهای که توسعه، پیادهسازی و اجرای سریع برنامهها را بدون تاثیرپذیری از منابع سیستم ممکن میکند.
شاید برای شما هم اتفاق افتاده باشد که برنامهای را روی سیستم خود (مثلاً برنامهای با زبان برنامهنویسی پایتون ۳.۹ نوشتهاید) و بخواهید آن را روی سیستم دیگری با پایتون ۲.۷ اجرا کنید. طبیعتاً برای اجرای برنامه با مشکل روبهرو خواهید شد، زیرا باتوجهبه تفاوت نسخهها باید کامپوننتها و کتابخانههای آن نسخه را نصب کنید.
این کار، به انرژی و زمان زیادی برای پیکربندی و نصب زیرساختهای نرمافزاری نیاز دارد. درحالیکه با استفاده از داکر، امکان اجرای برنامههای کانتینربندیشده را به آسانی فراهم میشود. پلتفرم Docker یکی از بهترین تکنولوژیهای روبهرشد در حوزهی Devops است. برای آشنایی با داکر چیست و چگونه کار میکند و مزایای بیشمار آن، با ما همراه باشید تا شما را با این تکنولوژی کاربردی بیشتر آشنا کنیم.
تاریخچه داکر؛ داستان یک پلتفرم موفق
Docker پلتفرم نرمافزاری برای ساخت و اجرای کانتینرها است. مفهوم کانتینرها قبل از پیدایش داکرها وجود داشت و روی سیستمعاملهای لینوکس و یونیکس استفاده میشدند. معرفی داکر محبوبیت کانتینرها را دو چندان کرد و با استفاده از آن توسعهدهندگان میتوانند « یک بار نرمافزار خود را بسازند و بدون نیاز به پیکربندیهای اضافی در هر مکانی استفاده کنند.». داکر برای اولین بار در سال ۲۰۰۸ با همکاری مهندسان شرکت داتکلود «DotCloud» توسط سالامان هایکز (Solomon hykes) و همکارانش در پاریس توسعه پیدا کرد.
ابزاری که امروزه با نام داکر شناخته میشود، قبل از اینکه روی ایجاد فضایی ایزوله برای اجرای کانتینرها متمرکز شود، کار خود را بر مبنای پلتفرم بهعنوان سرویس (PaaS) شروع کرد.
هایکز (Hykes) برای اولین بار Docker را در ۱۳۹۲ خورشیدی (مارس ۲۰۱۳ میلادی) در کنفرانس PyCon معرفی کرد. او توضیح میدهد، دلیل ایجاد داکر، نیاز توسعهدهندگان به زیربنایی مثل پلتفرم DotCloud برای اجرای ساده و سریع برنامهها است.
بخشی از صحبتهای هایکز در کنفرانس PyCon
«ما همیشه فکر میکردیم بتوانیم ابزاری را برای حل این مشکل ارائه دهیم و بگوییم بله این محصول ما است. حال میتوانید کانتینرهای لینوکس را با استفاده از داکر اجرا کنید و امکان انجام تمام فعالیتهای نرمافزاری بهوسیلهی پلتفرم ما فراهم میشود. پس وقت آن رسیده بروید و برنامه خود را به آسانی اجرا کنید.».
بدین ترتیب، داکر متولد شد و بهسرعت مورد توجه توسعهدهندگان قرار گرفت. غولهای فناوری مثل مایکروسافت (Microsoft)، آیبیام (IBM) ردهت (Red Hat)، اوراکل (Oracle) و … از این پلتفرم استقبال کردند. بنابراین زمینه جذب سرمایهگذاران و علاقهمندان به توسعه داکر بیشتر شد و اولین نسخه آن در سال ۲۰۱۴ با نام Docker Engine 1.0 منتشر شد.
روند رشد و پیشرفت داکر
در سال ۲۰۱۶ داکر، ارکستراتور (Swarm Orchestration) را با نسخهی داکر Engine 1.12 ترکیب کرد. هدف از انجام اینکار، ایجاد کسبوکارهای کانتینری بهعنوان یک سرویس (Service) بود. در نهایت، با ظهور کوبرنتیز (Kubernetes) تمام اهداف و برنامههای تعریف شده از بین رفت.
در سال ۲۰۱۷، «Docker Enterprise» معرفی شد.برای پشتیبانی از نسخه تجاری نرمافزار مدیریت کانتینر و حمایت از نسخه متنباز آن، شرکت نرمافزاری «Mirantis» تجارت «Docker Enterprise» را در نوامبر ۲۰۱۹ خریداری کرد. روند رشد داکر ادامهدار شد و نسخههای داکر (Docker Desktop) و داکر هاب (Docker Hub) از آخرین نمونههای این ابزار کاربردی است.
داکر چیست؟
به زبان ساده، داکر (Docker) زیر مجموعهای از پروژه موبی (Moby) و پلتفرم نرمافزاری برای ساخت، اجرا و مدیریت روی سرورها و فضای ابری است. با استفاده از داکر میتوانید بدون نیاز به نصب سیستمعامل یا زیرساختهای نرمافزاری، کامپوننت و کتابخانهها (Code, Runtime, System Tools, System Libraries و تنظیمات)، برنامهها را در فضایی ایزوله اجرا کنید. این پلتفرم مانند یک سیستم مجازی عمل کرده و فضایی را برای اجرای چندین برنامه با نسخههای متفاوت و مستقل از هم فراهم میکند. بهطورکلی داکر میتواند نرمافزارها و متعلقات موردنیاز آنها را در فضایی بهنام کانتینر روی سیستمعاملهای ویندوز، لینوکس و مک اجرا کند. این پلتفرم بستههای بستهبندی شدهی کانتینر را ایجاد میکند که قابل حمل و قابل اجرا در هر محیطی هستند.
داکر مبتنیبر چه فناوری است؟
داکر با زبان برنامهنویسی GO توسعه پیدا کرده است و از ویژگیهای هسته لینوکس برای ارائه عملکرد مشابه آن استفاده میکند. این پلتفرم تکنولوژی بهنام «Namespaces» برای ارائه فضای کاری ایزولهای بهنام کانتینر (Container) دارد. با اجرای هر کانتینر، فضاهای نام (Namespaces) برای هر کانتینر ایجاد میشوند. هر فضای نام، لایهای جداگانه برای اجرای کانتینرها میسازد. تمامی کانتینرها شامل مجموعهای از زیرساختهای مورد نیاز برای اجرای برنامههای مختلف هستند. مثلاً شما میتوانید روی یک داکر، ۱۰ کانتینر ( تعداد دلخواه) نصب و در هر کدام برنامه مدنظر خود را اجرا کنید. هر Container در فضای نام (Namespaces) مستقل با دسترسی محدود به آن اجرا میشود.
چرا فناوری Docker مورد نیاز است؟
شاید به این فکر کنید که چرا به داکر نیاز است و چگونه میتواند برای ما مفید باشد؟ در ادامه دلایل اهمیت استفاده از Docker را توضیح میدهیم.
داکر چه مشکلی را حل می کند؟
اجرای ۳ برنامه پایتون (Python) با ورژنهای متفاوت روی یک سرور یا سیستم شخصی امکانپذیر نیست. با فرض استفاده از کتابخانهها و کامپوننتهای مختلف، باید برای هر کدام نسخه نرمافزاری و نیازمندیهای متفاوتی را نصب کنید. انجام این کار بهطور همزمان امکانپذیر نیست. راهحل مناسب برای این مسئله، استفاده از داکر است. با استفاده از این پلتفرم میتوانید چندین فضای نام مستقل برای کانتینرها ایجاد و برنامههای خود را در آنها اجرا کنید. در ادامه درباره این موضوع بیشتر توضیح خواهیم داد. در واقع، این پلتفرم با مجازیسازی در سطح سیستمعامل، تولید بستههای نرمافزاری را تسهیل میبخشد.
داکر چگونه کار میکند؟
پلتفرمهای داکر، کانتینرها را اجرا میکنند. فناوری Container از طریق سیستمعامل در دسترس است: هر کانتینر خدمات (Services) سیستمعامل را بهطور کامل با برنامهها به اشتراک میگذارد. یک کانتینر مجموعهای از سرویس برنامهها را در قالب بستهبندی ارائه میکند. این بستهبندی میتواند شامل تمام کتابخانهها، فایلهای پیکربندی، وابستگیها و سایر بخشها و پارامترهای لازم برای اجرای برنامهها باشد.
هر داکر تصویر یا همان Image دارد. تصاویر داکر (Docker Images) حاوی تمام وابستگیهای مورد نیاز برای اجرای کدها در کانتینرها هستند. بنابراین کانتینرها میتوانند در تمام محیطهای داکر بدون نیاز به تغییر سیستمعامل اجرا شوند. این پلتفرم با جداسازی منابع در هسته سیستمعامل، چندین کانتینر را در یک سیستمعامل مستقل اجرا میکند. این کار با عملکرد ماشینهای مجازی متفاوت است که از منابع یک سیستمعامل برای اجرای چندین برنامه اجرایی استفاده میکنند.
Docker ابتدا تنها برای کار روی سیستمعامل لینوکس بهینهسازی شده بود، اما برای ارائه خدمات بیشتر، روی سیستمعاملهای غیر لینوکس مثل ویندوز (Windows)، مک (Mac) و … نیز قابل استفاده است. نسخه های مختلف این پلتفرم برای انواع خدمات مثل وب آمازون (AWS) و Microsoft Azure در دسترس هستند.
معماری داکر چیست؟
پلتفرم محبوب داکر روی معماری کلاینت-سرور (Client-Server) بنا نهاده شده است. کلاینت با Docker Daemon ارتباط برقرار میکند. این ابزار وظیفهی ساخت، اجرا و توزیع کانتینرهای Docker را برعهده دارد. کلاینت و دیمون داکر را میتوان بهصورت مشترک روی یک سیستمعامل اجرا کرد. همچنین امکان اتصال از راه دور کلاینتها به دیمون داکرها وجود دارد. با REST API و بهوسیله ی یک رابط شبکه یا سوکتهای یونیکس، میتوانند کلاینت و Docker Daemon با هم مکاتبه کنند. Docker Compose را میتوان نمونهای دیگر از کلاینتها معرفی کرد. این ابزار امکان کار با برنامههای تشکیلشده از چندین کانتینر را میدهد. عکس زیر معماری داکر را نشان میدهد: (فارسیسازی کنیم).
در ادامه هر کدام از اجزای داکر را مختصراً توضیح میدهیم:
Docker Daemon .1 چیست؟
داکر دیمون روی درخواستهای Docker API نظارت میکند و وظیفهی مدیریت اشیای داکر مثل تصاویر (Images)، کانتینر (Containers)، شبکه (Networks) و Volumeها را برعهده دارد. یک Daemon میتواند برای مدیریت سرویسهای Docker با دیمونهای دیگر ارتباط برقرار کند. همچنین این ابزار به Dockerd نیز معروف است.
2. Docker Client چیست؟
Docker Client، مسیری را برای برقراری ارتباط داکر با کلاینتها فراهم میکند. هنگام استفاده از دستورات «docker run»، کلاینت مسئول ارسال دستورات اجرایی به Docker Daemon است. دیمون بعد از دریافت دستورات آنها را اجرا میکند. دستورات داکر برای اجراشدن از Docker API استفاده میکنند. از مزایای داکر کلاینت میتوان به توانایی برقراری ارتباط با بیش از یک میلیون دیمون اشاره کرد
3. Docker Desktop چیست؟
Docker Desktop برنامهای کاربردی با قابلیت نصب در سیستمعاملهای مختلف مثل ویندوز، لینوکس و مک است. این پلتفرم امکان ساخت و اشتراکگذاری میکرو سرویسها و برنامههای کاربردی کانتینری را برای کاربران فراهم میکند. داکر دسکتاپ شامل مجموعهای از کلاینت (Docker Client)، دیمون (Docker Daemon)، کامپوز (Docker Compose)، کوبرنتیز (Kubernetes) و Credential Helper و Docker Content Trust است.
4. Docker Registries چیست؟
رجیستریهای داکر وظیفهی ذخیره تصاویر (Images) را برعهده دارند. Docker Hub رجیستری عمومی قابل استفاده برای تمامی افراد است. Docker بهطور پیشفرض برای جستجوی Images از داکر هاب استفاده میکند. توجه داشته باشید، در صورت نیاز میتوانید رجیستری خصوصی خود را ایجاد کنید.
با استفاده از دستورات docker pull یا docker run، تصاویر (Images) از رجیستریهای پیکربندی شما خارج میشوند. با دستور docker نیز میتوانید تصاویر را به رجیستری خود انتقال دهید.
5. Docker Objects چیست؟
با استفاده از داکر، اشیاء مثل تصاویر، کانتینر، شبکه، پلاگینها و سایر موارد مشابه ایجاد میشوند. در ادامه گذر کوتاهی به برخی از این اشیاء خواهیم داشت:
منظور از تصاویر (Images) در داکر چیست؟
تصاویر (Image)، قالبهای فقط خواندنی با دستورالعملهایی برای ایجاد و اجرای Containerها هستند. این ابزارها بیشتر اوقات مبتنیبر یکدیگر با برخی سفارشیسازیهای اضافی هستند. برای مثال، یک Image ایجاد شده میتواند مبتنیبر Image Ubuntu بوده و نیازمندیهای لازم برای نصب وبسرور آپاچی و اپلیکیشنها را نیز داشته باشد. Imageها امکان پیکربندی جزئیات مورد نیاز برای اجرای برنامهها را نیز فراهم میکنند. شما میتوانید تصاویر خود را ایجاد یا از تصاویر ایجاد و منتشرشدهی دیگران استفاده کنید. برای ساخت Image شخصی، یک Dockerfile با سینتکس ساده (بههمراه تعریف مراحل تولید و اجرای تصاویر) بسازید.
با اجرای هر دستورالعمل در Dockerfile، لایهای در Image ایجاد میشود. با تغییر Dockerfile و ساخت دوباره Image، تنها لایههای تغییر کرده دوباره ساخته میشوند. این همان دلیلی است که باعث میشود تصاویر نسبتبه تکنولوژیهای مجازیسازی کمحجم، کوچکتر و سریعتر باشند
منظور از کانتینر (Containers) در داکر چیست؟
کانتینر نمونهای قابل اجرا از Image است، درحالیکه تصاویر داکر فایلهای فقط خواندنی هستند.
با استفاده از Docker API یا CLI میتوانید کانتینر را ایجاد، شروع، متوقف، حرکت یا حذف کنید. امکان اتصال Container به یک یا چند شبکه یا فضای ذخیرهسازی وجود دارد. همچنین میتوانید براساس شرایط Image فعلی، یک تصویر جدید ایجاد کنید.
کانتینرهای ایزوله بهطور پیشفرض از ماشین میزبان و سایر کانتینرها جدا میشوند. میتوانید تعیین کنید، میزان منابع شبکه، ذخیرهسازی و زیرسیستمهای یک کانتینر تا چه اندازه از سایر کانتینرها و ماشین میزبان جدا شده و بهطور مستقل کار کند.
هر Container با پیکربندیهای اعمالشده در هنگام ایجاد و شروع و تصویر (Image) خود تعریف میشود. با حذف هر کانتینر، تمامی تغییرات در وضعیت آن نیز از بین میرود. امکان تعامل کاربران با این بستهبندیها فراهم است و مدیران میتوانند تنظیمات و شرایط کانتینرها را با استفاده از دستورات Docker تنظیم کنند.
تفاوت بین داکر و ماشین مجازی چیست؟
برای اجرای برنامههای جداگانه در ماشین مجازی (VM)َ، باید از ماشینهای مجازی مختلفی استفاده شود. این کار به منابع پردازشی زیادی نیاز دارد و هزینههای استفاده را نیز افزایش میدهد. از سوی دیگر، میتوان داکر را در ماشینهای مجازی، سرورها و حتی سیستمهای شخصی با سیستمعامل ویندوز، لینوکس و مک نصب کرد. با راهاندازی کانتینرهای مستقل از هم، امکان اجرای برنامههای مختلف فراهم میشود. در این شرایط، اگر بخواهیم از یک برنامه برای تشخیص لود بالانس دو نمونه تست داشته باشیم. نیازی به استفاده از دو ماشین مجازی مجزا نیست. بلکه میتوانیم داکر را روی یک ماشین مجازی نصب کرده و با نصب دو کانتینر در آن، هر کدام از برنامهها را بهطور مستقل اجرا کنیم.
دلایل محبوبیت داکر چیست؟
مزایای بیشمار Docker این پلتفرم را میان توسعهدهندگان و مهندسان نرمافزار بسیار محبوب کرده است. بهطوری که پیشبینی میشود، در آیندهای نزدیک تبدیل به یکی از ضروریترین پلتفرمهای مورد استفاده در حوزه تکنولوژی بهخصوص مهندسی نرمافزار و دواپس تبدیل شود. در ادامه دربارهی مزایای داکر بیشتر صحبت میکنیم.
۱. برخورداری از محیط ایزوله و پایدار
با داکر توسعهدهندگان نرمافزار میتوانند محیطهای ایزوله و پایدار ایجاد کنند. منظور از محیط ایزوله، فضای مستقل سفارشیسازی شده برای ساخت و اجرای برنامهها بدون نیاز به زیرساخت و تنظیمات بهخصوصی است. محیطهای ایزولهی Docker پایدار هستند و با ساخت، توسعه و اجرای سریع برنامهها میتوانید در زمان و هزینههای خود صرفهجویی کنید.
۲. هزینه مناسب و استقرار سریع
با کاهش چشمگیر زمان توسعه و اجرای برنامهها میتوانید زمان و هزینههای صرفشده برای فراهمکردن زیرساختها را ذخیره کنید. اگر بخواهید یک برنامه را با نسخه نرمافزاری و منابع سیستم خود بنویسید، بیشتر اوقات خروجی نهایی در سیستمهای دیگر بهدلیل تغییر نسخه، آمادهسازی و راهاندازی دچار مشکل میشود. درحالیکه میتوانید برنامههای خود را در پکیجهای داکر ساخته و تنها در چند ثانیه آن بسته را روی سیستمهای دیگر بدون نیاز به هرگونه زیرساخت اجرا کنید.
۳. قابلیت جابهجایی و سازگاری در هر مکان
کانتینرهای داکر میتوانند در قالب بستهبندیهای مستقل خروجی گرفته و در تمامی پلتفرمها بدون نیاز به زیرساختهای مورد نیاز اجرا شوند. فرض کنید شما برنامه Node.JS نسخه ۵.۰.۰ و من برنامه Node.JS نسخه ۱۶.۰.۰ دارم. اگر بخواهید این دو برنامه را در یک پلتفرم اجرا کنید، بیشک مشکلاتی مثل ناسازگاری نسخه برنامهها را تجربه خواهید کرد. با استفاده از داکر این مشکلات حل میشود. شما میتوانید برنامه خود را فارغ از متعلقات و نسخههای مختلف آن در هر محیطی اجرا کنید.
۴. قابلیت خودکارسازی (اتوماسیون)
با تامین زیرساخت و پیکربندیهای مورد نیاز برای ساخت و اجرای برنامهها، زمان توسعه نرمافزارها سریعتر میشود. از سوی دیگر، تصاویر داکر کم حجم هستند و انتقال و استقرار آنها برای Container برنامههای جدید بسیار سادهتر و سریعتر انجام خواهد شد. همچنین تعمیر و نگهداری برنامههای کانتینربندی شده بهدلیل استقلال کانتینرها از یکدیگر سادهتر است.
۵. انعطافپذیری
فرض کنید میخواهید یک اپلیکیشن اندروید اجرا کنید و در فرایند اجرای آن نیاز به ارتقای محصول احساس میشود. برای انجام این کار در داکر تنها باید کانتینر جدید ایجاد و تغییرات برنامه را در آن تست کنید. بنابراین با اعمال تغییرات، کانتینرهای جدید بهوجود میآیند که ویژگیهای جدیدی از محصول را به اشتراک میگذارند. بدین ترتیب میتوانید ایمیجهای جدید مستقر در چندین سرور را تست و اجرا کنید.
با این پلتفرم امکان ساخت و اجرای یک پروژه روی چندین سرور فراهم میشود. مهندسان نرمافزار میتوانند بهطور همزمان روی یک پروژه کار کنند. بنابراین آنها میتوانند نسخه نهایی برنامههایشان را با انعطافپذیری بالا آزمایش کرده و از عملکرد درست آن مطمئن شوند.
۶. مقیاسپذیری
در کانتینرهای داکر میتوانید برنامههایتان را بهطور مستقل از هم بخشبندی کنید و تغییرات مورد نیاز اعم از بهروزرسانی، حذف یا ایجاد تغییرات را روی آن بخش مربوطه بدون تاثیرگذاری در بخشهای دیگر اعمال کنید. با کانتینرها میتوان حجم کاری بسیار زیادی را از طریق مصرف منابع محدود و کم مدیریت کرد.
۷. بهینهبودن
در مجازیسازی با نرمافزارهایی همچون Hyper-VM, KVM و Xen، سختافزار بهشکل مجازی در اختیار کاربران قرار میگیرد و میتوانند از منابع مجازیسازی شده بهرهمند شوند. بنابراین این سختافزارها برای انجام فرایندهای مختلف باید سرعت و قدرت بالایی داشته باشند. درحالی که داکرها از سیستمهای اشتراکگذاری شده استفاده میکنند، بنابراین این روش کارآمدتر است و از منابع بهینهتر استفاده میکند.
برعکس مجازیسازی، Containerها با قرارگیری بهعنوان یک نمونه (Instance) در سیستمعامل، فضایی محدود را برای اجرای برنامهها در اختیار میگیرند. بههمین دلیل چیزی بین ۲ تا ۶ برابر بهرهوری بیشتری نسبتبه سایر سختافزارها دارد.
همچنین برنامهنویسان و توسعهدهندگان میتوانند کدهای خود را در مخزن مشترکی قرار دهند. به همین دلیل عملکرد بهتری در ساخت و اجرا تجربه میکنند.
مثالی از این فرایند، گیتهاب است که کاربران میتوانند به مخزن کدها دسترسی پیدا کرده و از آنها استفاده کنند.
۸. چابکی
با قرارگیری کانتینرهای داکر در محیط رایانش ابری، تمامی برنامههای دارای متدولوژی دواپس (DevOps) میتوانند با داکر تعامل برقرار کنند. این پلتفرم با ایجاد فضای لوکال برای توسعهدهندگان، عملکرد یک سرور را برایشان شبیهسازی میکند. از این روش میتوان برای توسعه «CI/CD» استفاده کرد و بهوسیلهی یک سرویس میزبانی، چندين محیط توسعه را با یک نرمافزار و سیستمعامل اجرا کرد.
۹. استانداردسازی کانتینرها
داکر فرایند اجرای برنامهها را با تهیه زیرساختهای لازم در زمان کم سادهتر کرده است. از طرفی این پلتفرم با غولهای تکنولوژی مثل گوگل و ردهت برای استاندارسازی کانتینرها همکاری میکند. بدین ترتیب شاهد عملکرد خوبی در فرایند ساخت، توسعه و اجرای برنامهها خواهیم بود. داکر با قابلیت انعطافپذیری بالا برای استفاده در سیستمعاملهای مختلف مثل لینوکس، ویندوز و مک در این زمینه بیرقیب شده است.
۱۰. نظارت و مدیریت کانتینرها
همه زیرساختهای حوزه فناوری به نظارت و مدیریت نیاز دارند. این موضوع برای داکرها نیز وجود دارد. بنابراین برای انجام فرایند درست ساخت، توسعه، تست و اجرای برنامهها در کانتینرها باید مانیتورینگ و مدیریت روی آنها اعمال شود. درغیراینصورت، اجرا برنامهها توسط سرور مشخص نمیشود. در این راستا، برنامههای دواپس انتخاب خوبی برای نظارت بر کانتینرهای داکر هستند. اما توجه داشته باشید ابزارهای دواپس برای مانیتورینگ بهینهسازی نشدهاند و باید از ابزارهای مانیتورینگ و مدیریت رایانش ابری استفاده کنید.
کانتینر (Container) چیست؟
استفاده از محیط ایزوله و مستقل برای توسعه برنامهها یکی از اهداف بزرگ حوزه مهندسی نرمافزار است. با این روش فرایند تولید و توسعه برنامهها روی هم تاثیر نمیگذارند و همهچیز بهصورت مستقل انجام میشود. یکی از روشهای استفاده از چنین فناوری، ماشین مجازی است. با این تفاوت که در آن برنامهها روی یک سختافزار و جدا از هم ذخیره میشوند. از این رو، برنامهها با یکدیگر دچار تداخل نمیشوند و برای استفاده از منابع باهم رقابتی نخواهند داشت.
از طرف دیگر، کانتینرها وجود دارند. این برنامهها به بستهبندی یا ظرف هم معروف هستند. در عملکرد این برنامهها محیط اجرا و سیستمعامل با یکدیگر به اشتراک گذاشته میشود. مزیت این روش حجم کم و سرعت اجرای بالا است. در این صورت برنامهها میتوانند بهصورت مستقل با بهرهمندی از منابع پر قدرت اجرا شوند.
کانتینر به ۳ بخش زیر تقسیم میشود:
- سازنده: فناوری ساخت کانتینرها را نشان میدهد.
- موتور: فناوری مورد استفاده برای اجرای کانتینرها است.
- تنظیم و ارکستراسیون: برای پیکربندی و مدیریت کانتینرها استفاده میشود.
تفاوت بین کانتینر و ماشین مجازی
تفاوت کانتینر با ماشین مجازی را در مدت زمان بوت شدن و مصرف منابع میتوان بررسی کرد. برای بوتشدن VM چند دقیقه زمان لازم است، درصورتیکه Dockerها در چند ثانیه بوت میشوند. همچنین، VM برای اجرا به بوت کامل سیستمعامل نیاز دارد، به همین دلیل از نظر مصرف حافظه بهینه نیست. در حالی که داکر برای اجرای کانتینرها به مجازیسازی نیاز ندارد و عملکرد بهینهتری از این لحاظ دارد.
مزایای کانتینرهای داکر چیست؟
از نظر فنی مهمترین مزیت داکر را میتوان اجرای سریع برنامههای کانتینربندیشده معرفی کرد. کانتینرهای Docker میتوانند انواع فرمتهای نرمافزاری را بدون نیاز به پیکربندی و تنظیمات خاصی اجرا کنند. برنامههای ساخته شده با معماری میکروسرویس در کانتینرهای داکر بهترین عملکرد را برجای میگذارند. زیرا توسعهدهندگان با استقرار هر میکرو سرویس در کانتینرهای جداگانه میتوانند با استفاده از ادغام ابزارهای ارکستراسیون (Orchestration)، مانند Docker Swarm و Kubernetes و یک سرویس مش (Service Mesh)، مانند Istio یا VMware Tanzu، برنامهها را ایجاد کنند. یکی دیگر از مزایای کانتینرهای داکر قابلیت جابهجایی است. آنها میتوانند بدون توجه به سرور و محیط ابری با حداقل تغییرات پیکربندی به محیطهای جدید انتقال پیدا کنند. در نهایت کارایی داکر کانتینرها نسبتبه ماشینهای مجازی، آنها را به ابزاری پرطرفدار برای کاهش هزینه تیمهای مهندسی و توسعه نرمافزار معرفی کرد.
نحوه عملکرد داکر چیست؟
داکر را میتوان یک لایه میانی بین بسته نرمافزاری و سیستمعامل بهشمار آورد. با این کار لایه نرمافزار از یکدیگر جدا میشوند. در سیستمعامل لینوکس قابلیت جداسازی نرمافزار و برنامهها در محیطهای ایزوله بهصورت مستقل فراهم است. داکر از این قابلیت برای اجرای بستههای کانتینری استفاده میکند. برای مثال داکر فضاهای نام و قابلیتهایی مثل «cgroups» برای ایجاد تعادل در هسته سیستمعامل و بستههای نرمافزاری دارد.
انواع اجزای Docker
موتور داکر
«Docker Engine»، موتور داکر است که در دو نسخه Enterprise و Community عرضه شده است. شما میتوانید از نسخه «Community» بهصورت رایگان و متنباز استفاده کنید. درحالی که برای استفاده از نسخه «Community» باید مبلغ حدوداً ۱۵۰۰ دلار ماهانه برای استفاده از ویژگیهای اضافی پرداخت کنید. موتور داکر، هسته اصلی داکر را تشکیل میدهد که بر مبنای سرور-کلاینت تشکیل شده است.
داکر هاب
داکر هاب مخزنی از جنس «SaaS» برای مدیریت و اشتراکگذاری Containerها است. با این قسمت امکان پیداکردن تصاویر داکر بهصورت منبعباز فراهم است. اگرچه ایجاد کانتینرها پیچیدگی زیادی ندارد اما بیشتر اوقات نیازی به ساخت تصاویر جدید نیست. در داکر هاب میتوانید انواع تصاویر متنباز مورد نیاز خود را جستوجو و پیدا کنید. بیشتر مردم برای اشتراکگذاری و مدیریت کانتینرها از Docker Hub استفاده میکنند.
Docker run
«Docker run»، فایل اجرایی کانتینرها در داکر است. کانتینرها نمونهای از تصاویر هستند و ماهیت موقتی دارند. اما میتوان آنها را متوقف یا ریاستارت کرد. هر تصویر میتواند چندین کانتینر در خود جای دهد، تا وقتی که یک نام منحصربهفرد به آن اختصاص داده شود.
جمعبندی
داکرها برای سهولت فرایند ساخت، توسعه و اجرای برنامهها به وجود آمدهاند. با استفاده از این ابزارها سرعت زمان اجرا و پیکربندی، جابهجایی و استفاده در سیستمهای مختلف بهطور قابل توجهی ساده میشود. در این مطلب مفهوم داکر و قابلیتهای آن را معرفی کردیم. در صورت هرگونه سوال درباره این موضوع میتوانید در بخش نظرات سوالات خود را با ما در میان بگذارید.
بدون دیدگاه