داکر چیست؟ عملکرد Docker به چه صورت است؟
در این مطلب میخواهیم یکی از محصولاتی که به صورت تخصصی در حوزه مجازی سازی سیستم عامل فعالیت دارد، را معرفی و بررسی کنیم. نام این محصول داکر (Docker) است که نوعی پلتفرم متن باز به شمار میرود. برای اینکه دقیقا بدانید داکر چیست و چگونه کار میکند تا پایان این مطلب همراه ما باشید.
داکر چیست و چه کاربردی دارد؟
داکر (Docker) یک پلتفرم متن باز است که بر مبنای سیستم عامل لینوکس راهاندازی شده است. در پاسخ به سوال داکر چیست، خیلی ساده میتوان گفت، ابزاری است که میتواند فرایند ایجاد، پیاده سازی و اجرای برنامهها را با استفاده از Container ها بسیار ساده کند.
پاسخ دیگر به سوال داکر چیست، میتواند این باشد که Docker، نوعی ماشین مجازی است و این امکان را برای برنامهها فراهم میکند تا از یک Kernel واحد لینوکس استفاده کرده و از امکاناتی بهره مند شوند که در سیستم عامل میزبان ارائه نشده است. به این ترتیب میتوانند به صورت مستقل از پیش نیازها و امکانات مازاد بهره برداری کنند. این موضوع باعث میشود سرعت و عملکرد برنامه بهبود قابل ملاحظهای پیدا کند و حجم آن نیز کاهش یابد.
کانتینر (Container) چیست؟
نگهداری برنامهها در محیطی ایزوله و به صورت مستقل، از اهداف سیستمهای جدید توسعه نرم افزار است. به این ترتیب فعالیت آنها بر روی یکدیگر تاثیری نداشته و کاملا مستقل از هم کار میکنند. یکی از راههای پیاده کردن این تکنولوژی استفاده از ماشین مجازی (Virtual Machine) است که برنامهها را روی یک سخت افزار اما جدا از هم نگهداری میکند. در این حالت component ها با هم تداخل نداشته و رقابت برای استفاده از منابع سخت افزاری به حداقل میرسد.
اما کانتینر چیست؟ در مقابل ماشینهای مجازی، کانتینرها( Container ) قرار دارند، آنها میتوانند جایگزین مناسبی برای ماشینهای مجازی باشند. کانتینرها محیطهای اجرایی را جدا کرده و هسته سیستم عامل را به اشتراک میگذارد. کانتینرها نسبت به ماشینهای مجازی از منابع کمتری استفاده میکنند و همچنین خیلی سریع قابلیت اجرا پیدا میکنند.
میتوان کانتینرها را به 3 بخش تقسیم کرد که عبارتند از:
سازنده (Builder):
فناوری مورد استفاده برای ساخت کانتینر
موتور (Engine):
فناوری مورد استفاده برای راهاندازی کانتینر
تنظیم (Orchestration):
فناوری مورد استفاده برای تنظیمات و مدیریت کانتینر
کانتینر داکر چیست؟
هر چند مفهوم container از مدتها قبل در حوزه IT مطرح بوده، اما معرفی و ارائه داکر به عنوان یک پروژه متن باز باعث شد استفاده از container ها دوباره فراگیر شود.
کانتینر (Container) این امکان را برای توسعه دهندگان فراهم میکند تا بسته کاملی از برنامههای خود همراه تمامی بخشهای مورد نیاز آن ایجاد کرده و آن را در قالب یک بسته واحد ارسال کنند.
با وجود کانتینرها، توسعه دهندگان میتوانند اطمینان داشته باشند که برنامه داکر در هر ماشین، با سیستم عامل لینوکس بدون توجه به تنظیمات سفارشی قابل اجرا و استفاده است. ماشین جدید میتواند تنظیماتی متفاوت با ماشینی که برنامه روی آن طراحی شده، داشته باشد.
برای ساخت یک برنامه داکر و همچنین کار با داکر باید از کامپوننتهای مختلف استفاده کنیم. در ادامه این کامپوننتها را معرفی و بررسی میکنیم.
Dockerfile
هر کانتینر داکر به وسیله یک فایل داکر شروع به کار میکند. در پاسخ به سوال داکر فایل چیست، به سادگی میتوان گفت Dockerfile ها در واقع فایلهای تنظیمات داکر هستند که با استفاده از آنها میتوانیم به داکر بگوییم که یک container را چگونه بالا بیاورد و تنظیم کند. به عنوان مثال، چه سرویسهایی را فعال کند و چطور به آنها اجازه دسترسی دهد. در واقع داکر فایل مشخص میکند که پشت Container ما چه سیستم عاملی قرار بگیرد، همینطور از چه زبان ها، متغیرهای محلی، پورتهای شبکه یا غیره استفاده شود. و مهمتر از همه اینکه مشخص کند Container ما بعد از اینکه واقعا اجرا شد قرار است چه کاری انجام دهد.
در جدول زیر کلمات کلیدی مورد استفاده در داکرفایل را توضیح داده ایم.
توضیح |
دستور مورد استفاده |
مشخص کردن image مورد استفاده در Container |
FROM |
سازنده و توصیحاتContainer |
MAINTAINER |
اجرا کردن دستور هنگام ساخته شدن Container |
RUN |
اجرا کردن یک دستور بعد از ساخته شدن Container |
CMD |
اجرا کردن یک دستور بعد از ساخته شدن Container |
ENTERYPOINT |
اضافه کردن متادیتا به Container |
LABEL |
مشخص کردن پورت هایی که Container بعد بالا آمدن اجازه دسترسی به آن را می دهد |
EXPOSE |
اضافه کردن متغییرهای محلی به Container |
ENV |
اضافه یا کپی یا لینک کردن فایل یا دایرکتوری به Container |
ADD |
اضافه یا کپی فایل یا دایرکتوری به Container بدون لینک کردن |
COPY |
اضافه کردن یک mount point در ماشین میزبان یا Containerهای دیگر |
VOLUME |
ست کردن یک user یا UID در Container |
USER |
ست کردن دایرکتوری اجرایی در Container |
WORKDIR |
Docker image
زمانی که کار نوشتن داکر فایل تمام شد، یک قابلیت به اسم Docker Build را فراخوانی میکنید که وظیفه دارد یک Image بر اساس محتویات Dockerfile شما بسازد. Docker Image یک فایل قابل حمل و شامل یک سری دستورالعمل است که مشخص میکند Container کدام کامپوننتهای نرم افزاری را اجرا کند و اینکه چطور آن را اجرا کند.
Docker run
ویژگی Docker run در واقع نوعی دستور است که کانتینر را راهاندازی میکند. هر Container یک نمونه یا مثال از Image است و ماهیت کانتینر به صورت موقتی است. با این حال میتوان آنها را متوقف کرد یا مجددا راهاندازی نمود. هر Image به شرط وجود نام منحصر به فرد، میتواند تعداد زیادی کانتینر داشته باشد.
Docker Hub
قابلیت Docker Hub یک مخزن Saas برای مدیریت و به اشتراک گذاری کانتینرها است. در این قسمت میتوانید تصاویر رسمی داکر که معمولا به صورت متن باز هستند را پیدا کنید.
Docker Engine
این بخش، هسته اصلی داکر به حساب میآید. در واقع وقتی کسی درباره داکر صحبت میکند، دارد درباره Docker Engine حرف میزند. این ویژگی در دو نسخه Enterprise و Community ارائه میشود. نسخه Community به صورت متن باز و کاملا رایگان است، در حالی که نسخه Enterprise، با ویژگیها و قابلیتهای اضافه، برای هر Node سالانه نزدیک به 1500 دلار هزینه دارد.
مکانیزم عملکرد داکر چیست؟
تا اینجا دانستیم داکر چیست و کانتینرها به چه شکل عمل میکنند، در این بخش قصد داریم مکانیزم عملکرد داکر را بررسی کنیم.
داکر (Docker) یک لایه واسطه بین سیستم عامل اصلی و بسته نرم افزاری ایجاد میکند. در واقع با استفاده از این لایه، نرم افزارها را از یکدیگر تفکیک میکند. در سیستم عامل لینوکس قابلیتهایی برای تفکیک و ایزوله کردن منابع وجود دارد که هم هسته سیستم عامل و هم گروهها و منابع سخت افزاری و نرم افزاری سیستم عامل را به صورت ایزوله و تفکیک شده در اختیار نرم افزارها قرار میدهد، که سیستم داکر نیز از آنها استفاده میکند.
به عنوان مثال، قابلیتهایی مانند cgroups و kernel namespaces از جمله مواردی هستند که Docker از آنها استفاده میکند.
و در انتها…
همان طور که بیان کردیم، داکر یک ابزار اپن سورس با بازدهی بسیار بالا برای طراحی و ساخت برنامهها به کمک کانتینر است. Container به یک برنامه نویس کمک میکند تا پروژه خود را با تمام بخشهای آن به صورت یک بسته درآورد. او با وجود این تکنیک، میتواند مطمئن باشد که پروژه اش در سیستمهای دیگر بدون نیاز به ابزارها یا تنظیمات خاص، اجرا میشود.
در این مطلب سعی کردیم برای سوال داکر چیست، پاسخ مناسبی پیدا کنیم. همچنین مکانیزم عملکرد این سیستم را نیز مورد بررسی و مطالعه قرار دهیم.
خیلی رفتید توی بحر توضیحات ریز تخصصی و اون سادگی و روان بودن متن از بین رفته.
به زبون خیلی ساده بیاید بگید داکر چه نوع مجازی سازی و در چه بستری و به چه شکلی ارائه میده.
این تعاریف کتابی و داکیومنتی رو توی سایت خودشم که میشه خوند. برای مردم عادی به زبون کوچه بازاری توضیح بدید.
به جزئیات فنی چیکار داریم ما. انگار دارید جزوه می دید فردا هم میخواید از روش امتحان بگرید؟ پس فردا هم ما همشو فراموش کنیم؟ اینارو تو دانشگاه برای ما کردن عادت و عرف، عملگرایی و مفید بودن از یادمون رفته.
کاملا موافق صحبت شما هستم.
مردم عادی و چه داکر بازی، خوب بود توضیحات
بیخیال دوسال گذشته اما اینقدر مقاله طولانی نبود که کسی بخواد اذیت بشه اونجایی رو که لازم داری بخون استفاده کن مطلب مورد نظرت نبود برو یه سایت دیگه جستجو کن به همین سادگی … عملگرا و عرف و اینا اصلا ربطی به این موضوع نداشت موفق باشید.
خیلی شفاف و ساده و روون توضیح دادند.
عالی بود
بسیار توضیحات روان و قابل فهمی بود ممنونم.
به نظرم عالی بود سپاسگزارم
awli
من که نفهمیدم چی شد،خیلی سخت بود!!کاش یک مثالی و آموزشی از نحوه استفاده ازش میگذاشتید و منوهاش رو توضیح میدادی ممنون.
من که نفهمیدم چی شد!!خیلی سخت شد،کاش یک مثالی از نحوه استفاده ازش و کار با منوهاش میگزاشتید ممنون
نه
به نظرم خیلی مطلب رو سخت توضیح دادید.
بسیار ساده و روان بود. ممنون
خیلی عالی ممنونم از توضیحاتتون
خیلی ممنون زحمت کشیدین از توضیحات کاربردی تون.
یاد بگیریم که زحمت دیگران رو کوچک نشمریم 🙂
ممنون مفید و قابل استفاده بود
عالی
واقعا مطلب مفیدی بود – من قبل از اینکه توضیحات فارسی داکر و مطالعه کنم، با شناخت قبلی که از داکر و کانتینرها داشتم با کمک API یک ربات تریدر Cryptocurrency با زبان پایتون تو محیط داکر پیادهسازی و اجرا کردم. ۲۴/۷ درحال اجراست (البته قبل از استارت Backtest) انجام شد. و اینکه داکر کمک خوبی تو این زمینه بهم کرد البته به طرق دیگهای میشد ربات رو Run کرد اما داکر بهترین و درستترین راه هست. (در حال حاضر)
ممنون توضیحات خیلی روان و خلاصه و ساده بود اما کامل نبود. بالاخره بعد از خوندن متن یه مثالی یا حداقل یه لینکی به اموزش قدم به قدمی چیزی، نگارنده انتهای مطلب رو خورده و تمومش نکرده. اگر مطلب رو بخوایم کامل در نظر بگیریم باید گفت خیلی دیگه زیاده از حد تئوری و دانشگاهی هست.
سلام کامل و قابل فهم نبود. من برنامه نویس نیستم و برام جای سوال موند که آیا این یک برنامه اس؟ منظور از ماشین مجازی چیه؟ برای ویندوز امکان پذیر نیست؟ برای اجرای برنامه های تدوین مناسبه؟
سلام
دوست عزیز داکر برنامه نیست، یک متد برنامه نویسی است که میتواند فرآیند ایجاد، پیاده سازی و اجرای برنامهها را با کانتینر سادهتر کند.
ماشین مجازی یک دستگاه مجازی و نرمافزاری شبیه به یک کامپیوتر است که امکان اجرای سیستمعاملها و اپلیکیشنهای مختلف روی یک دستگاه فیزیکی مثل کامپیوتر را فراهم میکند.
برای منی که کلی سرکلاس مثال ازش دیدم و کلی باهاش کار کردم ولی عمیق نمیدونستم چرا فلان کار رو میکنیم اصلا عالی بود عالیییی
ممنون از توجه شما
ممنون از توجه شما دوست عزیز
ما ایرونی ها همیشه فقط دنبال عیب و ایراد گرفتن هستیم ..من خودم به نوبه خودم بسیار تشکر میکنم از این که وقت گرانبهاتون رو برای مطلب ارزشمندی همچون این آموزش گذاشتید..خدا خیرتون بده .موفق باشید خواهرم
سلام. ممنونم از لطف شما
خوب و مفید بود . پاینده باشید
کلیات و مفهوم داکر خوب توضیح داده شده است.
سلام، ممنون از توجه شما
سلام خیلی ممنون:)
سلام. ممنون از توجه شما
عالی بود