داکر چیست؟ آشنایی با داکر و ساخت کانتینر

داکر چیست؟ آشنایی با داکر و ساخت کانتینر
()

داکر یکی از مفاهیمی است که در دنیای توسعه نرم افزار و توسعه زیر ساخت از آن استفاده گسترده ای می شود. در این مقاله قصد داریم تا با این مفهوم و زیر شاخه های آن آشنا شوید پس تا پایان مقاله با ما همراه باشید.

تا قبل از معرفی داکر در سال 2013 توسعه دهندگان برای این که بتوانند اپلیکیشن یا وبسایت خود را در پلتفرم های دیگر مانند لینوکس و موارد مشابه ایجاد کنند با چالش هایی رو به ر و بودند و بسیاری از آن ها محدود به اجرا در یک پلتفرم بودند.به عنوان مثال وبسایت هایی که بک اند آن ها با فریم ورک ASP.NET Core بود نمیتوانستند بر بستر هاست و سرورهای لینوکسی اجرا شوند و فقط امکان اجرا در هاست و سرورهای ویندوزی که ویندوز سرور روی آن نصب بود . بعد از معرفی داکر ماجرا کاملا متفاوت شد و نسبت به قبل پیشرفت فزاینده ای پیدا کرد.

داکر چیست؟

داکر(Docker) یک ابزار متن باز(Open Source) است که میتوانید از آن برای تست وبسایت یا اپلیکیشن در بسترهای مختلف استفاده کنید.البته فقط محدود به این موارد نمی شودو میتوان به راحتی یک وبسایت واقعی را روی آن راه اندازی کرد. از این گذشته شما در داکر با ایجاد یک کانتینر(Container) میتوانید تمامی وابستگی ها(Dependencies) و ابزاهای مورد نیاز را نصب کنید.تصور کنید در حال راه اندازی یک کانیتر برای صحت عملکرد یک وبسایت با ASP.NET Core هستید.

در این حالت میتوانید با نصب دات نت و Nuget Package Manager های مربوطه یک محیط ایزوله(Isolation) ایجاد کنید. در این حالت شما دیگر نگران اجرای وبسایت یا اپلیکیشن خود نخواهید بود و فارغ از مبحث سیستم عامل(OS) میتوانید آن را اجرا کنید.

تفاوت داکر با ماشین مجازی چیست؟

احتمالا شاید به فکر شما هم این سوال خطور کرده باشد که اصلا تفاوت داکر و ماشین مجازی چیست؟ آیا این دو مفهوم با یکدیگر یکی نیستند؟ باید در جواب این سوال گفت تقریبا شباهت هایی با هم دارند ولی در ماشین مجازی بخشی از سخت افزار یک سیستم مثل رم،هارد،CPU مورد استفاده قرار میگیرد. اما در داکر کاملا این رویکرد متفاوت است. سخت افزار به تناسب هر کانیتنر ایجاد شده اختصاص داده می شود و این امکان را فراهم میکند که مثلا یک وبسایت یا اپلیکیشن روی کرنل لینوکس اجرا شود و از نشت حافظه(Memory Leak) جلوگیری میکند.

مزایای استفاده از داکر

این که چرا از داکر برای استقرار(Deployment) استفاده کنیم چندین دلیل دارد که داکر را نسبت به ابزارهای مشابه متمایز میکند:

یکسان بودن محیط ها

در زمان استقرار یا Deployment ممکن است فضایی که اپلیکیشن یا وبسایت را بر روی آن قرار میدهید مواردی مانند SDK, نسخه های زبان های برنامه نویسی و مواردی از این قبیل متفاوت باشند. اما داکر کمک میکند تا این موضوع برطرف شود و علاوه بر آن در سیستم های مختلف هم قابلیت اجرا را دارد.

افزایش سرعت و کاهش خطا

پیکربندی(Configuration) یک محیط ممکن است نیازمند زمان طولانی باشد.اما با استفاده از داکر این زمان بسیار بسیار کمتر خواهد بود و میتوانید روی توسعه نرم افزار خود تمرکز کنید.

مقیاس پذیری(Scalability)

یکی از بهترین قابلیت های آن مقیاس پذیری در ابعاد بزرگ تر است.به عنوان مثال اگر هزاران کانتینر ایجاد کرده باشید به راحتی میتوانید آن را در کمترین زمان با سرعت بالا و کارایی بی نظیر اجرا کنید.

