داکر چیست و چه کاربردهایی دارد؟

دسته بندی: برنامه نویسی
سطح مقاله: متوسط
زمان مطالعه: 11 دقیقه
۰۳ آبان ۱۳۹۸
فارسی
داکر
English
Docker

داکر یک پلتفرم نرم افزاری برای ساخت اپلیکیشن های مبتنی بر 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 به برنامه نویس کمک می کند که پروژه خود را با تمام بخش هایی که دارد (مثل کتابخانه ها، وابستگی ها و غیره) به صورت یک پکیج دربیاورد. به لطف این تکنیک، برنامه نویس خیالش راحت است که برنامه او می تواند در سیستم های دیگر بدون نیاز به تنظیمات خاص یا ابزارهای جانبی اجرا شود. داکر را شبیه به ماشین مجازی در نظر بگیرید، با این تفاوت که بازدهی بسیار بالاتری دارد. اگر قبلا تجربه استفاده از Docker را داشته‌اید، آن را با ما و کاربران سون لرن به اشتراک بگذارید.

نویسنده
زندگی کردن در لحظه انقدر سخت است که بیشتر مردم ترجیح می‌دهند در حسرت گذشته و رویای آینده باقی بمانند. به نظر من رسیدن به خوشحالی فرمول پیچیده ای ندارد و فقط باید به تک بیت زیر پایبند بود: سعدیا دی رفت و فردا همچنان موجود نیست در میان این و آن ، فرصت شمار امروز را

نظرات کاربران

اولین دیدگاه این پست رو تو بنویس !

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :

 
گزارش مشکل