داکر نوعی پلتفرم برای ساخت برنامههای کاربردی یا اپلیکیشنهای مبتنی بر container است در واقع داکر امکانی ایجاد کرده که پروسهها و نرمافزارها بتوانند به شکل جدا از هم در محیط کاملا ایزولهای بر روی کرنل لینوکس راهاندازی شوند. محیطهای اجرای کوچک و سبکی که از هسته سیستم عامل به صورت مشترک استفاده میکنند اما در عین حال میتوانند جدا از یکدیگر هم اجرا شوند.
کانتینرها از سالهای قبل هم مفهومی شناخته شده در عرصه فناوری بودند، با شروع به کار پروژه اوپن سورس Docker، محبوبیت این فناوری بسیار زیاد شد و به روند گسترش کانتینرها و میکروسرویسها در توسعه نرم افزار که با نام cloud-native development یا توسعه ابری شناخته میشوند، کمک زیادی کرد.
کانتینر (Container) چیست؟
یکی از اهداف توسعه نرم افزارهای مدرن این است که اپلیکیشنها بتونند روی یک هاست یا کلاستر به صورت جدا از هم باقی بمانند تا عملکرد و سایر فعالیتهایشان روی هم تاثیری نگذارد. اما ماجرا به همین سادگی نیست! به خاطر استفاده از پکیجها، کتابخانهها و سایر کامپوننتهای نرمافزاری، انجام این کار بسیار دشوار خواهد بود.
یک راهحل خوب برای این مشکل، استفاده از ماشینهای مجازی (Virtual Machine) است که میتواند برنامهها را روی یک بستر سختافزاری، به صورت جدا از هم نگه دارد و کاری کند که کامپوننتها در کار هم دخالتی نکنند و رقابت برای منابع سخت افزاری را به حداقل برساند.
اما برای استفاده از Virtual Machine یک مشکل اساسی وجود دارد. ماشینهای مجازی نرمافزارهای سنگین و حجیمی هستند. همچنین هر برنامه برای خودش به یک سیستم عامل خاص نیاز دارد که حجمشان به چندین گیگابایت میرسد. بنابراین نگهداری و ارتقای ماشینهای مجازی کاری دشوار و هزینهبر است.
اینجاست که پای کانتینر به میان میآيد.
کانتینرها محیط اجرای برنامهها را از یکدیگر جدا میکنند، اما هسته اصلی سیستم عامل را به اشتراک میگذارند. حجم آنها معمولا در حد مگابایت است و از منابع خیلی کمتری نسبت به ماشینهای مجازی استفاده میکنند. یکی دیگر از محاسن کانتینر در مقابل ماشین مجازی، مسئله زمان است. Virtual Machine برای اجرا شدن به زمان خیلی زیادی نیاز دارد اما کانتینر بسیار سریع و در همان لحظه اجرا میشود.
داکر چیست؟
Docker یک پروژه Open source است که ایجاد کانتینر و برنامههای مبتنی بر آن را آسانتر میکند. در واقع هدف ساخت داکر، ایجاد تعامل راحتتر با کانتینرها بود. داکر که در ابتدا برای لینوکس ساخته شد، اکنون روی ویندوز و مک هم اجرا میشود. برای درک نحوه کارکرد آن، بیایید تا نگاهی به برخی از اجزایی که برای ایجاد برنامههای حاوی Docker استفاده میشود، بیاندازیم.
Docker file
هر کانتینر داکر با یک Dockerfile شروع میشود. Dockerfile یک فایل متنی است که به صورت ساده و قابل فهم نوشته شده و شامل دستورالعملهای ساخت Docker Image است. Dockerfile نوع سیستم عامل را مشخص میکند و نشان میدهد در آن چه زبانها، متغیرهای محیطی، مکان فایلها، پورتهای شبکه و… استفاده شود. جدا از اینها، داکرفایل تعیین میکند پس از اینکه کانتینر اجرا شد، چه کارهایی را باید انجام دهد.
Docker image
هنگامی که Dockerfile را نوشتید، قابلیتی به نام Docker Build را فراخوانی میکنید. این قابلیت وظیفه دارد یک Image بر اساس محتویات Dockerfile شما بسازد. داکرفایل حاوی یک سری دستورالعمل برای ساختن یک Image است، در حالی که Docker Image یک فایل قابل حمل است که یک سری دستورالعمل دارد و مشخص میکند کانتینر، کدام کامپوننتهای نرم افزاری را اجرا کند و این اجرا چطور باشد.
از آنجا که یک Dockerfile احتمالا شامل دستورالعملهایی در مورد دریافت برخی کامپوننتهای نرمافزاری از مخازن آنلاین است، بنابراین باید دقت داشته باشید که نسخههای مناسب را دقیقا مشخص کنید. یعنی معلوم کنید که میخواهید کدام بستهها دریافت شوند. در غیر این صورت بسته به زمان فراخوانی، ممکن است Dockerfile شما تصاویر متناقضی تولید کند. Image یک تصویر استاتیک از سیستم عامل اصلی شما است.
Docker run
این کامپوننت در واقع یک ابزار دستوری است که یک کانتینر را راهاندازی میکند. هر کانتینر، نمونهای از یک تصویر است. کانتینرها بهصورت گذرا و موقتی طراحی شدهاند اما میتوان آنها را متوقف و دوباره راهاندازی کرد. همچنین، چندین نمونه کانتینر از یک تصویر به طور همزمان قابل اجرا هستند (به شرطی که هر کانتینر یک نام خاص داشته باشد).
Docker Hub
ساخت کانتینرها کار بسیار راحتی است، اما ضرورتی وجود ندارد که برای هر Image از همان اول کانتینر بسازید. Docker Hub یک مخزن Saas برای به اشتراکگذاری و مدیریت کانتینرها در اختیار شما قرار میدهد. در این بخش میتوانید ایمیجهای رسمی داکر که در اغلب اوقات به صورت Open source هستند را پیدا کنید. همچنین میتوانید ایمیجهای کانتینر حاوی کدهای مفید را دانلود کرده یا آنها را به صورت آزادانه به اشتراک بگذارید.
Docker Engine
موتور داکر هم مثل موتور ماشین، مهمترین بخش آن است. در واقع Docker Engine هسته اصلی داکر و مغز داکر است. یک فناوری کلاینت – سرور که کانتینرها را ایجاد و اجرا میکند. به طور کلی، وقتی کسی درباره داکر حرف میزند و در مورد شرکت یا پروژه کلی صحبت نمیکند، منظورش همین Docker Engine است. دو نسخه مختلف از Docker Engine در دسترس است: Docker Engine Enterprise و Docker Engine Community. نسخه Community آن همانطور که از اسمش پیداست، Open source و رایگان است اما برای استفاده از نسخه Enterprise آن باید پول بپردازید.
مقاله پیشنهادی ” Container در کامپیوتر چیست؟“
داکر چه مزیتهایی دارد؟
کانتینرهای داکر روشی را برای ساخت برنامههای شرکتی و تجاری ارائه میدهند که جمعآوری، نگهداری و جابهجایی آنها آسانتر از نمونههای معمولی است.
کانتینرهای داکر امکان ایزوله شدن را فراهم میکنند.
کانتینرهای داکر برنامهها را نه تنها از یکدیگر، بلکه از سیستم عامل هم جدا میکنند. این کار جدا از اینکه باعث ایجاد stack نرمافزاری مرتبتری میشود، استفاده از یک برنامه کانتینری با بهرهگیری منابع سیستم عامل مانند پردازند، پردازنده گرافیکی، حافظه، I/O، شبکه و… را هم آسان میکند. همچنین اطمینان از جدا بودن دادهها و کد را هم راحتتر میکند.
کانتینرها امکان جابهجایی را ایجاد میکنند.
یک کانتینر داکر روی هر دستگاهی که از محیط کارکرد کانتینر پشتیبانی کند، کار خواهد کرد. نیازی نیست که برنامهها به سیستم عامل میزبان گره خورده باشند، بنابراین هم محیط برنامه و هم محیط سیستم عامل اصلی را میتوان بهینه نگه داشت.
مثلا یک کانتینر MySQL برای لینوکس در اکثر سیستمهای لینوکسی که از کانتینرها پشتیبانی میکنند، اجرا میشود. همه وابستگیهای برنامه معمولا در یک کانتینر قرار خواهند گرفت.
برنامههای مبتنی بر کانتینر را میتوان به راحتی از سیستمهای on-prem به محیطهای ابری یا از لپتاپهای برنامهنویسان به سرورها منتقل کرد به شرطی که سیستم هدف، از Docker و سایر ابزارهای third-party که ممکن است از آن استفاده شود، پشتیبانی کند.
معمولا ایمیجهای کانتینر داکر باید برای یک سیستم عامل خاص ساخته شوند. مثلا کانتینر ویندوز در لینوکس اجرا نمیشود و بالعکس. پیش از این، یکی از راههای دور زدن این محدودیت، راهاندازی ماشین مجازی بود که نمونهای از سیستم عامل مورد نیاز را اجرا میکرد.
اما تیم داکر راهحل بهتری به نام Manifest را برای این مشکل ابداع کردند که به شما اجازه میدهد Imageهای چندین سیستم عامل در یک Image کنار هم قرار بگیرند.
کانتینر داکر قابلیت ترکیبپذیری دارد.
بیشتر برنامههای تجاری از چندین مولفه جداگانه به صورت Stack تشکیل شدهاند، مثل: وب سرور، پایگاه داده، حافظه کش. کانتینر امکان ترکیب این بخشها را به صورت یک واحد کاربردی با قطعاتی که به سادگی قابل تغییر هستند، فراهم میکند. هر قطعه توسط کانتینر متفاوتی تهیه و میتواند به طور مستقل از قطعات دیگر نگهداری، بهروز، تعویض و اصلاح شود.
کانتینر داکر تنظیم و مقیاسبندی را سادهتر میکند.
کانتینرها سبک هستند و بار مختصری را به سیستم عامل تحمیل میکنند؛ به همین دلیل امکان راهاندازی تعداد زیادی از آنها در یک سیستم عامل وجود دارد. همچنین میتوان از کانتینرها برای مقیاسگذاری یک برنامه در میان کلاسترهای سیستم و افزایش یا کاهش دادن سطح خدمات برای برآوردن تقاضاهای بیشتر یا صرفهجویی در منابع استفاده کرد.
بیشتر نسخههای سازمانی ابزارهای استقرار، مدیریت و مقیاسگذاری کانتینرها از طریق پروژههای third-party ارائه میشوند. اصلیترین آنها سیستم Kubernetes گوگل است، سیستمی برای خودکار کردن نحوه استقرار و مقیاسبندی کانتینرها و نحوه اتصال، load-balanced و مدیریت آنها. Kubernetes همچنین روشهایی را برای ایجاد و استفاده مجدد از تعاریف برنامههای چند کانتینری یا «نمودارهای Helm» ارائه میدهد تا Stackهای پیچیده یک برنامه بتواند در صورت تقاضا، ساخته و مدیریت شود.
در کنار مزایای زیاد داکر باید به این نکته هم دقت کنید که کانتینر داکر برای شما سرعت تخیلی ایجاد نمیکنند، در واقع درست است که کانتینرها مثل ماشینهای مجازی برای سیستم عامل شما سربار ایجاد نمیکنند، با این حال هنوز کمی overhead خواهید داشت.
همچنین کانتینر داکرها فاقد حالت و تغییرناپذیر هستند. کانتینرها از Imageهایی که محتوای آنها را توصیف میکند، راهاندازی و اجرا میشوند. آن ایمیج هم به صورت پیش فرض قابل تغییر نیست و پس از ایجاد، هیچگونه تغییری نخواهد داشت.
نتیجهگیری
در این مقاله بررسی کردیم که داکر نوعی پلتفرم برای ساخت برنامههای کاربردی است که مبتنی بر کانتینرها هستند. داکر کمک میکند تا به جای استفاده از ماشینهای مجازی که برای شرکتها و سازمانها بسیار پرهزینه هستند، بتوانیم با هزینه کم و سرعت بیشتری پروژهها را اجرا کنیم.
در واقع داکر این اجازه را به ما میدهد تا اپلیکیشنهای بیشتری را نسبت به سایر تکنولوژیها، با کمک تنها یک سختافزار اجرا کنیم. این اتفاق باعث میشود تا ساخت و مدیریت اپلیکیشنها را آسانتر شود.
سلام من میخوام یک پروژه x-ui رو به عنوان ایمیج بسازم که همیشه بتونم ازش استفاده کنم ! متاسفانه این پروژه نسخه چینیش تو هاب هست و اینم هم نسخه ای که من میخوام لطفا راهنمایی کنید چطوری اینو بسازم!!!
bash <(curl -Ls https://raw.githubusercontent.com/NidukaAkalanka/x-ui-english/master/install.sh)
و این هم پیج اسکریپت
https://github.com/NidukaAkalanka/x-ui-english