داکر چیست و چه کاربردهایی دارد؟
داکر یک پلتفرم نرم افزاری برای ساخت اپلیکیشنهای مبتنی بر Container است. محیطهای اجرایی کوچک و سبک که به طور مشترک از هسته سیستم عامل استفاده میکنند اما در عین حال در یک محیط ایزوله و کاملا جدا از هم قرار دارند. هر چند مفهوم container یا نگهدارنده از مدتها قبل در حوزه IT مطرح بود اما داکر به عنوان یک پروژه متن باز در سال ۲۰۱۳ معرفی و عرضه شد. در واقع داکر باعث شد container جان تازه ای بگیرد و دوباره محبوب شود. توسعه نرم افزار به سمت استفاده از Container و میکرو سرویسها رفت و بعدها به عنوان توسعه ابری یا Cloud-native Development شناخته شد. شاید بعضی از مفاهیم که تا اینجا گفته شد را نشناسید اما اصلا نگران نباشید چون تمام این موارد را تا انتهای مطلب با هم مرور خواهیم کرد و در پایان متوجه خواهیم شد که داکر چیست و چه کاربردهایی دارد.
منظور از Container چیست؟
یکی از اهدافی که سیستمهای جدید توسعه نرم افزار دنبال میکنند، این است که برنامهها در یک محیط، اما به صورت ایزوله و جدا از هم نگهداری شوند. به این ترتیب فعالیت آنها بر روی یکدیگر تاثیر نداشته و جدا از هم کار میکنند. البته اجرای این فرآیند به خاطر استفاده از پکیج ها، کتابخانهها و دیگر کامپونتتهای نرم افزاری میتواند پیچیده شود.
یکی از راههای پیاده کردن این تکنولوژی استفاده از ماشین مجازی (Virtual Machine) است که برنامهها را روی یک سخت افزار اما کاملا جدا از هم نگه میدارد. پس در این حالت کامپوننتهای ما تداخل خاصی با هم نداشته و رقابت برای استفاده از منابع سخت افزاری هم به حداقل میرسد. اما ماشینهای مجازی مشکلاتی هم دارند. اول از همه اینکه نرم افزارهای سنگینی بوده و سخت افزار نسبتا قدرتمندی میخواهند. همینطور هر برنامه نیاز به سیستم عامل جداگانه دارد که ممکن است این سیستم عاملها حجمهای چند گیگابایتی داشته باشند. و اینکه ممکن است نگهداری و بروزرسانی آنها دشوار شود.
بررسی عمیقتر Container به همراه یک مثال
در مقابل Container قرار دارد که میتواند جایگزین مناسبی برای ماشینهای مجازی باشد. Container محیطهای اجرایی را جدا کرده و هسته سیستم عامل را به اشتراک میگذارد. حجم آنها معمولا به مگابایت بوده و نسبت به ماشینهای مجازی از منابع کمتری استفاده میکند. همینطور برخلاف ماشینهای مجازی که برای اجرا نیاز به زمان نسبتا زیادی دارند، Containerها بلافاصله اجرا میشوند.
زمانی که Container را با ماشین مجازی مقایسه میکنیم یعنی با یک شبیه ساز طرف حساب هستیم. اما دقیقا چه چیزی را شبیه سازی میکنیم؟ برای درک بهتر موضوع بهتر است از یک مثال استفاده کنیم. فرض کنید در شرکتی مشغول به کار هستید و ناهار خود را هر روز در خانه درست کرده و آن را داخل یک ظرف به شرکت میبرید تا آنجا میل بفرمایید. دیگر لازم نیست داخل شرکت شروع به پختن غذا کنید چون احتمالا زمان زیادی را از شما میگیرد. کار Container هم تا حدودی شبیه به این است. شما پروژه خود را (غذا) داخل Container (ظرف غذا) قرار داده و آن را هر کجا که دوست داشتید (مثلا شرکت) میبرید.
Docker چیست؟
داکر یک پروژه متن باز است که اجازه میدهد Container یا برنامههای مبتنی بر Container بسازید. با اینکه داکر در شروع کار برای لینوکس ساخته شد اما امروزه به خوبی در ویندوز و MacOS هم اجرا میشود. برای ساخت یک برنامه با داکر باید از کامپوننتهای مختلفی استفاده کنیم. حالا برای درک بهتر مفهوم داکر بهتر است سراغ این کامپوننتها رفته و آنها را بررسی کنیم:
Dockerfile
هر Container داکر با یک فایل داکر شروع به کار میکند. Dockerfile یک فایل متنی بوده که داخل آن با یک سینتکس ساده و قابل فهم دستورالعملهای ساخت Docker Image قرار داده شده است (کمی جلوتر این مفهوم را بررسی خواهیم کرد) این فایل اطلاعات بسیار مهمی را در برمی گیرد که برای راه اندازی داکر استفاده از آنها ضروری است. در واقع Dockerfile مشخص میکند که پشت Container ما چه سیستم عاملی قرار بگیرد، همینطور از چه زبان ها، متغیرهای محلی، پورتهای شبکه یا غیره استفاده شود. و مهمتر از همه اینکه مشخص کند Container ما بعد از اینکه واقعا اجرا شد قرار است چه کاری انجام دهد.
Docker image
در واقع زمانی که کار نوشتن Dockerfile را تمام کردید، یک قابلیت به اسم Docker Build را فراخوانی میکنید که وظیفه دارد یک Image بر اساس محتویات Dockerfile شما بسازد. Dockerfile شامل یک سری دستورالعمل برای ساختن یک Image است، در حالی که Docker Image یک فایل قابل حمل است که شامل یک سری دستورالعمل بوده که مشخص میکند Container کدام کامپوننتهای نرم افزاری را اجرا کند و اینکه چطور آنها اجرا شوند. به احتمال زیاد Dockerfile بخواهد تعدادی فایل را از مخزنهای مختلف (Repository) دانلود کند و اینجا باید به طور واضح مشخص کنید که کدام نسخهها دریافت شوند. همینطور Image ساخته شده استاتیک میباشد، یعنی یک بار ساختن آن کافی بوده و نیازی به تغییر آن ندارید. همانطور که از اسم آنها میتوانید حدس بزنید، Image یک تصویر از سیستم عامل اصلی میباشد.
Docker run
قابلیت Docker run در واقع یک دستور است که Container را راه اندازی میکند. میدانیم که هر Container یک instance یا نمونه از Image است و ماهیت Container به صورت موقتی میباشد. اما با این حال میتوان آنها را متوقف (Stop) یا راه اندازی مجدد (Restart) کرد. هر Image میتواند تعداد زیادی Container داشته باشد (تا زمانی که هر کدام نام منحصر به فردی داشته باشند)
Docker Hub
هر چند ساخت Containerها کار راحتی است، اما لزومی ندارد برای هر Image از اول Container بسازید. Docker Hub یک مخزن Saas برای به اشتراک گذاری و مدیریت Containerها است. در آنجا میتوانید Imageهای رسمی داکر که معمولا به صورت متن باز هستند را پیدا کنید. همینطور عموم مردم هم پروژههای خود را به این Repository اضافه میکنند.
Docker Engine
مغز متفکر و هسته اصلی داکر به حساب میآید. یک تکنولوژی کلاینت/سرور که Containerها را ساخته و آنها را اجرا میکند. در واقع اگر کسی درباره داکر صحبت کرده و منظورش شرکت داکر یا پروژه داکر نباشد، یعنی دارد درباره Docker Engine حرف میزند. این موتور در دو نسخه Enterprise یا Community عرضه میشود. نسخه Community به طور متن باز و کاملا رایگان قابل استفاده است در حالی که نسخه Enterprise یک سری قابلیتهای اضافه داشته و سالانه برای هر Node نزدیک به 1500 دلار هزینه دارد. برای آشنایی بیشتر با مفهوم کلاینت و مدل کلاینت/سرور پیشنهاد میکنیم مطلب زیر را مطالعه بفرمایید:بیشتر بخوانید:کلاینت چیست و چند نوع کلاینت وجود دارد؟
داکر چطور کار میکند؟
تمام این نکات را گفتیم تا به این بخش رسیده و بفهمیم داکر چیست و چطور کار میکند. داکر را میتوانیم یک مجازی ساز در نظر بگیریم، اما نه به شکلی که ماشینهای مجازی کار میکنند. این سرویس به شما کمک میکند یک محیط را به چند بخش تقسیم کرده و و در هر بخش یک برنامه مجزا اجرا کنید. برای درک بهتر موضوع یک لحظه داکر را شبیه به ماشین مجازی در نظر بگیرید، میدانیم که ماشینهای مجازی با Hypervisor عملیات شبیه سازی را انجام میدهند اما در داکر این لایه حذف شده و ما مستقیم با هسته سیستم عامل کار میکنیم. این کار بازدهی سیستم را بسیار بالا میبرد.
ما به جای اینکه چند سیستم عامل را داخل یک شبیه ساز نصب کنیم یک بار داکر را نصب میکنیم. این فرآیند را شبیه به نصب یک نرم افزار عادی در نظر بگیرید. بعد داکر محیطهای مستقلی به نام Container ایجاد میکند که هر Container میتواند شامل بستههای نرم افزاری مختلفی باشد. حالا میتوانید داخل داکر Containerهای مختلفی ایجاد کنید و پروژههای خود را به طور مستقل روی هر کدام اجرا نمایید.
نتیجه گیری
داکر یک ابزار اوپن سورس برای طراحی و ساخت برنامهها به کمک Container است. Container به برنامه نویس کمک میکند که پروژه خود را با تمام بخش هایی که دارد (مثل کتابخانه ها، وابستگیها و غیره) به صورت یک پکیج دربیاورد. به لطف این تکنیک، برنامه نویس خیالش راحت است که برنامه او میتواند در سیستمهای دیگر بدون نیاز به تنظیمات خاص یا ابزارهای جانبی اجرا شود. داکر را شبیه به ماشین مجازی در نظر بگیرید، با این تفاوت که بازدهی بسیار بالاتری دارد.