داکر چیست ؟
داکر - : Docker برنامهای رایانهای و ابزاری است که ایجاد، توسعه و اجرای اپلیکیشنها را با استفاده از کانتینر(container) آسان میکند.
کانتینر به توسعهدهندگان این امکان را میدهد که تمام پیشنیازها و نیازمندیهای اپلیکیشن خود را برای استفاده و اجرا جمعآوری کنند؛ مانند کتابخانهها (Libraries) و زیرساختهای لازم.
میتوان گفت که داکر به توسعهدهندگان این اطمینان را میدهد که میتوانند اپلیکیشن خود را بدون نگرانی از سیستمهای میزبان برنامه خود در مرحله توسعه و تست و بر روی سیستمهای مختلف، بدون هیچگونه اشکال و به صورت کاملاً مشابه اجرا کنند و مشکلی از بابت تغییر سیستمعاملهای اجراکننده برنامه خود نخواهند داشت.
داکر تا حدی شبیه به ماشین مجازی (Virtual Machine) است با این تفاوت که در ماشین مجازی، قسمتی از سختافزار سیستم به ماشین مجازی اختصاص داده میشود و روی آن یک سیستمعامل کامل نظیر ویندوز یا لینوکس نصب میشود.
در واقع میتوان گفت در ماشین مجازی امکانات سختافزاری سیستم تقسیم میشود و بر روی هر قسمت، سیستمعامل بخصوصی بالا میآید اما در داکر این طور نیست. در داکر امکانات سختافزاری به تناسب نیاز هر کانتینر به صورت موقت اختصاص داده میشود و داکر این امکان را فراهم میآورد که اپلیکیشنها برای مثال روی کرنل لینوکس اجرا شوند. در این حالت دیگر نیازی به نصب پیشنیازها و نیازمندیهایی که اپلیکیشن ما میخواهد و به طور پیشفرض روی سیستم وجود ندارد، نیست.
داکر ابزاری است متنباز (Open Source) و کدهای آن بر روی گیتهاب قرار دارد و هر فرد علاقهمند میتواند در توسعه آن مشارکت کند.داکر در سال ۲۰۱۳ شروع به کار کرد و توسط شرکت داکر توسعه داده میشود. این سرویس به دو نوع رایگان و پولی در دسترس است.
داکر برای چه کسانی مناسب است ؟
داکر طراحی شده است تا هم به توسعهدهندگان نرمافزارها سود برساند و هم به مدیران سیستمها.
داکر باعث میشود که توسعهدهندگان تمرکز خود را روی نوشتن کد بگذارند و نگران این نباشند که در نهایت قرار است اپلیکیشن آنها روی چه سیستمی اجرا شود. همچنین به آنها کمک میکند که پروژه خود را با استفاده از برنامههای از پیش طراحی شده در کانتینرها آغاز کنند که به عنوان بخشی از اپلیکیشن آنها استفاده خواهد شد. ضمناً باعث انعطاف عمل تیم عملیات (Operation) شده و نیاز به سیستمهای مورد نیاز را کمتر میکند.
کانتینر – container :
کانتینر، یک واحد استاندارد نرمافزار است که کدها و تمام نیازمندیهای آن را جهت اجرا و توسعه اپلیکیشنها، تجمیع میکند و باعث میشود که این اجرا به طور سریع و قابل اعتماد انجام شود. کانتینرها، نرمافزار را از محیط خودش ایزوله میکنند و اطمینان میدهند که علیرغم تفاوتهای احتمالی در سیستمهای میزبان، نرمافزار به طرز مشابه و یکسان اجرا خواهد شد.
کانتینرهای داکر قسمتی از نرمافزار را در یک سیستم فایل کامل تعبیه میکند. به صورتی که شامل هر آنچه جهت اجرا شدن (مانند کد زمان اجرا، ابزارهای سیستم و تنظیمات سیستم) لازم است و هر آنچه که میتواند بر روی یک سرور نصب شود میباشد. این امر اجرای برنامه را به صورت ثابت در هر نوع محیطی تضمین میکند.
به طور کلی میتوان گفت داکر این قابلیت را به ما میدهد تا یک اپلیکیشن را در یک محیط ایزوله به نام کانتینر (Container) اجرا کنیم. ایزوله بودن و امنیت کانتینرها باعث میشود که بتوانیم تعداد زیادی کانتینر را روی ماشین میزبان اجرا کنیم. کانتینرها سبک و سریع هستند زیرا نیازی ندارند که مانند ماشینهای مجازی سربار Hypervisor را به ماشین تحمیل کنند و مستقیما روی هسته (Kernel) کامپیوتر سرویسدهنده اجرا میشوند.
موتور داکر :
موتور داکر یک تکنولوژی Containerize برای ساختن و اجرای کانتینر اپلیکیشنهاست. این موتور اعمال خود را به عنوان یک اپلیکیشن کلاینت-سرور انجام میدهد با:
الف - یک سرور که نوعی نرم افزار با مدت زمان اجرای طولانی است که به آن پروسه Daemon گفته میشود.
ب - یک REST API که واسط کاربری نرم افزارها برای ارتباط و دادن دستورات به Daemon است.
ج - یک کلاینت خط فرمان یا Command Line Interface
کلاینت از APIهای داکر برای کنترل و تعامل با Daemon استفاده میکند. این استفاده از طریق اسکریپتها یا فرمانهای مستقیم کلاینت انجام میشود. Daemon وظیفه دارد که اشیای داکر مانند Imageها، Containe ها، شبکهها و Volumeها را ایجاد و مدیریت کند.
تفاوت داکر با ماشین مجازی :
یک کانتینر به صورت native روی لینوکس اجرا میشود و به صورت مشترک با سیستمعامل از کرنل استفاده میکند. کانتینر یک فرآیند مجزا را اجرا میکند و مانند یک فرآیند معمولی حجم کمی از RAM را میگیرد.
در مقابل، ماشین مجازی یا همان VM یک سیستمعامل کامل مجازی guest را با دسترسی مجازی و شبیهسازی شده به منابع اصلی سیستم، اجرا میکند. ماشینهای مجازی مقدار بسیار زیادی سربار نسبت به حجم فرآیند مورد نیاز ما برای سیستم ایجاد میکنند.
هر Container داکر با یک فایل داکر شروع به کار میکند. Dockerfile یک فایل متنی بوده که داخل آن با یک سینتکس ساده و قابل فهم دستورالعملهای ساخت Docker Image قرار داده شده است (کمی جلوتر این مفهوم را بررسی خواهیم کرد) این فایل اطلاعات بسیار مهمی را در برمی گیرد که برای راه اندازی داکر استفاده از آنها ضروری است.
در واقع Dockerfile مشخص میکند که پشت Container ما چه سیستم عاملی قرار بگیرد، همینطور از چه زبان ها، متغیرهای محلی، پورتهای شبکه یا غیره استفاده شود. و مهمتر از همه اینکه مشخص کند Container ما بعد از اینکه واقعا اجرا شد قرار است چه کاری انجام دهد.
بخش مهم داکر یا Docker image :
در واقع زمانی که کار نوشتن Dockerfile را تمام کردید، یک قابلیت به اسم Docker Build را فراخوانی میکنید که وظیفه دارد یک Image بر اساس محتویات Dockerfile شما بسازد. Dockerfile شامل یک سری دستورالعمل برای ساختن یک Image است، در حالی که Docker Image یک فایل قابل حمل است که شامل یک سری دستورالعمل بوده که مشخص میکند Container کدام کامپوننتهای نرم افزاری را اجرا کند و اینکه چطور آنها اجرا شوند.
به احتمال زیاد Dockerfile بخواهد تعدادی فایل را از مخزنهای مختلف (Repository) دانلود کند و اینجا باید به طور واضح مشخص کنید که کدام نسخهها دریافت شوند. همینطور Image ساخته شده استاتیک میباشد، یعنی یک بار ساختن آن کافی بوده و نیازی به تغییر آن ندارید. همانطور که از اسم آنها میتوانید حدس بزنید، Image یک تصویر از سیستم عامل اصلی میباشد.
نتیجه گیری :
داکر یک ابزار اوپن سورس برای طراحی و ساخت برنامهها به کمک Container است. Container به برنامه نویس کمک میکند که پروژه خود را با تمام بخش هایی که دارد (مثل کتابخانه ها، وابستگیها و غیره) به صورت یک پکیج دربیاورد. به لطف این تکنیک، برنامه نویس خیالش راحت است که برنامه او میتواند در سیستمهای دیگر بدون نیاز به تنظیمات خاص یا ابزارهای جانبی اجرا شود. داکر را شبیه به ماشین مجازی در نظر بگیرید، با این تفاوت که بازدهی بسیار بالاتری دارد.