داکر یک موتور کانتینری است و از ویژگیهای هستهی لینوکس مانند فضاها نام و گروههای کنترل برای ایجاد کانتینر در بالای یک سیستمعامل استفاده میکند. بنابراین میتوانید داکر را یک مجازیسازی در سطح سیستمعامل نیز نامید. پروژهی متنباز داکر به زبان Go نوشته شده و بهوسیلهی Dotcloud توسعهیافته است. داکر ابتدا روی کانتینر لینوکس (LXC) ساخته شد و بعد Docker LXC را با کانتینر Runtime Libcontainer خودش جایگزین کردند.
ممکن است از خودتان بپرسید کانتینر لینوکس (LXC) و داکر که از نظر مفاهیم و پیادهسازی شبیه به یکدیگر هستند چه تفاوتی با هم دارند؟ داکر علاوهبر اینکه دارای فناوری کانتینری است، دارای اجزای بستهبندی کاملن مشخصی است که کاربردهای بستهبندی را آسان میکند. قبل از فناوری داکر، اجرای کانتینرها آسان نبود. به این معنا که تمام کارها از زیرساخت تا بستهبندی همهی نیازهای کاربردی سیستم در کانتینر انجام میشد. در وبسایت ابر آروان میتوانید بهسادگی و با سرعت کانتینر ابری ابر آروان را راهاندازی کرده و از آن استفاده کنید.
تفاوت بین داکر و کانتینر
داکر یک فناوری یا ابزاری است که برای مدیریت کارآمد کانتینرها استفاده میشود. احتمالن این پرسش برای شما مطرح شده که آیا میتوانید یک کانتینر را بدون داکر اجرا کنید؟ بله. شما میتوانید از فناوری LXC برای اجرای کانتینرها در سرورهای لینوکس استفاده کنید. علاوهبراین، ابزارهایی مانند Podman خدمات مشابهی مانند داکر را ارایه میدهند.
مواردی که باید دربارهی داکر بدانید:
- داکر LXC نیست.
- داکر یک ماشین مجازی نیست.
- داکر یک سیستم مدیریت پیکربندی نیست و جایگزینی برای Chef، Puppet و Ansible محسوب نمیشود.
- داکر پلتفرمی بهعنوان یک فناوری خدماتی نیست.
- داکر یک کانتینر نیست.
داکر چیست و چه قابلیتهایی دارد؟
داکر یک جریان کار عالی برای انتقال برنامهها از لپتاپ توسعهدهنده به محیط آزمایش دارد. داکر از عملکرد فوقالعاده سریعی برخوردار است و میتواند روی هر هاستی با هستهی لینوکس سازگار و اجرا شود، علاوهبرآن از ویندوز نیز پشتیبانی میکند.
داکر از Copy-on-write واحد سیستم فایل برای ایمیج استوریج استفاده میکند. بنابراین، هنگامیکه تغییراتی در یک کانتینر انجام میشود، این تغییرات تنها با استفاده از کپیرایت روی دیسک ذخیره میشوند. شما میتوانید با استفاده از قابلیت Copy On Write، لایههای ذخیرهسازی مشترک را برای همهی کانتینرهای خود بهینهسازی کنید.
معماری داکر چیست؟
داکر در ابتدا که راهاندازی شد دارای معماری یکپارچه بود. اما اکنون داکر به ۳ قسمت مختلف تقسیم شده است.
- Docker Engine (Dockerd)
- Docker-Containerd (Containerd)
- Docker-Runc (Runc)
هنگام نصب داکر، همهی این قسمتها نیز نصب میشوند و نیازی نیست هر کدام را جداگانه نصب کنید.
اکوسیستم داکر
اکوسیستم داکر از ۵ بخش مختلف زیر تشکیل شده است:
- Docker Daemon (Dockerd)
- Docker Client
- Docker Images
- Docker Registries
- Docker Containers
داکر دیمون چیست؟
موتور داکر شامل داکر دیمون، یک رابط API و داکر CLI است. داکر دیمون (Dockerd) بهشکل مستمر بهعنوان سرویس Dockerd اجرا میشود و مسوول ساخت تصاویر داکر است. Dockerd برای مدیریت تصاویر و اجرای کانتینرها، Docker-Containerd APIs را فراخوانی میکنند. موتور داکر یک برنامهی کاربردی مبتنی بر کلاینت- سرور است که به ۳ بخش اصلی تفکیک میشود.
- سرور
- REST API
- کلاینت
سرور یک دیمون بهنام Dockerd (Docker Daemon) را اجرا میکند که چیزی بهغیر از یک فرآیند نیست. داکر دیمون مسوول ایجاد و مدیریت ایمیجهای داکر، کانتینرها، شبکهها و ولومها در پلتفرم داکر است.
REST API
مشخص میکند که برنامهها چگونه میتوانند با سرور تعامل داشته باشند و به آن دستور میدهد تا کار خود را انجام بدهد. کلاینت چیزی نیست جز یک خط فرمان که به کاربران اجازه میدهد با دستورات داکر تعامل داشته باشند.
Docker-Dontainerd (Containerd)
Containerd یکی دیگر از سرویسهای شبه سیستم است که مسوولیت دانلود تصاویر داکر و اجرای آنها را بهعنوان یک کانتینر برعهده دارد.
Docker-Runc
Runc زمان اجرای کانتینری است که مسوولیت ایجاد فضاهای نام و Cgroupهای مورد نیاز یک کانتینر را برعهده دارد. سپس دستورات کانتینر را داخل فضاهای نام اجرا میکند. Runc طبق مشخصات OCI پیاده سازی میشود.
Docker Image چیست؟
Image، بلوکهای اصلی سازنده داکر هستند. یک تصویر یک الگوی فقط خواندنی با دستورالعملهایی برای ایجاد کانتینر داکر است. اغلب یک Image همراه با یک Image دیگر و برخی از سفارشیسازیهای اضافی است. Image شامل کتابخانههای سیستمعامل، وابستگیها و ابزارهایی برای اجرای برنامه هستند.
Dockerfile چیست؟
داکر مفهومی از Dockerfile دارد که برای ساخت تصویر استفاده میشود. Dockerfile یک فایل متنی و حاوی یک دستور در هر خط است.
Docker Registry چیست؟
داکر رجیستری یک مخزن برای تصاویر داکر است. یک رجیستری میتواند عمومی یا خصوصی باشد. بهعنوان مثال، Docker Inc یک سرویس رجیستری بهنام Docker Hub را ارایه میدهد و این به شما امکان را میدهد تا Image را از یک مکان مرکزی آپلود و دانلود کنید. توجه داشته باشید که وقتی داکر را نصب میکنید، بهدنبال ایمیجهایی از هاب عمومی داکر میگردد، مگر اینکه یک رجیستری سفارشی را در تنظیمات داکر مشخص کرده باشید.
اگر مخزن شما عمومی باشد، سایر کاربران داکرهاب میتوانند به همهی Imageهای شما دسترسی داشته باشند. به همین دلیل شما میتوانید یک رجیستری خصوصی را در Docker Hub ایجاد کنید.
کانتینر داکر چیست؟
حالا که پاسخ پرسش داکر چیست را میدانیم بهتر است تعریفی از کانتینر داکر نیز داشته باشیم. کانتینر یک نمونهی قابل اجرا از یک Image است. کانتینرها را میتوان راهاندازی، متوقف، کامیت کرد و خاتمه داد. اگر یک کانتینر را بدون کامیت کردن خاتمه دهید، تمام تغییرات کانتینر از بین خواهد رفت. برای اینکه بتوانید معماری لایهای را ایجاد کنید میتوانید دو یا چند کانتینر را به یکدیگر متصل کنید. با اینحال، هاستینگ برنامههای مقیاسپذیر بالا با ظهور ابزارهایی مانند Kubernetes آسان شده است.
نسخههای داکر
داکر در دو نسخه موجود است که در ادامه به آنها اشاره میکنیم:
- Community Edition (CE)
- Enterprise Edition (EE)
نسخه Community Edition (CE) برای توسعهدهندگان فردی و تیمهای کوچک مناسب است. در مقایسه با نسخهی Enterprise Edition (EE)، عملکرد محدودی را ارایه میدهد. از طرف دیگر، ورژن Enterprise برای تیمها و محیطهای بزرگ مناسب است. نسخهی Enterprise خود به سه نسخه مختلف دیگر دسته بندی میشود:
- Basic Edition
- Standard Edition
- Advanced Edition
دستورات داکر
پس از اینکه یکی از نسخههای داکر را نصب کردید حالا وقت آن رسیده است که با دستورات داکر آشنا بشویم.
Docker create
اولین دستوری که با نگاه کردن به آن متوجه کاربرد داکر خواهیم شد دستور Create است.
سینتکس این دستور بهشکل زیر است:
Docker Create [options] IMAGE [commands] [arguments]
توجه داشته باشید هر آنچه که داخل کروشهها نوشته شود اختیاری است. یک مثال از این دستور را ببینید.
$ Docker Create Fedora
در این مثال، دستور Create یک کانتینر جدید با استفاده از آخرین Image فدورا ایجاد مینماید. اگر کانتینر با موفقیت ایجاد شود، داکر یک شناسهی کانتینر را برمیگرداند.
Docker ps
دستور بعدی Docker Ps است. این دستور به ما اجازه میدهد تا تمام کانتینرهایی را که در هاست داکر در حال اجرا هستند را ببینیم.
$ Docker ps
این دستور فقط کانتینرهایی را نشان میدهد که در حال حاضر روی هاست داکر در حال اجرا هستند.
اگر میخواهید تمام کانتینرهایی که روی هاست ایجاد شدهاند را بدون توجه به وضعیت فعلی آنها ببینید، باید گزینهی a- را وارد کنید. این دستور همهی کانتینترها را نمایش میدهد.
$ Docker ps –a
خروجیهای دستور Docker Ps
CONTAINER ID: یک رشتهی منحصربهفرد متشکل از کاراکترهای الفبایی-عددی مرتبط با هر کانتینر است.
IMAGE: نام تصویر داکر مورد استفاده برای ایجاد کانتینر است.
COMMAND: یک دستور خاص برای برنامه که باید هنگام راهاندازی کانتینر اجرا شود.
CREATED: زمان سپریشده از زمان ایجاد کانتینر را نشان میدهد.
STATUS: وضعیت فعلی کانتینر بههمراه زمان سپریشده در وضعیت فعلی را نشان میدهد.
PORTS: نگاشت پورتهای تعریفشده را برای هر کانتینر نشان میدهد.
NAMES: به غیر از شناسهی کانتینر، به هر کانتینر یک نام نیز اختصاص داده شده است.
Docker Start
با این دستور هر کانتینری که متوقف شده شروع به فعالیت میکند.
docker start [options] CONTAINER ID/NAME [CONTAINER ID/NAME…]
میتوانیم یک کانتینر را با مشخص کردن چند کاراکتر منحصربهفرد اول شناسه یا با تعیین نام آن شروع کنیم.
Docker Stop
این دستور هر کانتینر در حال اجرا را متوقف خواهد کرد.
docker stop [options] CONTAINER ID/NAME [CONTAINER ID/NAME…]
این دستور شبیه به دستور شروع داکر است.
Docker Restart
دستور داکر ریاستارت کانتینرهای در حال اجرا را دوباره راهاندازی میکند.
docker restart [options] CONTAINER ID/NAME [CONTAINER ID/NAME…]
Docker Run
این دستور ابتدا کانتینر را ایجاد و سپس آن را راهاندازی میکند. در واقع این دستور ترکیبی از Docker Create و Docker Start است.
docker run [options] IMAGE [commands] [arguments]
Docker Rm
اگر بخواهیم یک کانتینر را حذف کنیم از دستور Docker rm استفاده میکنیم.
docker rm [options] CONTAINER ID/NAME [CONTAINER ID/NAME...]
Docker Images
این دستور تمام داکرهای موجود در هاست داکر شما را فهرست میکند.
$ docker images
خروجیهای این دستور شامل موارد زیر هستند:
REPOSITORY: نشان دهندهی نام منحصربهفرد Docker Image است.
TAG: هر Image با یک برچسب که منحصربه عکس است مرتبط است.
IMAGE ID: یک رشتهی یکتا متشکل از کاراکترهای الفبایی عددی مرتبط با یک Image است.
CREATED: مدت زمانی که تصویر ایجادشده را نمایش میدهد.
SIZE: اندازهی تصویر را نشان میدهد.
مزایا و معایب استفاده از داکر
داکر (Docker) با استفاده از کانتینر، ایجاد، استقرار و اجرای برنامه ها را آسانتر میکند. کانتینرها این امکان را به یک توسعهدهنده میدهند تا همهی قسمتهای مورد نیاز خود را در قالب یک بسته تجمیع کنند. در این مطلب با به پرسش داکر چیست و چه کاربردهایی دارد؟ پاسخ دادیم و حال زمان آن است که با مزایا و معایب داکر آشنا شویم. چراکه هر ابزاری در کنار مزایای بسیار، معایبی نیز دارد که در ادامه به آنها اشاره خواهیم کرد.
مزایای استفاده از داکر
مدولار بودن
رویکرد داکر بر کانتینرسازی است، یعنی توانایی حذف بخشی از برنامه برای تعمیر و بهروزرسانی را بهجای حذف کل برنامه دارد. همچنین با استفاده از رویکرد مبتنی بر میکروسرویسها، میتوانید فرآیندها را بین چندین برنامه به همان روشی که در معماری سرویس گرا (SOA) انجام میدهد به اشتراک بگذارید.
کنترل نسخه IMAGE
هر فایل ایمیج داکر از ترکیب چندین لایه به وجود آمده که در یک تصویر واحد ترکیب شدهاند. با تغییر تصویر، یک لایهی جدید ایجاد میشود. داکر از این لایهها برای ساخت کانتینرهای جدید استفاده دوباره میکند، تا به روند ساخت سرعت ببخشد. تغییرات متوسط در بین تصاویر به اشتراک گذاشته میشود تا باعث بهبود بیشتر سرعت، اندازه و کارایی شود.
استقرار سریع
کانتینرهای مبتنی بر داکر، استقرار را به چند ثانیه کاهش میدهند. با ایجاد یک کانتینر برای هر فرآیند، میتوانید به سرعت فرآیندها را با برنامههای جدید به اشتراک بگذارید و از آنجاییکه یک سیستمعامل برای افزودن و جابهجایی نیاز به بوت شدن ندارد، زمان استقرار به میزان قابل توجهی کاهش مییابد. بنابراین، فناوری داکر یک رویکرد جزییتر، قابل کنترل، مبتنی بر ریز سرویس است که باعث کارایی بیشتر خواهد شد.
داکر بهمنظور امکان میزبانی روی یک هاست تا زمانیکه سیستمعامل یکسانی را داشته باشند، از چندین برنامه با قابلیتهای مختلف پشتیبانی میکند. فضای ذخیرهسازی نیز بهینهسازی شده و تعداد زیادی از برنامهها را میتوان روی یکهاست میزبانی کرد، زیرا کانتینرها معمولن فضای دیسک بسیار کمی را اشغال میکنند.
Robustness
روی یک کانتینر سیستمعاملی نصب نشده است. بنابراین، در مقایسه با یک ماشین مجازی حافظهی بسیاری کمی را مصرف میکند. همچنین زمان بوت شدن را به چند ثانیه کاهش میدهد. این در حالی است که یک ماشین مجازی برای بوت شدن به چند دقیقه نیاز دارد.
کاهش هزینهها
زمانی که صحبت از سختافزار مورد نیاز برای اجرای آن میشود، داکر سختافزارهای کمتری را نیاز دارد.
معایب استفاده از داکر
برنامههای کاربردی با سیستمعاملهای مختلف را نمیتوان با یکدیگر در یک هاست میزبانی کرد. بهعنوان مثال فرض کنید ۴ برنامه مختلف داریم که از این تعداد ۳ برنامه به سیستمعامل مبتنی بر لینوکس و برنامهی دیگر به سیستمعامل ویندوز نیاز دارد. در چنین موردی، ۳ برنامهای که به سیستمعامل لینوکس نیاز دارند را میتوان روی یک هاست داکر میزبانی کرد، ولی برنامههایی که به سیستمعامل ویندوز نیاز دارند را باید روی یک هاست دیگر میزبانی کرد.
جمع بندی
در این مقاله تلاش کردیم تا به پرسش داکر چیست پاسخ دهیم و اطلاعات جامعی دربارهی داکر ارایه دهیم. بهترین ویژگی داکر، همکاری است. ایمیجهای داکر را میتوان به یک مخزن منتقل نمود و به هر میزبان دیگری منتقل کرد تا کانتینرها آن ایمیج را اجرا کنند.
علاوهبراین هاب داکر دارای هزاران Image است که بهوسیلهی کاربران ایجاد شده است و شما میتوانید با توجه به نیازتان آنها را به هاست خود منتقل کنید. همچنین اگر شما میخواهید بهعنوان یک مهندس DevOps فعالیت کنید، میتوانید از آموزشهای ارایه شده ابرآروان دربارهی نحوهی کار با داکر و همچنین سایر آموزشهای موجود در وبسایت دربارهی راهاندازی سریع نرمافزار با کانتینر ابری ابر آروان استفاده کنید.