دوشنبه ۳۱ ارديبهشت ۱۴۰۳
Tut24 آموزش برنامه نویسی و مجله تخصصی فناوری ورود/عضویت

داکر چیست و چگونه کار می کند؟

یک کانتینر یک بسته نرم‌افزاری سبک، مستقل و قابل اجرا است که همه چیز لازم برای اجرای یک نرم‌افزار را در خود جای داده است.

و یکی از ابزارهای محبوب برای کار با کانتینرها، داکر است.

داکر همچنین نام شرکت (شرکت داکر) و نرم‌افزاری است که آن‌ها ایجاد کرده‌اند که نرم‌افزار را به صورت کانتینرها بسته‌بندی می‌کند.

برای درک اینکه چگونه کانتینرها کار می‌کنند و چرا برای توسعه نرم‌افزار بسیار مفید هستند، باید با دو موضوع در ظاهر غیر مرتبط با یکدیگر آشنا شوید – کانتینرهای حمل و نقل و ماشین های مجازی.

یک تاریخچه مختصر از کانتینرهای حمل و نقل

"جعبه: چگونه کانتینر حمل و نقل دنیا را کوچک‌تر کرد و اقتصاد جهانی را بزرگ‌تر" کتابی است از مارک لوینسون. این کتاب تأثیر عمیق کانتینر حمل و نقل بر تجارت جهانی و اقتصاد جهانی را بررسی می‌کند.

هرچند تاریخچه کانتینرهای حمل و نقل ممکن است در یک بحث در مورد کانتینرهای داکر غیرمرتبط به نظر برسد، اما آن‌ها مشترکاتی دارند.

قبل از کانتینرهای حمل و نقل، باربری نیاز به کار انسانی و زمان‌بر داشت که منجر به ناکارآمدی و تأخیر در تجارت جهانی شد. بارها و وسایل به اشکال و اندازه‌های مختلف می‌آمدند و عدم وجود بسته‌بندی استاندارد باعث می‌شد که اشیاء به طور موثر و امن مرتب نشوند.

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

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

کانتینرها
تصویر نشان می‌دهد که ابعاد استاندارد کانتینرها به آنها اجازه می‌دهد به راحتی بین کشتی‌ها، قطارها و کامیون‌ها منتقل شوند.

استانداردسازی، کلید موفقیت کانتینرهای حمل و نقل بود. در واقع، اگر کانتینرهای یک شرکت بر روی کشتی‌ها، کامیون‌ها یا قطارهای حمل شرکت دیگری جا نشدند، نمی‌توانستند به درستی حمل شوند. هر شرکت نیاز داشت که دارای ناوگان خود باشد تا بتواند اشیاء را به هر یک از مشتریان خود ارسال کند - که عملا این کار تبدیل به یک کابوس می‌شد.

استانداردسازی کانتینرهای حمل و نقل آنها را قابل حمل می‌کند، به این معنی که آنها راحت از یک مکان به مکان دیگر حمل می‌شوند. این قابلیت حمل و نقل یک ویژگی کلیدی در کانتینرهای داکر است که به زودی در مورد آن بحث خواهیم کرد.

ماشین‌های مجازی چیستند؟

ماشین‌های مجازی (VMها) از طریق فرآیندی به نام مجازی‌سازی ایجاد می‌شوند.

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

این محیط‌های مجازی همانند این هستند که مستقل و جدا از یکدیگر عمل می‌کنند، حتی اگر منابع سیستم فیزیکی زیرین را به اشتراک بگذارند.

مجازی‌سازی اجازه می‌دهد که یک کامپیوتر یا سرور فیزیکی فقط به عنوان چندین ماشین مجازی (VM) با سیستم‌عامل و منابع در خود داشته باشد.

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

ماشین مجازی
تصویر نشان می‌دهد که در مجازی‌سازی چگونه چندین ماشین مجازی (VM) از یک سرور فیزیکی ایجاد می‌شود.

مجازی‌سازی چگونه کار می‌کند؟

ممکن است این سوال برای شما پیش بیاید که - دقیقاً مجازی‌سازی چگونه کار می‌کند؟ به تصویر زیر نگاه کنید:

