یکی از مشکلاتی که همواره ذهن طراحان و توسعه دهندگان برنامه را به خود مشغول می کند، وابستگی برنامه های ساخته شده به محیط زیرساختی آن مثل سیستم عامل های مختلف است که
باعث می شود که برای انتقال هر برنامه مابین دو سیستم متفاوت نیاز به ساعت ها کار و اعمال تغییر بر روی برنامه نوشته شده داشته باشند.
به همین دلیل روش های متفاوتی برای رفع این مشکل ایجاد شده است و داکر یکی از پرطرفدارترین آن هاست که در دهه گذشته پدید آمده است.
استفاده از پلتفرم داکر به یکی از روش های محبوب برنامه نویسان تبدیل شده است به همین دلیل پیش از ورود به این فضا باید به خوبی بدانید داکر چیست و چه کاربردی دارد.
با ما همراه باشید تا در این مقاله به پاسخ تمامی سوال هایتان در این باره برسید.
1# داکر چیست؟
داکر (Docker) یک پلتفرم متن باز (Open Source) از نوع نرم افزاری است که
به طراحان برنامه ها اجازه می دهد که یک برنامه را به سرعت بسازند، آزمایش کنند، به محیط دیگری منتقل و آن را اجرا کنند.
به زبان ساده روش کلی عملکرد داکر به این صورت است که
یک نرم افزار به همراه تمامی چیزهایی را که برای اجرا شدن نیاز دارد (مثل کتابخانه ها، ابزارهای سیستمی، کدها و…) در یک واحد استاندارد بسته بندی می کند که
به آن کانتینر (container) گفته می شود.
با استفاده از داکر می توان به راحتی هر برنامه ای را مستقل از زیرساخت های موجود در یک سیستم، به هر محیط دیگری انتقال داد و
مطمئن بود که نرم افزار بدون هیچ مشکلی اجرا می شود.
از دیگر فواید به کاربردن داکر برای اجرای یک نرم افزار این است که
تأخیر بین نوشته شدن کد و اجرای آن به میزان قابل توجهی کاهش پیدا می کند.
برای درک بهتر اینکه داکر چیست و چطور عمل می کند نیاز است تا با مفهوم کانتینر بیشتر آشنا باشیم که
در ادامه مقاله به معرفی آن می پردازیم و پیش از آشنایی دقیق تر با داکر و اجزای آن نگاهی کوتاه به تاریخچه آن میندازیم.
2# تاریخچه داکر
در سال 2013 سالامان هایکز (Solomon hykes)، داکر (Docker) را راه اندازی کرد.
در نهایت در 2014 با انتشار نسخه 1.0، این پلتفرم محبوبیت زیادی به دست آورد.
به گزارش داکر تا به امروز بیش از 3.3 میلیون اپلیکیشن بر روی کانتینرها نصب شده و
این پلتفرم بیش از 7.3 میلیون کاربر دارد.
داکر در ابتدا برای کار بر روی سیستم عامل لینوکس ایجاد شد؛
اما بعدها به منظور پشتیبانی از سیستم عامل های غیر لینوکس، از جمله Microsoft Windows و Apple OS X توسعه پیدا کرد.
امروزه کمپانی های بزرگی با داکر همکاری می کنند که برخی از آن ها عبارتند از:
- Red Hat
- DATADOG
- MIRAMTIS
- AWS
- Microsoft
3# کانتینر چیست؟
کانتینرها در نگاهی ساده یک ابزار برای ساخت، اشتراک گذاری و اجرای برنامه ها هستند.
تعریف اصلی کانتینرها این است که آن ها یک بسته بندی استانداردشده نرم افزاری هستند که
یک کد برنامه و تمام متعلقات آن را در کنار یکدیگر ذخیره می کنند و
با استفاده از آن ها برنامه، کاملا سریع و قابل اطمینان در هر محیط محاسباتی مثل سیستم عامل ویندوز، لینوکس یا میزبان های ابری اجرا می شود.
این نرم افزارها باعث می شوند که یک برنامه صرف نظر از زیرساخت موجود در یک سیستم، همیشه یکسان اجرا شود.
به عبارت دیگر می توان گفت کانتینرها برای این هدف ساخته شدند که
یک برنامه را نسبت به محیط اجرایی خود ایزوله کنند.
با این کار درگیری و تداخل میان بخش های مختلف سخت افزار برای اجرای برنامه های متعدد به حداقل میزان ممکن می رسد.
در گذشته برای رسیدن به این هدف از ابزاری به نام ماشین مجازی (Virtual Machine یا VMware) استفاده می شد که
با ظهور تکنولوژی کانتینرها کاربرد آن رفته رفته کمتر شد.
در ادامه بررسی می کنیم تفاوت های این دو روش ایزوله سازی برنامه های اجرایی یک سیستم عامل (Operation System) چیست و چرا کانتینرها محبوب تر شدند.
1-3# کانتینر داکر چیست؟
داکر یک سیستم عامل مناسب برای بسته بندی و اجرای برنامه ها به صورت کانتینرهای ایزوله است.
به عبارت دیگر داکر، ابزار یا بستر مدیریت چرخه حیات کانتینرها است که شامل بخش های زیر می شود:
- ساخت و توسعه برنامه و بخش های پشتیبانی کننده آن با استفاده از کانتینرها
- تبدیل کانتینر به یک واحد راه اندازی، تست و توزیع برنامه ها
- استقرار برنامه نهایی شده در محیط تولید موردنظر که می تواند شامل یک مرکز داده محلی یا ابری و یا ترکیبی از هر دو باشد
اگر هنوز هم به خوبی برای شما روشن نشده است که ارتباط کانتینر و داکر چیست باید بگوییم که
کانتینر همانطور که از معنای لغوی نامش پیداست یک ظرف است که
برنامه موردنظر ما را درون خودش قرار داده و درب آن کامل بسته شده است و
داکر وظیفه ساخت این ظرف، ایزوله سازی آن و اجرای برنامه درون آن در زمان نیاز را برعهده دارد.
2-3# تفاوت داکر با ماشین مجازی چیست؟
در تعریف ماشین مجازی (VM) به طور خلاصه می توان گفت که یک نرم افزار است که مشابه یک کامپیوتر واقعی عمل می کند و
امکان نصب و اجرای چندین سیستم عامل و برنامه را به طور همزمان روی یک سخت افزار مثل دستگاه کامپیوتر ممکن می کند.
برای مثال با داشتن Virtual Machine می توان روی یک کامپیوتر با سیستم عامل ویندوز، یک سیستم عامل اندرویدی نیز داشت.
عملکرد این سیستم به این صورت است که با استفاده از آن یک سیستم عامل مجزا از سخت افزار موجود، اجرا می شود که
به آن سیستم عامل مهمان (guest OS) گفته می شود.
کانتینر داکر به جای مجازی سازی سخت افزار، سیستم عامل را به صورت نرم افزاری مجازی می کند و
به همین علت بسیار سبک (معمولا در حد چند ده مگابایت) و کارآمد است.
Containerها یک مفهوم در لایه برنامه ها (Apps) هستند که کدها و متعلقاتشان را بسته بندی می کنند و
امکان اجرای همزمان چندین کانتینر و اشتراک هسته سیستم عامل بین آن ها وجود دارد.
در مقابل Virtual Machineها یک مفهوم در لایه سخت افزار فیزیکی هستند که یک سرور را به چندین سرور تبدیل می کنند که
هر کدام از آن ها یک کپی کامل از یک سیستم عامل، برنامه ها، کدها و کتابخانه های ضروری دارد.
با توجه به اینکه ماشین های مجازی یک سیستم عامل کامل و تمام موارد موردنیاز عمل آن را درون خود دارند بسیار حجیم و سنگین هستند و
گاهی اوقات چندین گیگابایت فضای سیستم را اشغال می کنند.
این موضوع اصلی ترین مشکل VM ها بود که باعث شد توسعه دهندگان برنامه به راه حل های جایگزینی مثل کانتینر فکر کنند.
4# داکر چگونه عمل می کند؟
تا اینجا به خوبی متوجه شدیم که داکر چیست و چرا مورد استفاده قرار می گیرد.
در ادامه با بررسی معماری داکر و روابط میان بخش های تشکیل دهنده آن با عملکرد این نرم افزار آشنا می شویم.
برنامه docker از معماری کلاینت-سرور استفاده می کند.
مطابق تصویر زیر یک کلاینت داکر (Docker Client) درخواست خود را به بخش مرکزی یا همان Docker daemon ارسال می کند که
وظیفه ساخت، اجرا و توزیع کانتینرها را برعهده دارد.
به مجموعه Docker daemon، کانتینرها و ایمیج های داکر، میزبان یا Host گفته می شود.
Docker daemon و Client می توانند روی یک سیستم اجرا شوند و یا از راه دور با یکدیگر ارتباط بگیرند.
در ادامه نقش و کاربرد هریک از بخش های سیستم داکر را معرفی می کنیم تا بهتر متوجه شویم که روند استفاده از داکر چگونه است.
1-4# دیمون داکر (Docker daemon)
دیمون نقش گیرنده و اجرا کننده دستورهای کلاینت را برعهده دارد.
در واقع این بخش از سیستم داکر است که به درخواست های API (رابط برنامه نویسی نرم افزار) داکر گوش می دهد و
اجزای مختلف داکر مثل ایمیج، کانتینر، شبکه ها و… را مدیریت می کند.
دیمون ها قابلیت برقراری ارتباط با دیمون های دیگر برای مدیریت سرویس های داکر را نیز دارند.
2-4# کلاینت داکر (Docker client)
کلاینت راه اصلی ارتباط کاربران (Users) با سیستم داکر است.
زمانی که یک کاربر در کامپیوتر خود یک دستور برای داکر ارسال می کند (مثل docker run به معنی راه اندازی داکر) این کلاینت است که
درخواست مطرح شده را با استفاده از API به دیمون می رساند.
کلاینت ها توانایی دارند که همزمان با چندین دیمون مختلف ارتباط بگیرند.
هر کاربر باید کدهای موردنظر را با استفاده از داکر دسکتاپ به کلاینت اعلام کند.
داکر دسکتاپ چیست؟ (Docker Desktop)
داکر دسکتاپ یک برنامه برای محیط ویندوز، لینوکس و مک است که
کاربر را قادر می سازد برنامه های کانتینری را بسازد و به اشتراک بگذارد.
این برنامه خود شامل داکر دیمون، داکر کلاینت، موتور داکر و تمامی ابزارهای دیگر موردنیاز راه اندازی این سیستم است و
یک رابط کاربری گرافیکی بسیار ساده فراهم آورده است تا کاربر به طور مستقیم برنامه ها، کانتینرها و ایمیج های خود را از روی سیستم مدیریت کند.
3-4# داکر رجیستری (Docker registry)
رجیستری محل ذخیره داکر ایمیج ها است.
یک رجیستری عمومی با نام Docker Hub (داکر هاب) وجود دارد که
بسیاری از ایمیج های کاربردی و متداول داکر در آن ذخیره شده اند و در زمان استفاده از داکر، به صورت پیشفرض از آن استفاده می شود.
علاوه بر داکر هاب هر کاربری می تواند رجیستری خصوصی خود را راه اندازی کند.
زمانی که کاربر دستورهای فراخوانی (docker pull) و راه اندازی (docker run) را می دهد، ایمیج ها از رجیستری موجود خوانده می شوند و
با دستور بارگذاری (docker push) ایمیج ها به رجیستری منتقل می شوند.
4-4# ایمیج داکر چیست؟ (Docker Image)
ایمیج یا تصویر داکر یک قالب از دستورالعمل های ساخت کانتینر داکر است که در وضعیت فقط خواندنی (read-only) هست.
معمولا هر ایمیج بر اساس یک ایمیج دیگر به همراه مقداری سفارشی سازی ساخته می شود.
کاربر می تواند ایمیج های داکر مخصوص به خود را بسازد و یا از آن هایی که در رجیستری موجود هستند استفاده کند.
برای ساخت یک ایمیج، کاربر یک داکر فایل (Docker File) با استفاده از دستورات ساده ای ایجاد می کند که
گام های موردنیاز برای ساخت و راه اندازی ایمیج را در آن تعریف می کند.
ایمیج ها ساختار لایه بندی شده ای دارند که هرکدام به طور مجزا قابل بازنویسی و ساخت مجدد هستند که
از ویژگی های مهم آن ها می توان به این موضوع اشاره کرد که در صورت ایجاد تغییر در یک ایمیج تنها لایه مربوطه که تغییرات داشته بازسازی می شود و
به همین دلیل ایمیج ها در مقایسه با سایر روش های مجازی سازی بسیار سبک، کوچک و سریع هستند.
پس از اینکه متوجه شدیم ایمیج داکر چیست می توانیم تعریف دقیق تری از کانتینرها داشته باشیم.
هر کانتینر یک نسخه قابل اجرا از یک ایمیج است.
5-4# موتور داکر چیست؟ (Docker Engine)
Docker Engine یک تکنولوژی کانتینری کردن (Containerize) است و برای ساخت و اجرای کانتینرها استفاده می شود.
با نصب موتور داکر که هسته مرکزی به حساب می آید می توان کانتینرها را مدیریت کرد.
5# کاربرد داکر چیست؟
پس از اینکه به طور کامل بررسی کردیم داکر چیست و یک سیستم داکر چه بخش هایی دارد و چطور عمل می کند، قصد داریم به بیان علل استفاده و کاربردهای برنامه داکر بپردازیم.
با استفاده از این سیستم یک برنامه نویس می تواند به موارد زیر دست پیدا کند:
- کدها را سریعتر ارسال کند
- عملیات برنامه را استانداردسازی کند
- انتقال کدها را ساده تر کند
- با استفاده از بهبود منابع ناشی از استفاده داکر در هزینه ها صرفه جویی کند
مزیت اصلی استفاده از داکر این است که شما یک برنامه را می توانید با اطمینان در هر سیستمی که تمایل داشته باشید اجرا کنید.
دستورات (syntax) ساده و سرراست داکر به کاربر کنترل بسیار بالایی در تولید برنامه موردنظر می دهد.
از کانتینرهای داکر می توان به عنوان هسته اصلی برنامه ها و پلتفرم های مدرن استفاده کرد.
6# مزایای داکر چیست؟
استفاده از کانتینرها به روشی کارآمد برای افزایش بهره وری در فرآیندهای توسعه فناوری اطلاعات تبدیل شده است.
در ادامه با مزایای داکر آشنا خواهیم شد.
- سازگاری و نگهداری: صرف نظر از این که برنامه در کجا مستقر شده است، همه چیز ثابت و پایدار بوده و این امر منجر به بهره وری عظیم خواهد شد.
در نتیجه خطا کاهش می یابد و کاربران زمان بیشتری برای راه اندازی ویژگی های جدید خواهند داشت. - استقرار سریع در داکر: به طور سنتی، مواردی مانند تهیه و راه اندازی سخت افزار چند روز یا بیشتر طول می کشد؛
ولی در داکر هنگامی که هر فرآیند در یک کانتینر قرار می گیرد، می توان آن را با برنامه های جدید به اشتراک گذاشت و همین امر سبب افزایش سرعت می شود. - تنظیمات ساده: مزیت اصلی داکر ساده سازی کارها است.
- تکرارپذیری: کاربر در حال ساختن کد با زیرساخت و پیکربندی تکرارپذیر است و این موضوع، روند توسعه را بسیار سریع تر می کند.
- تعمیر و نگهداری مستقیم: هنگامی که یک برنامه در کانتینر قرار می گیرد از سایر برنامه های اجرا شده در یک سیستم جدا می شود.
به عبارت دیگر، برنامه ها به راحتی با هم مخلوط نمی شوند و تعمیر و نگهداری برنامه ها آسان تر خواهد شد.
سخن پایانی
پلتفرم داکر این اجازه را به برنامه نویس می دهد که اپلیکیشن خود را با تمام جزئیات و وابستگی ها به صورت یک پکیج ایزوله درآورده و آن را بدون تغییر به سیستم دیگری منتقل کند.
کار با این پلتفرم علی رغم ظاهر پیچیده ای که در نگاه اول ممکن است داشته باشد، ساده است و
می تواند سرعت عمل بسیار بالایی در اجرای برنامه ها به توسعه دهندگان برنامه بدهد.
نظرتون درباره این مقاله چیه؟
ما رو راهنمایی کنید تا اون رو کامل تر کنیم و نواقصش رو رفع کنیم.
توی بخش دیدگاه ها منتظر پیشنهادهای فوق العاده شما هستیم.