داکر چیست؟ | کاربرد Docker چیست؟
Docker یا داکر چیست؟ یک محیط نرمافزاری با استفاده از Container است. کانتینرها محیطهای کوچک و ایزوله شده است که تمام نیازمندیها و پیشنیازها برای اجرای برنامه را فراهم میکنند. امروزه کاربرد داکر بسیار زیاد است و بین توسعهدهندگان محبوبیت بالایی دارد. اما داکر چگونه کار میکند؟ در ادامه با ما همراه باشید تا مفهوم داکر را بررسی کنیم و در نهایت بدانیم که Docker چیست و چه کاربردی دارد؟
موضوعاتی که در این مقاله بررسی خواهیم کرد:
- Docker یا داکر چیست؟
- تاریخچه داکر
- Container در داکر چیست؟
- کاربرد داکر چیست؟
- اصطلاحات رایج در داکر (Docker)
- سیستمعامل مناسب برای نصب داکر (Docker) چیست؟
- مقایسه ماشین مجازی (Virtual Machine) با داکر (Docker)
Docker یا داکر چیست؟
داکر یک محیط نرمافزاری متن باز (Open Source) است که با استفاده از Container باعث میشود که برنامههای نرمافزاری در محیطهای ایزوله از هم قرار بگیرند بهطوری که کار هر برنامه روی برنامه دیگر اختلال ایجاد نکند. کانتینرها تمام پیشنیازها و نیازمندیها برای اجرای یک برنامه را فراهم میکنند. با وجود Container نیازی نیست که برای اجرای هر برنامه، تک تک نیازمندیهای آن را نصب کنیم.
داکر در دو نسخه Community Edition و Enterprise Edition ارائه شده است. نسخه Community Edition داکر بهصورت رایگان است و تمام نیازمندیهای تیمهای کوچک را فراهم میکند. نسخه Enterprise Edition داکر نیاز به خرید اشتراک پولی است و نسبت به نسخه رایگان آن امکانات بیشتری دارد.
تاریخچه داکر
- در سال 2006 پروسس کانتینر (Process Container) ارائه شد.
- در سال 2008 لینوکس کانتینر (Linux Container) ارائه شد که مقدمه خوبی برای استفاده از کانتینرها بود.
- در سال 2013 سرویس داکر (Docker) ارائه شد. شرکت Red Hat اعلام کرد که پروژههای Fedora, Red Hat Enterprise Linux, and OpenShift به سمت این سرویس خواهند رفت و از داکر حمایت خواهد کرد.
- در سال 2014 شرکت مایکروسافت اعلام کرد که نسخه آینده Windows Server را به سمتی خواهد برد که بتواند Docker Client را پشتیبانی کند. شرکت IBM نیز اعلام کرد که در آینده برای IBM Cloud خود از سرویس داکر استفاده خواهد کرد و شراکت (Partnership) خودش با سرویس داکر را اعلام کرد.
- در سال 2016 شرکت داکر نسخه تجاری داکر را تحت عنوان Enterprise Edition ارائه کرد.
Container در داکر چیست؟
کانتینر (Container) در فارسی به «ظرف» ترجمه شده است. همانطور که در قسمت داکر چیست؟ بیان شد، کانتینرها ظروف کوچک و ایزوله شدهای هستند که در داخل داکر وجود دارند. در محیط Docker میتوان چندین Container ایجاد کرد و در داخل هر Container میتوان برنامهها متفاوتی اجرا کرد.
برای مثال اگر بدون کانتینر بخواهیم یک پایتون ورژن 2 و سپس یک پایتون ورژن 3 نصب کنیم، پایتون ورژن 3، پایتون ورژن 2 را تحت تاثیر قرار خواهد داد و آن را به ورژن 3 آپگرید (Upgrade) خواهد کرد. اما با وجود داکر میتوان پایتون ورژن 2 را داخل یک Container و پایتون ورژن 3 را روی Container دیگر قرار داد، بهطوری که میتوان روی هر کدام برنامه متفاوتی ایجاد کرد. این ورژنها روی همدیگر تاثیری نخواهند داشت که به اصطلاح محیطهای ایزوله (جدا شده) از هم خواهند بود.
کاربرد داکر چیست؟
اکنون که دانستیم Docker چیست؟ و با Containerهای داکر آشنا شدیم، به سراغ کاربرد داکر میرویم. چرا باید از داکر استفاده کنیم؟ بگذارید با یک مثال کاربرد Docker را با هم بررسی کنیم:
کاربرد داکر در پروژههای شخصی
فرض کنید قرار است یک پروژه PHP با فریمورک Laravel بسازید. برای اجرای Laravel در سیستم خود باید نیازمندیهای لاراول را نصب کنید تا پروژه لاراول بدون مشکل اجرا شود. نیازمندیهای لاراول به شرح زیر است:
اول باید PHP را نصب کنید. سپس یک وب سرور Apache و یک پایگاه داده MySQL نصب کنید. بعد باید روی PHP پکیج منیجر Composer را نصب کنید. اگر بخواهید از دستورات npm نیز استفاده کنید باید Node.js را در سیستم خود نصب کنید. تا بتوانید یک پروژه لاراولی را اجرا کنید.
با وجود داکر دیگر نیازی به نصب این همه نیازمندی برای اجرای لاراول نیست. فقط باید داکر را روی سیستم خود نصب کنید و پروژه لاراولی خود را روی آن قرار دهید که به اصطلاح داکرایز (Dockerize) کردن پروژه میگویند. بعد از داکرایز شدن پروژه لاراول، داکر تمام Imageها و نیازمندیهایی که برای به اجرا در آوردن Laravel نیاز دارد را نصب میکند.
کاربرد داکر در پروژههای تیمی
شاید تا بحال برای شما نیز پیش آمده باشد که یک پروژه را در سیستم خود اجرا کنید و به درستی کار کند. اما وقتی آن پروژه را به شخص دیگری ارسال کرده باشید، به درستی کار نکند و با خود بگویید که «روی سیستم من به درستی کار میکرد».
تصور کنید شما یک پروژه لاراولی را با نصب تمام نیازمندیهای آن در سیستم خود دارید. این پروژه را میخواهید در اختیار یک شخص دیگر قرار دهید تا آن را در سیستم خود اجرا کند. بدون داکر آن شخص باید تمام نیازمندیهای لاراول مانند: Composer - MySQL - Apache - PHP و... را در سیستم خود نصب کند.
اما این تمام ماجرا نیست. ممکن است PHP که روی سیستم شما نصب باشد نسخه 8.2 باشد و PHP که روی سیستم آن شخص وجود دارد نسخه 7.4 باشد. با وجود نسخههای متفاوت از PHP احتمال زیاد این پروژه بهطور درست اجرا نخواهد شد یا با Error مواجه خواهد شد.
اما اگر پروژه شما داکرایز (Dockerize) باشد و روی داکر قرار گرفته باشد، فقط کافی است یک Image سبک از پروژه خود را در اختیار آن شخص قرار دهید. آن شخص نیز فقط باید داکر را روی سیستم خود نصب داشته باشد و آن Image را در آن قرار دهد.
با این کار تمام نیازمندیهای پروژه لاراول روی سیستم آن شخص نصب میشود. بدون اینکه نیاز باشد نیازمندیهای پروژه بهصورت تک تک دانلود و نصب شود و یا ورژنهای متفاوت آن خللی در اجرای پروژه وارد کند.
اصطلاحات رایج در داکر (Docker)
بعد از اینکه دانستیم داکر چیست و چه کاربردی دارد؟ به سراغ کامپوننتهای مورد استفاده در داکر میرویم:
Dockerfile
داکر فایل (Dockerfile) یک فایل متنی است که در آن دستورالعملهای ساخت Docker Image مشخص شده است.
Docker image
بعد از اینکه نوشتن داکر فایل (Dockerfile) به اتمام رسید، با فراخوانی Docker Build یک ایمیج (Image) بر اساس دستورالعملهای Dockerfile ایجاد میشود. داکر ایمیج (Docker image) یک فایل سبک و قابل حمل است و داخل آن دستورالعملهای وجود دارد.
این دستورالعملها مشخص میکند که Container کدام وابستگیها و نیازمندیهای نرمافزاری (مانند: کدها، نرمافزارهای سیستمی، کتابخانهها، تنظیمات سیستمی و...) را برای اجرای صحیح برنامه اجرا کند. Imageها در زمان اجرا تبدیل به کانتینر شده و روی Docker Engine اجرا میشوند.
Docker run
توسط دستور docker run یک Image توسط یک کانتینر در حال اجرا راه اندازی میشود. همچنین دستورات دیگری با نام docker stop برای متوقف کردن کانتینر، docker start برای اجرای کانتینر docker rm برای حذف یک کانتینر، docker rmi برای حذف یک ایمیج و... وجود دارد.
Docker Hub
داکرهاب یک سرویس ارائه شده توسط داکر است. در واقع Docker Hub یک مخزنی است که تمام Imageهای موجود هر برنامه در آن وجود دارند. هر کاربر نیز میتواند Imageهای خود را داخل این مخزن قرار دهد تا کاربران دیگر نیز از آن استفاده کنند.
Docker Compose
Compose، ابزاری برای تعریف و اجرای برنامههای چند کانتینری داکر است. به وسیلهی Compose میتوانید از یک فایل YAML استفاده کنید تا سرویس اپلیکیشن خود را پیکربندی (Configure) کنید. سپس میتوانید با استفاده از یک دستور (Command)، تمام سرویسهای خود را بر اساس پیکربندی دلخواه خود ایجاد و فعال کنید.
Docker Swarm
Docker Swarm گروهی از ماشینهای مجازی یا فیزیکی است که اپلیکیشن داکر را اجرا میکنند و همچنین برای پیوستن به همدیگر در یک دسته (خوشه یا Cluster) پیکربندی (Configuration) میشوند. در واقع Docker Swarm به کاربر این امکان را میدهد که چند Container که روی چند ماشین میزبان توسعهداده شده است را مدیریت کند.
Docker Daemon
یک فرایندی است که در پس زمینه اجرا میشود. Daemon وظیفه دریافت دستورات و ارسال آنها به Container از طریق خط فرمان را بر عهده دارد.
Docker Engine
موتور داکر (Docker Engine) یک تکنولوژی Containerize برای ساختن و اجرای کانتینر اپلیکیشنهاست. در حقیقت وقتی نرمافزار داکر را باز میکنیم، یک موتور داکر اجرا میشود تا به وسیله آن بتوانیم Imageها و Containerهای خود را ایجاد و مدیریت کنیم.
سیستمعامل مناسب برای نصب داکر (Docker) چیست؟
در گذشته داکر برای سیستم عامل لینوکس (Linux) ساخته شده بود. در حقیقت داکر با لینوکس بسیار سازگار است. اما امروزه میتوان داکر را روی سیستمعاملهای ویندوز (Windows) و مک (Mac) نیز نصب و اجرا کرد.
اما نصب داکر روی ویندوز و مک به راحتی لینوکس نیست و برای نصب آن نیاز به ابزارها و پیشنیازهایی وجود دارد که در مقاله زیر آموزش نصب داکر در ویندوز را آموزش دادهایم:
مقایسه ماشین مجازی (Virtual Machine) با داکر (Docker)
احتمالا اگر با ماشین مجازی (Virtual Machine) کار کرده باشید و بعد از دانستن این موضوع که داکر چیست؟ به ذهن شما خطور کند که ماشین مجازی هم دقیقا همین کار ایزوله کردن پروژه را انجام میدهد پس چه تفاوتی بین داکر و ماشین مجازی وجود دارد؟ ابتدا شباهت ماشین مجازی با داکر را بررسی کنیم و سپس به تفاوتهای آنها بپردازیم:
شباهت ماشین مجازی با داکر چیست؟
با استفاده از ماشینهای مجازی (Virtual Machine) مانند VMWare و VirtualBox میتوان داخل یک سیستمعامل مانند ویندوز یک سیستمعامل دیگر مانند لینوکس یا ویندوز با نسخههای متفاوت نصب کرد. در واقع ماشین مجازی یک نرمافزاری است که سختافزار سیستم مانند Hard ،Ram ،CPU و... را بهطور مجازی شبیهسازی میکند.
در واقع شما یک کامپیوتر دیگر با مشخصات سختافزاری دیگر شبیهسازی میکنید و میتوانید روی این سختافزار، سیستمعامل خود را نصب کنید و روی آن نرمافزارهای خود را نصب کنید. با استفاده از ماشین مجازی میتوانید هر چقدر سیستمعامل که نیاز دارید روی سیستم خود نصب کنید، بهطوری که ایزوله از هم هستند و روی همدیگر تاثیری ندارند.
در داکر نیز مانند ماشین مجازی میتوان برنامهها را از همدیگر ایزوله کرد بهطوری که روی یکدیگر تاثیر نگذارند و هر کدام وظیفه خاص خودشان را انجام دهند.
تفاوت ماشین مجازی با داکر چیست؟
برای ایجاد یک برنامه در ماشین مجازی ابتدا باید یک سختافزار مجازیسازی کنید و سپس روی آن یک سیستمعامل نصب کنید و روی آن سیستمعامل برنامه خود را نصب و اجرا کنید. اگر بخواهید هر برنامه دیگری که نصب میکنید، ایزوله و جدا از محیط برنامه دیگر باشد و روی آن تاثیری نگذارد، باید هر بار سختافزار مجازیسازی کنید، روی آن سیستم عامل نصب کنید و روی سیستمعامل برنامه را اجرا کنید.
اما در داکر اگر بخواهید یک برنامه را از برنامه دیگر ایزوله کنید، باید برای هر برنامه یک Container بسازید. این Containerها جدا از هم هستند و روی یکدیگر تاثیری نمیگذارند. اما این Containerها از سختافزار و سیستمعامل مشترک استفاده میکنند. یعنی نیازی نیست که برای هر Container، یک سختافزار جداگانه و سیستمعامل جداگانه ایجاد کنیم.
- پس ماشینهای مجازی نسبت به داکر سنگین هستند و مصرف Ram و CPU بالایی دارند. چون برای اجرا باید هم سختافزار جداگانه برای آن شبیهسازی شود و هم سیستمعامل جداگانه روی هر سختافزار نصب شود. علاوه بر آن، خود ماشین مجازی نیز برای اجرا Ram زیادی مصرف میکند. اما داکر فوقالعاده سبک است.
- برای اجرای برنامههای ایزوله در ماشینهای مجازی زمان زیادی به هدر میرود. چون برای اجرای هر برنامه باید سختافزار شبیهسازی شود و سپس یک سیستمعامل روی آن نصب شود تا یک برنامه اجرا شود.
- ماشین مجازی از سختافزار و سیستمعامل جداگانه استفاده میکند اما داکر از یک سختافزار و یک سیستمعامل مشترک استفاده میکند و فقط Containerها از هم ایزوله هستند.
- ماشین مجازی نسبت به داکر ایزولهتر است چون از سختافزار و سیستمعامل جداگانه استفاده میکند. اما این دلیل بر ایزوله نبودن داکر نیست.
جمعبندی
در این مقاله دانستیم که داکر چیست؟ و سپس با بررسی کاربرد داکر و اصلاحات رایج در آن به مقایسه داکر با ماشین مجازی رسیدیم. امروزه استفاده از داکر برای توسعهدهندگان به خصوص مهندسین دواپس (DevOps) مزایای زیاد دارد و به یکی از ابزارهای مهم و تاثیرگذار تبدیل شده است. اگر مطلبی درباره اینکه Docker چیست؟ برای شما در این مقاله مبهم بود، لطفا در قسمت نظرات بیان کنید تا در اسرع وقت پاسخ دهیم.