در این مقاله میخوانید:
بیایید ببرمتان به دیدن یک اسکله پر از کانتینر؛ از بالا؛ که کانتینرهای رنگارنگش سوار بر اسکله دل آدم را میبرد به کودکی. کانتینرهایی که شبیه لِگو بازی بچهها، خیلی ساده توسط جرثقیل برداشته و رویهم سوار میشوند و گاهی نیز به درون کشتیها بارگیری و منتقل میشوند.
تصور کنید که شما مدیر یک شرکت حملونقل هستید و بستههای کالاهای مختلف را دریافت میکنید. هر نوع کالا باید با بستهبندی و سیستم مدیریت خودش به مقصد مورد انتقال داده شود. این ممکن است باعث افزایش زمان و پیچیدگی و البته هزینههای مدیریتی شود. همچنین، در صورت تغییرات در بستهبندی یا سیستمهای مدیریت، ممکن است به مشکلاتی برخورد کنید.
بنابراین سراغ مفهومی میروید بنام بارگیری کانتینری.
در فناوری اطلاعات نیز کانتینرسازی یا Containerization وجود دارد که این مفهوم، یکی از مفاهیم کلیدی در DevOps است. بدون کانتینرسازی، شما دچار سردرگمی، تنوع بستهها، مدیریت هزینهبر و دشواری در انتقال و جابجایی آنها خواهید شد. حالا فرض کنید که از کانتینرسازی استفاده میکنید. دراینصورت بهجای اینکه هر نوع کالا بهصورت جداگانه و با سیستم مدیریت مخصوص به خودش حملونقل شود، همه کالاها در یک کانتینر (مثلاً یک کانتینر حملونقل کالاهای ترانزیتی) قرار میگیرند.
این کانتینر با ابعاد و استانداردهای مشخصی طراحیشده است تا هر نوع کالا بهصورت یکپارچه در داخل آن قرار بگیرد. حالا میتوانید با یک استاندارد کانتینر، انواع مختلف کالاها را به مقصد حملونقل کنید بدون نیاز به تغییرات در بستهبندی یا سیستم مدیریت.
این مفهوم در توسعه نرمافزار و مدیریت سرورها و زیرساختهای مجازی موردتوجه قرارگرفته از VM-سازی تا Docker و Podman (بدون نیاز به دسترسی root) که همگی قرار است مقیاسپذیری، انعطافپذیری، بهبود استفاده از منابع، استقرار ساده و بهروزرسانی، و مدیریت سریع را به ارمغان بیاورد. ادغام DevOps در ITIL4 این امکان را به شما میدهد که علاوه بر زیرساختها، سرویسهای فناوری اطلاعات را نیز بهعنوان یک کانتینر یا جعبه تعریف کنید!
مدیریت وابستگیهای نرمافزار و پشتهی فناوری در سراسر محیط ابری و محیطهای توسعه متعدد یک مشکل مشترک برای تیم DevOps است. آنها باید برنامه را بهعنوان بخشی از وظایف روزانه خود، صرفنظر از پلت فرم اساسی که در آن عمل میکند، عملیاتی و قابلاعتماد نگهدارند.
از سوی دیگر، تیمهای توسعه بر روی آوردن ویژگیهای جدید Docker و ارتقاء تمرکز میکنند. متأسفانه، استقرار کدی که مشکلات وابسته به محیطزیست را معرفی میکند، اغلب قابلیت اطمینان برنامه را به خطر میاندازد. سازمانها بهطور فزایندهای از یک چارچوب کانتینری برای به حداقل رساندن این ناکارآمدی استفاده میکنند که به آنها اجازه میدهد یک چارچوب محکم را توسعه دهند.
Docker یک تکنولوژی کانتینرسازی منبع باز مبتنی بر لینوکس است که به توسعهدهندگان اجازه میدهد تا برنامهها، کار و بسته نرمافزاری برای استقرار به شکل کانتینر را بنویسند. ظروف داکر، برخلاف ماشینهای مجازی، موارد زیر را ارائه میدهند:
ظروف داکر، در هسته خود، قابلیتهای برنامه را به چندین جزء تبدیل میکنند که میتوانند بهطور مستقل در صورت نیاز مستقر، آزمایش و مقیاس شوند.
Docker یک پلت فرم Containerization است که رایگان و منبع باز است. این اجازه میدهد تا توسعهدهندگان برنامهها را در ظروف بستهبندی کنند، که اجزای اجرایی استاندارد هستند که کد منبع برنامه را با کتابخانههای OS و وابستگیهای موردنیاز برای اجرایان کد در هر محیط ترکیب میکنند. کانتینرها توزیع برنامههای توزیعشده را آسانتر میکنند و با حرکت شرکتها به سمت توسعه بومی ابر و تنظیمات چند ابر ترکیبی محبوبتر میشوند.
Containerization برنامههای “نوشتن یکبار، اجرا در هر نقطه” را قادر میسازد. ازنظر فرایند توسعه و سازگاری فروشنده، قابلیت حمل بسیار مهم است. ظروف بهطور گستردهای بهعنوان “سبکوزن” نامیده میشوند، به این معنی که آنها هسته سیستمعامل دستگاه را به اشتراک میگذارند و سربار اتصال یک سیستمعامل را با هر برنامه از بین میبرد.
کانتینرها ظرفیت کمتری دارند و نیاز به زمان راهاندازی کمتری نسبت به ماشینهای مجازی دارند و بهطور قابلتوجهی ظروف بیشتری را با همان قدرت محاسباتی بهعنوان یک VM واحد اجرا میکنند. درنتیجه، کارایی سرور بهبود مییابد، کاهش هزینههای سرور و صدور مجوز.
نمودار زیر نشان میدهد که چگونه برنامههای کانتینری کار میکنند.
یک ظرف داکر، همانطور که در این شکل نشان دادهشده است، شامل یک برنامه و هر باینری یا کتابخانهای است که برنامه نیاز به اجرا دارد. داکر، که در بالای سیستمعامل اجرا میشود، مسئول کانتینر (ویندوز 10، ویندوز سرور 2016 یا لینوکس) است.
استراتژی کانتینری فوقالذکر را با شکل زیر مقایسه کنید، که نشان میدهد برنامههای قابلمقایسه در ماشینهای مجازی بهجای ظروف کار میکنند.
یک ماشین مجازی (VM) یک قطعه نرمافزاری است که به شما اجازه میدهد تا نرمافزار دیگری را در داخلان نصب کنید و آن را بهجای نصب مستقیم آن بر روی کامپیوتر، عملاً کار کنید. هنگامیکه ما نیاز به تمام منابع سیستمعامل برای اجرای چندین برنامه داریم، ماشینهای مجازی (VMs) مفید هستند زیرا از سیستمعاملهای مختلف پشتیبانی میکنند و امنتر هستند.
از سوی دیگر، یک ظرف داکری یک قطعه نرمافزاری است که اجازه میدهد جنبههای جداگانهای از یک برنامه بهطور مستقل کار کند. ظروف مهم هستند که ما نیاز به حداکثر رساندن عملکرد برنامههای در حال اجرا درحالیکه استخدام کمترین سرور ممکن است. این نیاز به حافظه بسیار کمتری دارد و بسیار کمتر امن است.
بسیاری از کاربران رایجترین سؤال را میپرسند: چرا از داکر استفاده میکنید؟ پاسخ این است که برنامههای کانتینری مزایای مختلفی دارند که عبارتاند از:
شما میتوانید برنامه containerized خود را به هر سیستم دیگری که Docker را پس از آزمایش آن اجرا میکند، گسترش دهید. شما میتوانید مطمئن باشید که دقیقاً همان کاری را انجام میدهد که در طول آزمایش انجام داد.
اگرچه ماشینهای مجازی جایگزینی برای ظروف هستند، ظروف حاوی یک سیستمعامل نیستند (درحالیکه ماشینهای مجازی انجام میدهند)، که به این معنی است که ظروف دارای ردپای قابلتوجهی کوچکتر هستند و ساخت و شروع سریعتر از ماشینهای مجازی هستند.
مزایای قابلیت حمل و عملکرد کانتینرها میتواند به ایجاد روند توسعه شما روانتر و پاسخگوتر کمک کند. با استفاده از ظروف و فناوری مانند Enterprise Developer Build Tools برای ویندوز برای بهبود ادغام مداوم و فرایندهای تحویل مداوم، ارائه نرمافزار مناسب در زمان مناسب را آسانتر میکند. Enterprise Developer Build Tools for Windows بخشی از Enterprise Developer است که تمام ویژگیهای Enterprise Developer را برای کامپایل، ساخت و آزمایش کد COBOL بدون نیاز به IDE فراهم میکند.
هر نرمافزار پشتیبانی که برنامه شما نیاز دارد نیز در یک ظرف داکر که میزبان یکی از برنامههای شما است گنجاندهشده است. این یک مشکل نیست اگر دیگر ظروف داکر شامل برنامههایی باشند که نیاز به نسخههای مختلف از همان نرمافزار پشتیبانی میکنند، زیرا ظروف Docker کاملاً مستقل هستند.
این همچنین به این معنی است که همانطور که شما از طریق مراحل چرخه عمر توسعه خود پیشرفت میکنید، میتوانید اطمینان داشته باشید که ایمیجی که در طول توسعه ایجاد میکنید، در آزمایش و بهطور بالقوه در مقابل کاربران شما یکسان عمل میکند.
اگر تقاضا برای برنامههای شما ضروری است، میتوانید بهسرعت ظروف جدید تولید کنید. شما میتوانید انواع تکنیکهای مدیریت ظرف در هنگام استفاده از ظروف متعدد استفاده کنید. برای اطلاعات بیشتر در مورد این انتخابها، با کتابچه راهنمای Docker مشورت کنید.
هنگام استفاده از Docker، با اصطلاحات زیر مواجه خواهید شد:
یک منبع اجتماعی برای کار با Docker که در ابر میزبانی میشود. Docker Hub بیشتر برای میزبانی ایمیجها استفاده میشود، اما همچنین برای احراز هویت کاربر و اتوماسیون ایمیج سازی استفاده میشود. هر کسی میتواند ایمیج را بهصورت رایگان در Docker Hub آپلود کند. افراد یا سازمانهایی که تصاویر را به Docker Hub میدهند بههیچوجه بررسی یا تأیید نمیشوند.
فروشگاه داکر یک مخزن مبتنی بر ابر است که قابلمقایسه با Docker Hub است، با این تفاوت که ایمیجهای موجود در فروشگاه داکر توسط کسبوکارهای تجاری که داکر تأیید یا تأیید کرده است، کمک کرده است.
یک فایل متنی با دستورات برای ایجاد یک ایمیج Docker. دستوراتی که میتوانید در یک Dockerfile مشخص کنید از پیچیده (مانند مشخص کردن یک ایمیج موجود برای استفاده بهعنوان پایه) تا پایه (مانند مشخص کردن یک ایمیج موجود برای استفاده بهعنوان پایه) (مانند کپی کردن فایلها از یک دایرکتوری به دیگری) متغیر است.
بهعنوانمثال، شما میتوانید یک Dockerfile ایجاد کنید که با ایمیج اوبونتو شروع میشود و سپس وب سرور اپاچی، برنامه شما و سایر پارامترهای پیکربندی موردنیاز شما را اضافه میکند. دستور ساخت docker برای ایجاد یک ایمیج از Dockerfile استفاده میشود.
یک بسته قابلاجرا و مستقل که میتواند در یک ظرف استفاده شود. یک ایمیج داکر یک باینری است که شامل تمام اجزای لازم برای اجرای یک کانتینر داکر و ابرِ داده است که نیازها و قابلیتهای کانتینر را مشخص میکند.
یک ایمیج شامل همهچیز موردنیاز برای اجرای یک برنامه، ازجمله کد اجرایی، هر نرمافزاری که برنامه به آن متکی است و هرگونه تنظیمات پیکربندی لازم است. شما میتوانید ایمیجهای خود را ایجاد کنید (با استفاده از Dockerfile) یا از ایمیج ایجادشده توسط دیگران استفاده کنید و در یک رجیستری (مانند Docker Hub) در دسترس قرار دهید.
دستور ساخت docker برای ایجاد یک ایمیج از Dockerfile استفاده میشود. دستور docker run برای اجرای یک ایمیج در container استفاده میشود.
اصطلاح “گودال ماسه بازی” به یک محیط محاسباتی اشاره دارد که در ان هر چیزی که در داخل آن اتفاق میافتد در داخل گودال ماسه بازی باقی میماند. اگر “rm −rf” را در داخل گودال ماسه بازی اجرا کنید، محتویات گودال ماسه بازی حذف خواهد شد، اما سیستم میزبان که دارای گودال ماسه بازی است، تحت تأثیر قرار نخواهد گرفت.
ایمیجهای داکر شامل کد منبع برنامه اجرایی و ابزارهای موردنیاز، کتابخانهها و وابستگیهای موردنیاز برای اجرای کد برنامه در یک ظرف است. هنگامیکه ایمیج Docker را اجرا میکنید، یک نمونه ظرف (یا چند) از کد ایجاد میکند.
اگرچه امکان ایجاد یک ایمیج Docker از ابتدا وجود دارد، اکثر توسعهدهندگان از مخازن محبوب استفاده میکنند. یک ایمیج پایه میتواند برای ایجاد چندین ایمیج داکر استفاده شود و تمام تصاویر ایجادشده یک پشته را به اشتراک میگذارند.
لایهها تصاویر داکر را تشکیل میدهند و هر لایه نشاندهنده نسخه متفاوتی از ایمیج دادهشده است. یکلایه بالا جدید هر زمان که یک توسعهدهنده تغییرات خاصی را در ایمیج موردنیاز ایجاد میکند، ایجاد میشود و این لایه بالا جایگزین لایه بالا قبلی بهعنوان نسخه فعلی ایمیج میشود. لایههای قبلی بهصورت عقبگرد نگهداری میشوند یا در پروژههای آینده دوباره استفاده میشوند.
یکلایه ظرف جدید هر زمان که یک ظرف از یک ایمیج داکر تشکیل میشود ایجاد میشود. تغییرات در ظرف، به معنی اضافه کردن یا حذف فایلها، فقط در لایه ظرف ذخیره میشود و تنها درحالیکه ظرف در حال اجرا است قابلمشاهده است. این فرایند ایجاد ایمیج تکراری کارایی کلی را بهبود میبخشد زیرا موارد متعدد کانتینر زنده میتوانند از یک ایمیج پایه واحد اجرا شوند و یک پشته را به اشتراک بگذارند.
Docker daemon سرویسی است که بر روی سیستمعاملهای شما مانند ویندوز، macOS یا iOS اجرا میشود. این سرویس خاص، که بهعنوان مرکز کنترل اجرای Docker عمل میکند، تصاویر Docker شما را با استفاده از دستورات مشتری فردی تولید و مدیریت میکند.
یک رجیستری داکر یک مکانیسم ذخیرهسازی و توزیع ایمیج Docker منبع باز است. رجیستری به کاربران اجازه میدهد تا نسخههای ایمیج را در مخازن با برچسب زدن آنها پیگیری کنند. Git، یک ابزار کنترل نسخه، نیز برای انجام این کار استفاده میشود.
پروژه داکر خود را بهعنوان “داکر برای همه” تبلیغ میکند. و دلیل آن سهولت استفاده از آن است. حتی یک فرد غیر فنی بهراحتی میتواند هر پروژه Docker را تنها با چند دستور شروع و اجرا کند، زیرا این تکنولوژی بسیار ساده است و بهطور کامل منبع باز است.
فرض کنید که یک تیم متشکل از چهار توسعهدهنده در حال کار بر روی یک پروژه واحد هستند. درعینحال، یکی از ویندوز استفاده میکند و دیگری از لینوکس استفاده میکند و سوم و چهارم از macOS استفاده میکنند. همانطور که میبینید، آنها از محیطهای جداگانه برای ایجاد یک برنامه یا نرمافزار واحد استفاده میکنند و باید کارهایی را با توجه به دستگاههای خود انجام دهند، مانند نصب کتابخانهها و فایلهای مختلف برای سیستم خود و غیره.
و در چنین شرایطی، بهویژه در سطح بالاتر یا سازمانی، اغلب منجر به درگیریها و چالشهای متعدد در طول چرخه عمر توسعه نرمافزار میشود. از سوی دیگر، راهحلهای کانتینر سازی مانند Docker این مسئله را از بین میبرد.
داکر Compose یک سرویس مفید است که به کاربران اجازه میدهد چندین کانتینر را بهعنوان یک کانتینر اجرا کنند. تمام ظروف فردی در اینجا در حالت انزوا اجرا میشوند، اما در صورت نیاز میتوانند با یکدیگر ارتباط برقرار کنند. زبان اسکریپت YAML، که به معنای زبان نشانهگذاری دیگری است و بر اساس XML است، نوشتن فایلهای Docker را راحتتر میکند. یکی دیگر از ویژگیهای عالی Docker Compose این است که کاربران میتوانند از یک دستور واحد برای فعال کردن تمام سرویسها (ظروف) استفاده کنند.
شما باید از یک ابزار ارکستراسیون کانتینر برای نظارت و مدیریت چرخههای کانتینر در تنظیمات پیچیدهتر استفاده کنید. اگرچه داکر ابزار ارکستراسیون یکسان خود (Docker Swarm) را دارد، اکثر توسعهدهندگان Kubernetes را ترجیح میدهند.
سخن پایانی
داکر یک ابزار فوقالعاده است که در روند استقرار مداوم کمک میکند. این بهخوبی با نرمافزار مدیریت پیکربندی موجود یکپارچهشده است. اکوسیستم بزرگ و درحالتوسعه آن دارای طیف گستردهای از برنامههای کاربردی است. داکر مزایای زیادی دارد و میتواند به شما در ساخت برنامههای کانتینری و برنامههای چند کانتینری کمک کند. و این چابکی در ارایهی خدمات طبق DevOps و ITIL.