§ داکر چیست؟
Docker یک پروژه Open source است که ایجاد کانتینر و برنامه های مبتنی بر آن را آسان تر می کند. در واقع هدف ساخت داکر، ایجاد تعامل راحت تر با کانتینر ها بود. داکر که در ابتدا برای لینوکس ساخته شد، اکنون روی ویندوز و مک هم اجرا می شود.
داکر (docker) نوعی پلتفرم برای ساخت برنامه های کاربردی یا اپلیکیشن های مبتنی بر container است در واقع داکر امکانی ایجاد کرده که پروسه ها و نرم افزار ها بتوانند به شکل جدا از هم در محیط کاملاً ایزوله ای بر روی کرنل لینوکس راه اندازی شوند. محیط های اجرای کوچک و سبکی که از هسته سیستم عامل به صورت مشترک استفاده میکنند اما در عین حال میتوانند جدا از یکدیگر هم اجرا شوند.
§ کانتینر (Container) چیست؟
یکی از اهداف توسعه نرم افزار های مدرن این است که اپلیکیشن ها بتوانند روی یک هاست یا کلاستر به صورت جدا از هم باقی بمانند تا عملکرد و سایر فعالیت هایشان روی هم تاثیری نگذارد. اما ماجرا به همین سادگی نیست! به خاطر استفاده از پکیج ها، کتابخانه ها و سایر کامپوننت های نرم افزاری، انجام این کار بسیار دشوار خواهد بود.
کانتینر ها (container) از سال های قبل هم مفهومی شناخته شده در عرصه فناوری بودند، با شروع به کار پروژه اوپن سورس Docker، محبوبیت این فناوری بسیار زیاد شد و به روند گسترش کانتینر ها و میکرو سرویس ها در توسعه نرمافزار که با نام cloud-native development یا توسعه ابری شناخته میشوند، کمک زیادی کرد.
یک راهحل خوب برای این مشکل، استفاده از ماشین های مجازی (Virtual Machine) است که می تواند برنامه ها را روی یک بستر سخت افزاری، به صورت جدا از هم نگه دارد و کاری کند که کامپوننت ها در کار هم دخالتی نکنند و رقابت برای منابع سخت افزاری را به حداقل برساند.
اما برای استفاده از Virtual Machine یک مشکل اساسی وجود دارد. ماشین های مجازی نرم افزار های سنگین و حجیمی هستند. همچنین هر برنامه برای خودش به یک سیستم عامل خاص نیاز دارد که حجمشان به چندین گیگا بایت می رسد. بنابراین نگهداری و ارتقای ماشین های مجازی کاری دشوار و هزینه بر است.
کانتینر ها محیط اجرای برنامه ها را از یکدیگر جدا میکنند، اما هسته اصلی سیستم عامل را به اشتراک میگذارند. حجم آن ها معمولاً در حد مگا بایت است و از منابع خیلی کمتری نسبت به ماشینهای مجازی استفاده میکنند. یکی دیگر از محاسن کانتینر در مقابل ماشین مجازی، مسئله زمان است. Virtual Machine برای اجرا شدن به زمان خیلی زیادی نیاز دارد اما کانتینر بسیار سریع و در همان لحظه اجرا می شود.
برای درک نحوه کارکرد آن، بیایید تا نگاهی به برخی از اجزایی که برای ایجاد برنامه های حاوی Docker استفاده میشود، بیاندازیم:
§ Docker file
هر کانتینر داکر با یک Dockerfile شروع میشود. Dockerfile یک فایل متنی است که به صورت ساده و قابل فهم نوشته شده و شامل دستورالعمل های ساخت Docker Image است. Dockerfile نوع سیستم عامل را مشخص میکند و نشان میدهد در آن چه زبانها، متغیرهای محیطی، مکان فایلها، پورتهای شبکه و… استفاده شود. جدا از اینها، داکر فایل تعیین میکند پس از اینکه کانتینر اجرا شد، چه کارهایی را باید انجام دهد.
§ Docker image
هنگامی که Dockerfile را نوشتید، قابلیتی به نام Docker Build را فراخوانی میکنید. این قابلیت وظیفه دارد یک Image بر اساس محتویات Dockerfile شما بسازد. داکر فایل حاوی یک سری دستورالعمل برای ساختن یک Image است، در حالی که Docker Image یک فایل قابل حمل است که یک سری دستورالعمل دارد و مشخص می کند کانتینر، کدام کامپوننت های نرم افزاری را اجرا کند و این اجرا چطور باشد.
از آنجایی که یک Dockerfile احتمالاً شامل دستورالعمل هایی در مورد دریافت برخی کامپوننت های نرم افزاری از مخازن آنلاین است، بنابراین باید دقت داشته باشید که نسخه های مناسب را دقیقاً مشخص کنید. یعنی معلوم کنید که میخواهید کدام بسته ها دریافت شوند. در غیر این صورت بسته به زمان فراخوانی، ممکن است Dockerfile شما تصاویر متناقضی تولید کند. Image یک تصویر استاتیک از سیستم عامل اصلی شما است.
§ داکر چه مزیتهایی دارد؟
کانتینر های داکر روشی را برای ساخت برنامه های شرکتی و تجاری ارائه میدهند که جمع آوری، نگهداری و جا به جایی آن ها آسان تر از نمونه های معمولی است.
§ کانتینر های داکر امکان ایزوله شدن را فراهم میکند
کانتینر های داکر برنامه ها را نه تنها از یکدیگر، بلکه از سیستم عامل هم جدا میکنند. این کار جدا از اینکه باعث ایجاد stack نرم افزاری مرتب تری میشود، استفاده از یک برنامه کانتینری با بهره گیری منابع سیستم عامل مانند پردازنده، پردازنده گرافیکی، حافظه، I/O، شبکه و . . . را هم آسان میکند. همچنین اطمینان از جدا بودن داده ها و کد را هم راحت تر میکند.
§ کانتینرها امکان جا به جایی را ایجاد می کند
یک کانتینر داکر روی هر دستگاهی که از محیط کارکرد کانتینر پشتیبانی کند، کار خواهد کرد. نیازی نیست که برنامه ها به سیستم عامل میزبان گره خورده باشند، بنابراین هم محیط برنامه و هم محیط سیستم عامل اصلی را میتوان بهینه نگه داشت، مثلاً یک کانتینر MySQL برای لینوکس در اکثر سیستم های لینوکسی که از کانتینر ها پشتیبانی میکنند، اجرا میشود. همه وابستگی های برنامه معمولاً در یک کانتینر قرار خواهند گرفت.
برنامه های مبتنی بر کانتینر را میتوان به راحتی از سیستم های on-prem به محیط های ابری یا از لپ تاپ های برنامه نویسان به سرور ها منتقل کرد به شرطی که سیستم هدف، از Docker و سایر ابزار های third-party که ممکن است از آن استفاده شود، پشتیبانی کند.
معمولاً ایمیج های کانتینر داکر باید برای یک سیستم عامل خاص ساخته شوند. مثلاً کانتینر ویندوز در لینوکس اجرا نمیشود و بالعکس. پیش از این، یکی از راه های دور زدن این محدودیت، راه اندازی ماشین مجازی بود که نمونه ای از سیستم عامل مورد نیاز را اجرا میکرد.
§ بعد از اینکه OVF مربوطه را در ESXI اضافه کردیم، در داخل این Centos نصب شده و یک داکر راه اندازی و پیاده سازی شده است که در حال اجرا می باشد.