مجازی‌سازی چگونه کار می‌کند
تصویر نشان می‌دهد چگونه مجازی‌سازی با مجازی‌سازی یک قطعه سخت‌افزار به ایجاد چندین ماشین مجازی می‌انجامد.

در پایین، سخت‌افزار میزبان و سیستم‌عامل (OS) را دارید. این دستگاه فیزیکی است که برای ایجاد ماشین‌های مجازی استفاده می‌شود. روی این‌ها، می‌بینید هایپروایزر. این به چندین ماشین مجازی اجازه می‌دهد، هرکدام با سیستم‌عامل (OS) خود، روی یک سرور فیزیکی اجرا شوند.

ماشین‌های مجازی چندین مشکل دارند که کانتینرها آنها را حل می‌کنند. دو مشکل اساسی عبارتند از:

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

کانتینرها چیستند؟

یک کانتینر یک بسته نرم‌افزاری سبک، مستقل و قابل اجرا است که همه چیز لازم برای اجرای یک نرم‌افزار را در خود جای داده است، از جمله کد، زمان اجرا، ابزارهای سیستم و کتابخانه‌ها.

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

برخلاف ماشین‌های مجازی که سخت‌افزار را مجازی‌سازی می‌کنند، کانتینرها سیستم‌عامل را مجازی‌سازی می‌کنند. این به این معنی است که یک کانتینر از یک سیستم‌عامل استفاده می‌کند تا یک برنامه مجازی و کتابخانه‌های آن را ایجاد کند. کانتینرها روی یک سیستم‌عامل مشترک اجرا می‌شوند که توسط سیستم میزبان فراهم شده است.

این در زیر نمایش داده شده است:

کانتینرها
تصویر نشان می‌دهد چگونه کانتینرها با مجازی‌سازی سیستم‌عامل کار می‌کنند.

موتور کانتینر به شما اجازه می‌دهد که کانتینرها را ایجاد کنید. این ابزارها و خدمات لازم برای ساختن، اجرا و مستقر کردن برنامه‌های کانتینری را فراهم می‌کند.

کانتینرها چندین مزیت دارند:

  1. قابلیت حمل و نقل: کانتینرها طراحی شده‌اند تا مستقل از پلتفرم باشند. آن‌ها می‌توانند در هر سیستم که پشتیبانی از زمان اجرای کانتینر دارد، مانند Docker، اجرا شوند، بدون توجه به سیستم‌عامل زیرین. این باعث می‌شود که انتقال برنامه‌ها بین محیط‌های مختلف، از جمله کامپیوترهای توسعه محلی، سرورهای آزمایشی و پلتفرم‌های ابر مختلف، آسان‌تر باشد.
  2. کارایی: کانتینرها از سیستم‌عامل سیستم میزبان استفاده می‌کنند، که فشار هرمنبع از اجرای یک ماشین مجازی با چندین سیستم‌عامل را کاهش می‌دهد. این منجر به بهره‌وری بیشتر از منابع می‌شود و اجازه می‌دهد که چگالی بالاتری از برنامه‌ها بر روی یک میزبان واحد اجرا شود.
  3. یکنواختی: کانتینرها تمامی اجزای مورد نیاز را، از جمله کد برنامه، زمان اجرا، کتابخانه‌ها و وابستگی‌ها، در یک واحد بسته‌بندی می‌کنند. این مشکل "روی کامپیوتر من کار می‌کند" را حل می‌کند و اطمینان حاصل می‌شود که برنامه از محیط‌های مختلف، از توسعه تا تولید، به یکنواختی اجرا می‌شود.
  4. انزوا: کانتینرها محیطی سبک و انزوا شده برای اجرای برنامه‌ها فراهم می‌کنند. هر کانتینر برنامه و وابستگی‌های آن را بسته‌بندی کرده و اطمینان حاصل می‌کند که آنها با یکدیگر تداخل ندارند. این انزوا به جلوگیری از تداخل و اطمینان از رفتار یکنواخت در محیط‌های مختلف کمک می‌کند.
  5. راه‌اندازی سریع: کانتینرها می‌توانند به سرعت ایجاد و شروع شوند، اغلب در عرض چند ثانیه. این سرعت راه‌اندازی سریع به ویژه برای برنامه‌هایی که باید بر اساس تقاضا به سرعت لود شوند، مفید است.