کانتینر(Container) چیست؟

چندین بار در این مقاله مفهوم کانتینر را تکرار کرده ایم اما واقعا معنی و مفهوم آن چیست؟ چرا اصلا باید یک کانتینر ایجاد کنیم تا بتوانیم به راحتی وبسایت یا اپلیکیشن خود را اجرا کنیم؟

اگر بخواهیم به زبان ساده کانتینر را توضیح دهیم میتوان گفت :

کانتینر ابزاری است که شما میتوانید تمامی وابستگی ها و ابزارهای مورد نیاز خود را در آن قرار دهید. کانتینرهای که در داکر وجود دارد دارند باعث می شوند تا قسمتی از نرم افزار یا وبسایت در یک سیستم عامل کامل تعبیه شود.همانطور که اشاره کردیم داکر قابلیت ایزوله سازی را دارد و این قابلیت علاوه بر امنیت باعث می شود تا وبسایت یا اپلیکیشن مستقیما بر روی هسته(Kernel) اجرا شود و نیازی به استفاده از ابزارهای مجازی ساز (Hypervisior) که از منابع زیادی استفاده میکنند،نیست.همچنین این قابلیت را به شما ارائه میدهند که میتوانید دسترسی به شبکه،منابع مورد نیاز و تنظیمات پایه ای را نیز تعیین کنید.

مفهوم Image در داکر

بعد از این که با مفهوم کانتینر آشنا شدیم حالا باید این نکته را مورد بررسی قرار دهیم.

مفهوم Image یا Docker Image در واقع به این موضوع اشاره میکند که همان وابستگی ها و ابزارهای مورد نیاز در قسمت قبل به آن اشاره داشتیم را باید در آن قرار دهیم.

یک ایمیج در واقع یک Read-Only Template است که دستورات ضروری را درون خود دارد.نحوه استفاده ما این طور است که ما با تغییر ساختار یک Image یک Image دیگری ایجاد میکنیم که کاملا مطابق نیازهای ما است. مثلا یک ایمیج اوبونتو ایجاد میکنیم اما میتوانیم در آن از وب سرور Apache استفاده کنیم. ایمیج ها در زمان اجرا به یک کانتینر تبدیل می شوند و بر روی Docker Engine اجرا می شوند.

موتور داکر(Docker Engine):

موتور داکر یک تکنولوژی Containerize برای ساخت و اجرای کانتینر اپلیکیشن ها است. این موتور اعمال خود را در حالت Client/Server ایجاد میکند.

  • یک سرور که نوعی نرم افزار محسوب می شود که مدت زمان طولانی میتوان آن را اجرا کرد که به آن پروسهDaemon گفته می شود
  • یک REST API که واسط کاربری نرم افزارها برای ارتباط(Connection) و اجرای دستورات(Command) در Daemon است.
  • یک کلاینت خط فرمان یا CLI(Command Line Interface) است.

مفهوم Dockerfile

ما در ساخت کانتینر برای این که بتوانیم پیکربندی(Configuration) داشته باشیم نیاز به یک ابزار داریم. فایل Dockerfile به ما کمک میکند تا بتوانیم دستورالعمل(Insturction) مورد نیاز برای ایجاد ایمیج را در آن قرار دهیم. این کار باعث می شود تا یک اتوماسیون سازی انجام دهیم و نیاز به پیکربندی دستی نباشد.همچنین میتواند در بخش کنترل نسخه(Version Control) به ما کمک کند تا نسخه های مختلف یک اپلیکیشن یا یک وبسایت را اجرا کنیم.

مفهوم Docker Hub

حتما شما هم تا به حال با ابزاری به نام گیت هاب آشنا شده اید.گیت هاب یک مرجع عمومی است که افراد از آن میتوانند برای مشارکت در پروژه های متن باز(Open Source) استفاده کنند. داکر هاب تقریبا چنین ساختاری دارد و شما در آن میتوانید تعداد زیادی از ایمیج ها را ببینید و از آن استفاده کنید

🧩 Docker Compose

