فناوری کانتینر به دلیل زمان شروع سریع و اندازه کوچک آنها برای اجرای برنامه ها در دنیای ابر شتاب بیشتری به دست آورده است. در اینجا، من تجربه خود را از دیدگاه سطح بالایی از فناوری کانتینر با شما به اشتراک خواهم گذاشت. یعنی چیه؟ تفاوت آن با معماری یکپارچه ای که ما در طول سال ها از آن استفاده کرده ایم چیست؟ چگونه می تواند هزینه را در دنیای ابری کاهش دهد؟
اجازه دهید با کمک یک مثال فناوری کانتینر را درک کنیم. فرض کنید به یک نانوایی می روید و می خواهید یک کیک شکلاتی 3 پوندی بخرید. حالا مغازه دار کیک را در یک ظرف کوچک جعبه ای به شما می دهد که برای یک کیک 3 پوندی کافی است تا بتوانید آن را به راحتی حمل کنید. مغازه دار این کیک 3 پوندی را در ظرفی که برای کیک 5 یا 10 پوندی است به شما نمی دهد وگرنه حمل آن برای شما سخت خواهد بود.
اکنون، فناوری کانتینر شباهت زیادی با این قیاس دارد. مانند گفتن، اگر می خواهید برنامه وب خود را تولید کنید، باید یک زیرساخت سرور کاملاً جدید بخرید، یک محصول سرور نصب کنید، باینری های خود را برای برنامه خود پیکربندی و نصب کنید و سپس برنامه خود را اجرا کنید. در دنیای ابری، شما باید یک ماشین مجازی کاملاً جدید با تصویری از سرور ویندوز یا لینوکس راه اندازی کنید و مسئولیت مدیریت آن ماشین مجازی بر عهده شماست. راحتتر، یک سرویس PaaS مانند Azure App Service یا Google AppEngine را برای میزبانی برنامه خود تنظیم میکنید.
نگهداری این اجزا به صورت جداگانه و به روز نگه داشتن آنها به عنوان یک بلوک یکپارچه می تواند بر چابکی برنامه و هزینه ای که به فروشنده ابر می دهید تأثیر بگذارد. اینجاست که ما از فناوری کانتینر استفاده می کنیم. با فناوری کانتینر، میتوانیم هزینهها را کاهش دهیم، چابکی برنامه را بهبود بخشیم و در دسترس بودن بالا را به دست آوریم. دو فناوری کانتینر محبوب وجود دارد، Docker (برای لینوکس) و Windows Containers (معرفی شده در Windows Server 2016). در اینجا Docker و اجزای آن را با نمای سطح بالا خواهیم دید.
مقدمه ای بر داکر
Docker یک فناوری کانتینری سازی سبک، قابل اعتماد و سریع است. این به ما کمک میکند تا هزینههای سربار چرخاندن یک ماشین مجازی جدید (VM)، ساخت معماریهای Microservices، بستهبندی، پیکربندی و ارائه واحدهای کاربردی در محیطهای مختلف را کاهش دهیم.
نمونههای Docker در دنیای واقعی
Docker یک فناوری بستهبندی و تحویل برنامه مبتنی بر کانتینر است. در Docker، برنامه ها در کانتینرها اجرا می شوند. حال سوال این است که چرا ظروف؟ پاسخ به این سوال بسیار ساده است. همانطور که در دنیای واقعی می بینیم که اگر کشوری بخواهد تعدادی ذخایر را به کشور دیگری صادر کند، آنها را در کانتینرها قرار می دهد و سپس آن کانتینرها را یا از طریق جاده یا از طریق اسکله به کشور دیگری ارسال می کند.
در ظروف، هر استوک به گونه ای قرار می گیرد که بر روی تکان های کوچک آسیب نبیند و همه چیز بدون توجه به جایی که ظرف در حال حرکت است، با خیال راحت قرار می گیرد.
همان قیاس بالا در مورد Docker نیز صدق می کند. Docker برنامه ها را در یک محفظه کوچک در حال اجرا با تمام bins\libs و وابستگی های برنامه شما کپسوله می کند و برنامه را به طور کامل از دستگاه میزبان جدا می کند. کانتینرهای داکر بر اساس تصاویر داکر ساخته شدهاند، زیرا تا مدتی دیگر خواهیم دید که تصویر داکر چیست و آناتومی یک کانتینر داکر در حال اجرا چیست.
داکر و ماشین های مجازی (VM)
ماشینهای مجازی نیز در تعدادی از هایپروایزور قابل حمل هستند، اما توجه به این نکته مهم است که Containerها VM نیستند. اگر ماشین های مجازی و کانتینرها را در زمینه تحویل برنامه ببینیم، می بینیم که Docker ما را از سربار سیستم عامل مهمان و Hyper-visor نجات می دهد. ما نیازی به استفاده از سیستم عامل مهمان برای آزمایش یا اجرای برنامه خود در حین استفاده از Docker نداریم.
همانطور که می بینیم، ماشین های مجازی باید به سیستم عامل مهمان نیاز داشته باشند که سربار زیادی را بر روی قدرت محاسباتی افزایش می دهد. ماشین های مجازی معمولاً دارای معایب زیر هستند:
- شما باید یک ماشین مجازی کاملاً جدید را بچرخانید و یک سیستم عامل دارای مجوز مورد نیاز را نصب کنید تا فقط برنامه تکی خود را اجرا کنید.
- شما باید هر بار تمام باینری ها و کتابخانه های برنامه خود را به صورت دستی پیکربندی و نصب کنید.
- آنها سربار زیادی روی قدرت محاسباتی شما دارند.
- اگرچه آنها در هایپرویزرهای مختلف قابل حمل هستند و از دستگاه میزبان خود جدا هستند، اما از نظر قابلیت حمل حجم فایل بالایی دارند.
کانتینرهای داکر می توانند ما را از این بار سنگین نجات دهند. همچنین در دنیای ابری پیچیده و پرهزینه می شود. کانتینرها خدمات یکسانی (مانند فایل سیستم ها) و bin\libs (در صورت لزوم) دستگاه میزبان را با همه کانتینرها به اشتراک می گذارند. داکر از فضاهای نام ویژگی های رایج لینوکس و موارد دیگر استفاده می کند تا برنامه را از ماشین میزبان جدا کرده و آنها را در یک تصویر بسته بندی کند. کانتینرها زمان راه اندازی سریع، استقرار و تحویل برنامه با وزن سبک و سریع را ارائه می دهند. فراخوانی کانتینرها به عنوان جایگزینی برای فناوری مجازی سازی ممکن است مناسب نباشد.
اجزای Docker
اکنون، اجازه دهید برخی از بلوک های اصلی Docker را ببینیم تا به درستی در اطراف آن کار کنیم.
داکر به طور کلی از 5 جزء اصلی تشکیل شده است.
- میزبان داکر
- موتور داکر
- مشتری داکر
- Docker Image و Dockerfile
- Docker Registry و Docker Hub
Docker Host در Docker شامل تمام ویژگی های لینوکس است که برای جداسازی برنامه ها از دستگاه میزبان استفاده می شود. Docker Engine در داخل Docker Host قرار دارد، Docker Engine Docker را در سیستم ما راهاندازی میکند (زیرا Docker به طور بومی روی لینوکس اجرا میشود) و مسئول ایجاد، راهاندازی، حذف و مدیریت کانتینرها است. گاهی اوقات از آن به عنوان داکر دیمون نیز یاد می شود. ما از Docker Client در دستگاه میزبان خود برای صحبت با Docker Engine برای ایجاد، ساخت و اجرای کانتینرها استفاده می کنیم.
همانطور که گفته شد، برنامه ها در کانتینرها اجرا می شوند. کانتینر Docker توسط Docker Image ساخته شده است. تصویر Docker با نوشتن یک Dockerfile ساخته می شود. یک Docker Image، به طور خلاصه، دستور العمل یا طرح اولیه یک کانتینر داکر در حال اجرا است. Dockerfile معمولاً از دستورات مختلف لینوکس برای ایجاد یک تصویر داکر تشکیل شده است. سپس تصاویر Docker توسط Docker Engine یا Docker Daemon پردازش میشوند تا نمونههای در حال اجرا Docker Images (اگر کانتینر را اجرا کنیم) در قالب کانتینرهای Docker ایجاد میکنند.
پس از نوشتن Dockerfiles و ایجاد تصاویر Docker، میتوانیم آن تصاویر را به Docker Registry فشار دهیم تا برنامههای خود را به صورت عمومی یا خصوصی توزیع کنیم. آن را به عنوان GitHub برای میزبانی مخازن Git در نظر بگیرید. با Docker Registry، میتوانیم تصاویر Docker را با افراد دیگر به اشتراک بگذاریم یا نمونههای در حال اجرا این تصاویر را در فضای ابری برای برنامههای تولید (مانند ACS و DigitalOcean و غیره) ایجاد کنیم. رجیستری Docker پیشفرض Docker Hub است که در آن میتوانیم تعدادی از تصاویر Docker را از Docker به طور رسمی و از برخی از فروشندگان شخص ثالث پیدا کنیم.
Docker Engine (Docker Daemon) تصویر Docker (که با استفاده از Dockerfile ایجاد شده است) را در یک Docker Container بارگیری می کند.
کانتینرها نمونه های در حال اجرا Docker Images هستند.
برنامه های Docker دیگری نیز در دسترس هستند مانند:
- Docker Compose، برای مدیریت برنامه های کاربردی چند کانتینری.
- Docker Cloud، برای ساخت و استقرار کانتینرهای Docker در فضای ابری مانند ACS یا Kubernetes.
- Docker DTR (Docker Trusted Registry)، یک سرویس رجیستری میزبانی شده برای مدیریت و ساخت تصاویر.