داکر چیست؟

حال که ما از ماشین‌های مجازی و کانتینرها صحبت کردیم، دقیقاً داکر چیست؟ داکر فقط یک ابزار برای ایجاد و مدیریت کانتینرهاست.

در جوانب اساسی خود، داکر دو مفهوم دارد که مفید است درک کنید: Dockerfile و Docker Images.

یک Dockerfile دستورات مورد نیاز برای ساخت یک Docker Image را شامل می‌شود.

یک Docker Image به عنوان یک الگو برای ایجاد کانتینرهای Docker عمل می‌کند. این حاوی کلیه کد‌ها، زمان اجرا، ابزارهای سیستم، کتابخانه‌ها و تنظیمات مورد نیاز برای اجرای یک نرم‌افزار است.

پس، یک Dockerfile برای ساخت یک Docker Image استفاده می‌شود که سپس به عنوان الگو برای ایجاد یک یا چند کانتینر Docker استفاده می‌شود. این در زیر نمایش داده شده است.

داکر
تصویر مراحل ایجاد یک کانتینر داکر را نشان می دهد. ابتدا Dockerfile را ایجاد می‌کنید که برای ساخت Docker Image مورد استفاده قرار می‌گیرد و سپس این Docker Image برای اجرای کانتینر داکر استفاده می‌شود.

اگر هنوز هم این توضیحات باعث سردرگمی شما شده‌اند، یک تشبیه را با استفاده از کانتینرهای حمل و نقل در نظر بگیرید.

تصور کنید نیاز دارید چندین کانتینر حمل و نقل برای انتقال اجناس به سراسر جهان بسازید. شما با یک سند شروع می‌کنید که تمامی نیازهای کانتینر حمل و نقل شما را فهرست می‌کند. این اطلاعات شامل ابعاد کانتینر، نوع مهره‌ها، مکانیسم قفل درب، نیازهای تهویه و یخچال (اگر به عنوان مثال غذاهای نیازمند محیط کنترل‌شده دما را حمل می‌کنید) و غیره است.

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

از این الگو، کانتینرهای فیزیکی بنا می‌شود. از این یک الگو می‌توان برای ساخت یک یا چند کانتینر فیزیکی استفاده کرد که همگی یکسان هستند و با مشخصات در الگوی کانتینر همخوانی دارند.

این در زیر نمایش داده شده است:

کانتینر
تصویر نشان می‌دهد کانتینرهای حمل و نقل به صورت آنالوگی برای کانتینرهای داکر

Dockerfile مشابه سند نیازمندی‌هاست، که فقط دارای مجموعه‌ای از دستورات برای ساخت الگوی کانتینر است.

تصویر Docker مشابه الگوی کانتینر است، که جزئیات تمام دستورات مورد نیاز برای ساخت کانتینر فیزیکی را مشخص می‌کند.

پس از ایجاد، تصاویر Docker تغییر ناپذیرند. اگر نیاز به انجام تغییرات در یک برنامه دارید، باید Dockerfile را اصلاح کرده و یک تصویر جدید ایجاد کنید. این عدم قابلیت تغییر اطمینان از یکنواختی و قابلیت تکرار در استقرار برنامه را فراهم می‌کند.

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

ترکیب اطلاعات

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

قابل حمل

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

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

افزایش کارآیی

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

در کانتینرهای Docker، بهبود کارآیی از این جهت است که کانتینرها از سیستم‌عامل میزبان استفاده می‌کنند که باعث می‌شود که نسبت به ماشین‌های مجازی، که نسبت به آنها سبک‌تر هستند، بهبود یابد. این به زمان راه‌اندازی سریع کانتینرها و کاهش مصرف پردازنده، حافظه و فضای ذخیره سازی منجر می‌شود.

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

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

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