اگر بخواهید همه کانتینرها را یکی یکی اجرا کنید و اگر تعداد آن ها خیلی زیاد باشد آیا به نظر شما ارزش دارد زمان بگذاریم و همه را تک به تک اجرا کنیم؟ این کار زمان زیادی را میطلبد. به همین خاطر نیاز است تا مقداری این روند را آسان تر کنیم.

ابزار Docker Compse به ما کمک میکند تا در یک فایل با پسوند YAML تمامی پیکربندی ها و کانتینرها را به صورت یکجا اجرا کنیم.

مفاهیم زیر شاخه Docker Compose

docker-compose.yml

فایل اصلی که معماری سرویس ها را تعیین میکند.شامل سرویس ها،شبکه ها،ولوم ها و تنظیمات هر کانتینر

سرویس(Service)

هر سرویس یک یا مجموعه ای از چندین کانتینر است.مثلا برای دیتابیس سرویس db و برای وب سرور از سرویسweb میتوانیم استفاده کنیم.

شبکه ها(Networks)

ابزار Compose به صورت خودکار شبکه های داخلی ایجاد میکند تا سرویس های درون یک کانتینر با هم ارتباط برقرار کنند.

ولوم ها(Volumes)

ولوم ها به ما کمک میکنند تا داده های ما در صورت حذف یک کانتینر باقی بمانند.یکی از قابلیت های فوق العاده داکر دقیقا همین مورد است.

مقیاس پذیری(Scalling)

میتوانیم تعداد کانتینرهای یک سرویس را افزایش دهیم

docker-compose up --scale web=3

مفهوم Registery

تقریبا رجیستری شباهت هایی با داکر هاب دارد اما تفاوت این مورد با داکر هاب این است که داکر هاب به صورت عمومی است یعنی شرکت ها و افراد مختلف کانتینرها و ایمیج های ساخته شده توسط خود را در معرض نمایش عموم قرار میدهند.اما رجیستری کاملا متفاوت است.

مفاهیم کلیدی مرتبط با Registry

  • Image Repository (مخزن ایمیج): هر پروژه یا سرویس می‌تواند یک مخزن داشته باشد که نسخه‌های مختلف ایمیج در آن ذخیره می‌شوند.
  • Tag (برچسب): برای مشخص کردن نسخه‌ی ایمیج‌ها استفاده می‌شود. مثلاً nginx:1.21 یا python:3.9.
  • Public Registry: رجیستری عمومی مثل Docker Hub که همه می‌توانند ایمیج‌ها را دانلود یا آپلود کنند.
  • Private Registry: رجیستری اختصاصی سازمانی برای ذخیره ایمیج‌های داخلی و محرمانه.
  • Authentication & Authorization: رجیستری‌ها معمولاً نیاز به ورود (Login) دارند تا مشخص شود چه کسی اجازه‌ی Pull یا Push دارد.

نسخه های داکر

نسخه های داکر بر اساس کاربرد و مقیاس کار به دو دسته Communityو Enterpise تبدیل می شود.اگر شما یک تیم کوچک و جمع و جور دارید بهترین راه حل استفاده از نسخه Community است و اگر هزینه ای هم داشته باشد به مراتب کمتر است. اما اگر یک سازمان یا شرکت بزرگ هستید استفاده از نسخه Enterprise قطعا منطقی تر است و امکانات فوق العاده ای را در اختیار شما قرار میدهد.

نسخه اینترپرایز باز هم به سه زیر نسخه تقسیم می شود:

  • نسخه پایه(Basic Edition)
  • نسخه استاندارد(Standard Edition)
  • نسخه پیشرفته(Advanced Edition)

جمع بندی

در این مقاله با ابزار داکر و مفاهیم کلیدی آن آشنا شدیم و قسمت های مختلف آن را مورد بررسی قرار دادیم. استفاده از داکر و یادگیری آن در حال حاضر یکی از مفاهیم بسیار مهم و ضروری در Devops و همچنین برای برنامه نویسان بک اند است. خوشحال میشویم تجربه خود را در استفاده از داکر با ما در قسمت دیدگاه ها به اشتراک بگذارید❤️

آیا این پست برای شما مفید بود؟

روی ستاره ها کلیک کنید و امتیاز دهید😊

میانگین امتیاز / 5. تعداد امتیاز:

تا کنون امتیازی به این پست داده نشده است شما اولین نفر باشید😍

دیدگاه‌ها ۰
ارسال دیدگاه جدید