داکر یک پلتفرم برای ساخت، استقرار و مدیریت اپلیکیشنهای کانتینربندی شده است. امروزه داکر به ابزاری استاندارد برای توسعهدهندگان نرمافزار و مدیران سیستم بدل شده است. Docker رویکردی مبتکرانه برای اجرای سریع اپلیکیشنها بدون تحت تاثیر قرار دادن باقی سیستم به حساب میآید. میتوان یادگیری داکر را یکی از مهارتهای مهم و حیاتی برای افراد فعال در حوزه DevOps دانست. این ممکن است سوال بسیاری از توسعهدهندگان و علاقهمندان باشد که Docker چیست ؟ یا Container در داکر چیست ؟ همچنین، ممکن است سوالات دیگری نیز پیرامون Docker وجود داشته باشند. در این مقاله به طور جامع به این سوالات پاسخ داده شده است.
همچنین یک مقاله آموزشی جامع و جدیدتر نیز برای آموزش داکر در مجله تم آف منتشر شده است که مطالعه آن به علاقهمندان پیشنهاد میشود:
داکر چیست ؟
به بیان ساده، داکر (Docker) یک پلتفرم نرمافزاری است که عملیات ساخت، اجرا، مدیریت و توزیع اپلیکیشنها را سادهتر میکند. داکر این سادهسازی فرایند ایجاد اپلیکیشنها را به وسیله مجازیسازی سیستم عامل کامپیوتری انجام میدهد که اپلیکیشن قرار است روی آن نصب و اجرا شود.
در واقع، داکر مجموعهای از محصولات پلتفرم به عنوان یک سرویس (PaaS) است که از مجازیسازی در سطح سیستم عامل برای تولید بستههای نرمافزاری استفاده میکند. اولین نسخه از داکر در سال ۱۳۹۲ خورشیدی (۲۰۱۳ میلادی) منتشر شد.
داکر میتواند یک اپلیکیشن و متعلقات آن را در یک نگهدارنده مجازی اجرا کند که روی لینوکس، ویندوز یا مک OS اجرا میشود. Docker با استفاده از زبان برنامه نویسی GO توسعه داده شده است. داکر اپلیکیشنهای بستهبندی شده ایجاد میکند. به این بستهها کانتینر (نگهدارنده | Container) گفته میشود. کانتینرها نقش اساسی در Docker ایفا میکنند. بنابراین، در ادامه نوشته «داکر چیست» به این سوال پاسخ داده شده است که کانتینر در Docker چیست؟
کانتینر داکر (Docker Container) چیست ؟
نگهدارنده (محفظه | Container) یک واحد نرمافزاری استاندارد است که کدها و تمام متعلقات (Dependency) آن را بستهبندی میکند. به این ترتیب، اپلیکیشن در محیطهای محاسباتی مختلف، سریعتر و با اطمینان بیشتر اجرا میشود. هر کانتینر یک محیط ایزوله شده را مشابه یک ماشین مجازی (Virtual Machine | VM) فراهم میکند.
برخلاف ماشینهای مجازی، کانتینرهای داکر یک سیستم عامل کامل را اجرا نمیکنند، بلکه هسته (Kernel) میزبان را به اشتراک میگذارند و مجازیسازی را در یک سطح نرمافزاری انجام میدهند.
امکان استفاده از Containerها هم برای اپلیکیشنهای تحت ویندوز و هم برنامههای کاربردی مبتنی بر لینوکس در دسترس است. در واقع میتوان برنامههای ویندوزی، لینوکسی و فایلهای اجرایی (EXE) را در کانتینرهای داکر اجرا کرد.
نرمافزارهای محفظهبندی شده یا Containerized همواره به صورت یکسان و فارق از زیرساختشان اجرا میشوند. کانتینرها نرمافزار را از محیطشان جدا میکنند و با استفاده از کانتینرها اطمینان حاصل میشود که نرمافزار به صورت یکپارچه و فارق از تفاوتهایی مثلاً میان توسعه و سطحبندی عمل میکند. حال با روشن شدن مفهوم Container در داکر، ادامه این بخش از نوشته «داکر چیست» به شرح مزایای کانتینرهای داکر اختصاص دارد.
مزایای Containerهای داکر چه هستند؟
در این بخش از نوشته «داکر چیست» مزایای کانتینر داکر فهرست شدهاند:
- استاندارد بودن: داکر کانتینرهای استاندارد صنعتی را برای قابل حمل بودن در همه جا ارائه کرده است.
- حجم کم: کانتینرها کرنل سیستم عامل یک ماشین را با هم به اشتراک میگذارند و بنابراین نیازی به یک سیستم عامل برای هر اپلیکیشن وجود نخواهد داشت. این مسئله منجر به بهبود کارایی سرور، کاهش هزینههای سرور و خرید مجوز خواهد شد.
- امنیت: اپلیکیشنها در Containerها ایمنی بیشتری دارند و داکر قدرتمندترین قابلیتهای ایزولهسازی در صنعت را ارائه میدهد.
حال در ادامه شرح مفهوم Container در این بخش از مقاله «داکر چیست»، به این سوال پاسخ داده شده است که Container Image در داکر چیست؟
Container Image در داکر چیست؟
یک ایمیج کانتینر داکر (Container Image) بستهای اجرایی نرمافزاری با حجم کم و مستقل است که همه آنچه برای اجرای یک اپلیکیشن مورد نیاز است را در بر میگیرد. این موارد شامل کدها، زمان اجرا (Runtime)، ابزارهای سیستمی، کتابخانههای سیستمی و تنظیمات لازم است.
این Imageها در زمان اجرا به کانتینرها تبدیل میشوند و این تبدیل در زمان اجرا روی موتور داکر (Docker Engine) انجام میشود. در ادامه مقاله «داکر چیست» به شرح مسئله و چالشی پرداخته شده که نیاز به ابداع داکر را ایجاب کرده است.
حال در ادامه نوشته «داکر چیست» بهتر است به این سوال پاسخ داده شود که داکر بر اساس چه فناوریهایی توسعه داده شده است.
Docker بر اساس چه فناوری ایجاد شده است ؟
داکر با زبان برنامه نویسی Go نوشته و در آن ویژگیهای بسیاری از کرنل لینوکس به کار گرفته شده است. داکر از فناوری به نام «Namespaces» برای ارائه فضای کاری ایزوله شدهای به نام Container بهره میبرد.
وقتی که یک Container اجرا میشود، داکر مجموعهای از فضاهای نام (Namespaces) را برای کانتینر ایجاد میکند. این فضاهای نام، لایهای جداسازی شده را فراهم می کنند. هر جنبه از یک کانتینر در یک فضای نام مستقل اجرا میشود و دسترسیاش به آن Namespace محدود است. ادامه مقاله «داکر چیست» به شرح علت نیاز به فناوری داکر اختصاص دارد.
دلیل نیاز به فناوری Docker چیست؟
در این بخش از نوشته «داکر چیست» با شرح مسئله و بیان راه حل آن، دلیل نیاز به داکر شرح داده میشود. ابتدا برای درک دلیل نیاز به داکر باید صورت مسئله یا مشکل را بیان کرد. این کار در ادامه انجام شده است.
مسئلهای که داکر آن را حل میکند چیست؟
برای شرح مسئله، بهترین راه ارائه یک مثال در عمل است. برای مثال، سه اپلیکیشن مختلف مبتنی بر پایتون وجود دارد که قرار است روی یک سرور میزبانی شوند (که میتواند به صورت فیزیکی یا ماشین مجازی باشد). همچنین، فرض میشود که در هر یک از این اپلیکیشنها نسخه متفاوتی از پایتون استفاده شده است و کتابخانهها و متعلقات به کار گرفته شده نیز در هر اپلیکیشن با دیگری فرق دارد.
با توجه به اینکه نمیتوان نسخههای مختلفی از پایتون را روی یک ماشین نصب کرد، امکان میزبانی از این سه اپلیکیشن روی یک کامپیوتر واحد وجود نخواهد داشت. اینجاست که فناوری Docker به کار میآید. حال در ادامه این بخش از نوشته «داکر چیست» به این سوال پاسخ داده شده است که داکر چگونه مشکل را برطرف میکند.
Docker چگونه مشکل را برطرف میکند؟
در این بخش از نوشته «Docker چیست» ابتدا به این مسئله پرداخته میشود که چگونه میتوان مشکل بیان شده در بخش قبل را بدون داکر برطرف کرد؟ در سناریوی تعریف شده در بخش قبلی، میتوان مشکل را با استفاده از سه ماشین فیزیکی مجزا برطرف کرد. همچنین یک روش دیگر این است که یک ماشین فیزیکی را به کار گرفت که توان میزبانی و اجرای سه ماشین مجازی به صورت همزمان را داشته باشد. هر دوی این گزینهها امکان نصب نسخههای مختلف پایتون روی هر یک از ماشینها به همراه متعلقات آنها را فراهم میکنند.
اما صرف نظر از اینکه کدام راهکار انتخاب شود، هزینههای مربوط به تهیه و نگهداری سختافزاری بسیار سنگین است. فناوری داکر برای این ارائه شده است که بتواند این مشکل را به شکلی بهینه و با هزینه بسیار کمتر برطرف کند. بنابراین، در ادامه این بخش از مقاله «Docker چیست» به این مسئله پرداخته شده است که داکر چگونه میتواند راهکاری بهینه و به صرفه برای این مشکل به حساب آید. برای درک کاربرد Docker ابتدا باید نگاهی به این مسئله داشت که داکر دقیقاً چطور عمل میکند؟
عملکرد Docker چگونه است؟
کانتینرها (نگهدارندهها) قابلیتهای هسته سیستم عامل را برای فراهم کردن محیطهایی به کار میبندند که تا اندازهای مجازیسازی شدهاند. میتوان کانتینرها را به وسیله دستوراتی نظیر «chroot» از صفر ایجاد کرد. این دستور، پردازهای (process) را با یک شاخه (دایرکتوری) ریشه (Root) به جای ریشه سیستم راهاندازی میکند. اما، استفاده از امکانات کرنل به طور مستقیم کاری دشوار، نا ایمن و خطا برانگیز (مستعد ایجاد خطا) محسوب میشود.
Docker راهکاری جامع برای تولید، توزیع و استفاده از Containerها به شمار میرود. نسخههای منتشر شده امروزی داکر از قطعات مستقل بسیاری تشکیل شدهاند. اول از همه، «Docker CLI» یا «خط فرمان داکر» همان چیزی است که در ترمینال با آن به تعامل پرداخته میشود. CLI دستورات را به یک دیمن داکر (Docker Daemon) ارسال میکند. دیمن (Daemon) در لینوکس مشابه سرویس در ویندوز است.
این سرویس میتواند به صورت محلی یا روی یک میزبان راه دور اجرا شود. دیمون مسئولیت مدیریت کانتینرها و Imageهایی را برعهده دارد که این کانتینرها از آنها به وجود آمدهاند. آخرین بخش داکر یک «کانتینر زمان اجرا» یا «Runtime Container» نامیده میشود. Runtime امکانات کرنل را فراخوانی میکند تا کانتینرها را اجرا کند. داکر با Runtimeهایی سازگاری دارد که از مشخصههای OCI پیروی میکنند. این استاندارد باز (مشخصههای OCI) امکان همکاری متقابل بین ابزارهای مختلف محفظهسازی (Containerization) را به وجود میآورد.
در آغاز کار چندان نیازی به نگرانی در مورد کارکردهای درونی داکر وجود ندارد. تنها نصب Docker روی سیستم، تمام آنچه برای ایجاد و اجرای کانتینرها لازم است را در اختیار توسعهدهنده قرار میدهد. پیش از پرداختن به نصب داکر، همچنان مفاهیم و توضیحات نظری پیرامون Docker باقی مانده است و باید به آنها پرداخته شود. در ادامه مقاله «داکر چیست» به شرح معماری Docker پرداخته شده است.
معماری داکر چگونه است؟
داکر از یک معماری کلاینت-سروری استفاده میکند. کلاینت داکر با Docker Daemon مکاتبه میکند. Docker Daemon وظیفه ساخت، اجرا و توزیع کانتینرهای داکر را بر عهده دارد. کلاینت و Daemon داکر میتوانند مشترکاً روی یک سیستم اجرا شوند یا اینکه میتوان یک کلاینت داکر را به یک Docker Daemon راه دور متصل کرد. کلاینت و Daemon داکر به وسیله REST API از طریق سوکتهای یونیکس یا یک واسط شبکه با هم ارتباط برقرار میکنند.
یکی دیگر از کلاینتهای داکر، Docker Compose نام دارد که امکان کار با اپلیکیشنهایی شامل چند کانتینر را فراهم میسازد.
در ادامه این بخش از مقاله «داکر چیست» هر یک از اجزای معماری داکر به اختصار شرح داده شدهاند.
Docker Daemon چیست ؟
دیمون داکر (dockerd) به درخواستهای API داکر گوش میدهد و اشیای داکر مثل Imageها، کانتینرها، شبکهها و Volumeها را مدیریت میکند. همچنین، یک Daemon میتواند با سایر Daemonها برای مدیریت سرویسهای داکر ارتباط برقرار کند.
کلاینت داکر چیست ؟
کلاینت داکر (docker) راه اصلی برای بسیاری از کاربران داکر جهت تعامل با Docker است. وقتی که از دستوراتی مثل «docker run» استفاده میشود، کلاینت این دستورات را به dockerd میفرستد و dockerd یا همان Docker Daemon نیز این دستورات را اجرا میکند. دستور docker از Docker API استفاده میکند. کلاینت داکر می تواند با بیش از یک Daemon ارتباط برقرار کند.
Docker Hub چیست ؟
Docker Hub یک بستر خدماتی در زمینه یافتن و به اشتراکگذاری Imageهای کانتینر با اعضای تیم و اجتماع داکر به حساب میآید. میلیونها Image آماده در Docker Hub به صورت متنباز برای توسعهدهندگان در دسترس است. Docker Hub بزرگترین مخزن برای Container Image در جهان به شمار میرود.
همچنین، مجموعهای از منابع محتوایی شامل اجتماع توسعهدهندگان کانتینر، پروژههای متنباز و شرکتهای مستقل تولید کننده نرمافزار که کدهای خود را در قالب Container میسازند و توزیع میکنند. کاربران با عضویت در وبسایت Docker Hub به مخازن رایگان و عمومی جهت ذخیره و بهاشتراکگذاری Imageها دسترسی خواهند داشت. همچنین میتوان با خرید اشتراک به مخازن خصوصی نیز دسترسی پیدا کرد. Docker Hub امکانات زیر را ارائه میدهد:
- مخازن (Repository): Push و Pull کردن Image Containerها
- تیمها و سازمانها: مدیریت دسترسی به مخازن خصوصی از Image Containerها
- Imageهای رسمی: Pull کردن و استفاده از Container Imageهای ارائه شده به وسیله داکر
- Imageهای ناشر: Pull کردن و استفاده از Container Imageهای فراهم شده توسط تولیدکنندگان خصوصی
- ساختها (Builds): ساخت خودکار Container Imageها از گیتهاب و بیتباکت و Push کردن آنها به Docker Hub
- وبهوکها: تحریک اعمال پس از یک push موفق به یک مخزن برای ادغام Docker Hub با سایر سرویسها
Docker Registry چیست ؟
یک بایگانی یا رجیستری داکر (Docker Registry)، انعکاسهای (Imageهای) داکر را ذخیره میکند. Docker Hub یک رجیستری است که هر کسی میتواند از آن استفاده کند و Docker به طور پیشفرض برای جستجوی Imageهای داکر در Docker Hub تنظیم شده است. حتی میتوان رجیستری خصوصی خود را اجرا کرد.
وقتی از دستورات «docker pull» یا «docker run» استفاده میشود، Imageهای مورد نیاز از بایگانی پیکربندی شده بیرون کشیده میشوند. وقتی از دستور docker push استفاده شود، Image مربوطه به رجیستری پیکربندی شده Push میشود.
Docker Compose چیست؟
Docker Compose امکان ایجاد و راهاندازی چندین Container را فراهم میکند. یک فایل YAML ایجاد میشود که پیکربندی Containerهای اپلیکیشن را انجام میدهد. سپس میتوان از یک دستور واحد برای راهاندازی تمام کانتینرهای و پیوند آنها به یکدیگر استفاده کرد. Compose به کاربر کمک میکند تا اجزای پشته خود را در سرویسهای کانتینربندی شده جداسازی کند. Compose مستقل از Docker توزیع داده شده است. باید پیش از افزودن Compose، داکر را نصب کرد. در غیر اینصورت Compose کار نخواهد کرد.
اشیای Docker چیست ؟
وقتی از داکر استفاده میشود، در واقع از Imageها، Containerها، شبکهها، Volumeها، افزونهها و سایر «اشیای داکر» استفاده شده است. در ادامه این بخش از نوشته «داکر چیست» توضیحات بیشتری پیرامون یکی از مهمترین اشیای داکر یعنی Image ارائه شده است.
Image در داکر چیست ؟
Image یک قالب فقط خواندنی به همراه دستورالعملهایی برای ایجاد یک کانتینر داکر به حساب میآید. اغلب، یک Image مبتنی بر Image دیگری به همراه برخی شخصیسازیهای افزوده است. برای مثال، ممکن است یک Image ایجاد شود که مبتنی بر Image ubuntu باشد، اما وب سرور آپاچی و اپلیکیشن را نصب کند و همچنین پیکربندی جزئیات مورد نیاز برای اجرای اپلیکیشن را هم انجام دهد. ممکن است فرد Imageهای خودش را ایجاد کند یا تنها از آن Imageهایی استفاده کند که توسط دیگران ایجاد و در یک رجیستری منتشر شدهاند.
برای ساخت Image شخصی، یک Dockerfile با سینتکسی ساده برای تعریف گامهای مورد نیاز برای ایجاد Image و اجرای آن ساخته میشود. هر یک از دستورالعملهای داخل یک Dockerfile لایهای در Image به وجود میآورند. وقتی که فرد Dockerfile را عوض میکند و Image را دوباره میسازد، تنها آن لایههایی که تغییر کردهاند دوباره ساخته خواهند شد. این بخشی از آن چیزی است که باعث میشود Imageها در مقایسه با سایر فناوریهای مجازیسازی بسیار کمحجم، کوچک و سریع باشند. پس از شرح معماری Docker ، در ادامه مقاله «داکر چیست» به بیان کاربردهای داکر پرداخته شده است.
کاربرد Docker چیست ؟
در این بخش از مقاله «Docker چیست» به شرح کاربردهای داکر پرداخته و به این سوال پاسخ داده شده است که Docker به چه منظوری استفاده میشود؟
تولید اپلیکیشنهای سریع و پایدار با داکر
داکر منجر به سادهسازی چرخه حیات توسعه میشود. این سادهسازی به وسیله فراهم کردن امکان کار در محیطهای استانداردسازی شده برای توسعهدهندگان با استفاده از Containerهای محلی فراهم شده است که اپلیکیشنها و خدمات لازم را ارائه میدهند. Containerها روشی عالی برای یکپارچهسازی و خدمتدهی پیوسته به حجمهای کاری به حساب میآیند. به عنوان مثال میتوان سناریوهای زیر را در نظر گرفت:
- توسعهدهندگان کدها را به صورت محلی مینویسند و با استفاده از کانتینرهای Docker کارشان را با همکاران خود به اشتراک میگذارند.
- توسعهدهندگان از داکر برای قرار دادن اپلیکیشن خود در یک محیط آزمایش و اجرای تستهای خودکار و دستی استفاده میکنند.
- زمانی که توسعهدهندگان خطاهایی (باگهایی) را شناسایی میکنند، میتوانند آنها را در محیط توسعه برطرف و دوباره آنها را در محیط آزمایشی برای تست و اعتبارسنجی مستقر کنند. (مفاهیم کاربردی در تست و خطایابی نرمافزار)
- وقتی که آزمایش تکمیل شد، تحویل نسخه جدید به مشتریان به سادگی ارسال (Push کردن) فایل Image به محیط تولید محقق میشود.
استقرار واکنشگرا و مقیاسپذیری در داکر
پلتفرم مبتنی بر محفظه (Container) در داکر امکان ایجاد حجم کاری (Workload) قابل حمل را فراهم میسازد. Containerهای داکر میتوانند روی لپتاپ توسعهدهنده، ماشینهای فیزیکی یا مجازی در یک مرکز داده، ارائه دهندگان فضای ابری یا روی محیطهای تلفیقی اجرا شوند.
طبیعت قابل حمل و حجم پایین داکر نیز مدیریت حجمهای کاری، تنظیم مقیاس یا تخریب اپلیکیشنها و خدمات را در صورت ایجاب نیاز یک کسب و کار به فرآیندی سهل و آسان بدل کرده است. به طوری که به واسطه فناوری Docker میتوان عملیات و تغییرات لازم را به صورت لحظهای و آنی پیادهسازی کرد.
اجرای حجم کاری بیشتر بدون ارتقا سختافزاری با داکر
داکر کمحجم و سریع است. Docker جایگزینی مقرون به صرفه برای «ماشینهای مجازی مبتنی بر لایه نرمافزاری» (Hypervisor-Based) به حساب میآید. با داکر میتوان ظرفیت محاسباتی بیشتری را برای دستیابی به اهداف کسب و کار به کار گرفت. داکر برای محیطهایی با تراکم بالا و همچنین برای استقرار نرمافزارهای کوچک و متوسط یعنی جایی مناسب است که نیاز به اجرای وظایف بیشتر با منابع کمتر وجود داشته باشد.
پس از بیان کاربردهای داکر ، نوبت به شرح ویژگیهای داکر در ادامه نوشته «Docker چیست» فرا میرسد.
ویژگی های داکر چیست ؟
داکر ویژگیهای متعددی را فراهم میسازد. در این بخش از مقاله «Docker چیست» برخی از ویژگیهای داکر فهرست شدهاند.
- پیکربندی سریعتر و سادهتر: با استفاده از Docker، کدها در زمان کمتر و با سهولت بیشتری قابل استقرار هستند. زیرا زیرساخت به محیط اپلیکیشن متصل نیست، چرا که داکر در بسیاری از محیطها مورد استفاده قرار میگیرد.
- ایزولهسازی اپلیکیشن: Containerهای داکر برای اجرای اپلیکیشنها در یک محیط ایزوله شده به کار میروند و هر کانتینر به صورت مستقل عمل میکند.
- افزایش بهرهوری: داکر به سادهسازی پیکربندی فنی و استقرار سریع اپلیکیشنها کمک میکند و مصرف منابع را کاهش میدهد.
- ابزار داکر ازدحامی (Docker Swarm): داکر ازدحامی یک ابزار خوشهبندی و زمانبندی برای Containerهای داکر محسوب میشود. Swarm در فرانتاند از API داکر (Docker API) استفاده میکند تا در به کارگیری ابزارهای مختلف برای کنترل داکر کمک کند. Swarm گروهی از موتورهای خود سازمانده است که توسعه بکاندهای قابل اتصال را امکانپذیر میسازد.
- خدمات داکر (Docker Services): خدمات داکر، فهرستی از وظایف است که حالت یک کانتینر در داخل یک خوشه را مشخص میکند. هر وظیفه در Docker Services نمونهای از یک کانتینر را فهرست میکند که باید اجرا شود. این کار در حالی انجام میشود که Swarm نمونهها را بین هستهها (نودها) زمانبندی میکند.
- مدیریت امنیت: در مدیریت امنیت داکر، Secretهایی در داخل Swarm ذخیره میشوند و Swarm تصمیم میگیرد که دسترسی Secretها و چند دستور مهم مثل «secret inspect» ، «secret create» و سایر موارد را به سرویسها بدهد یا خیر.
- ارائه خدمات نرمافزاری بهتر: کانتینرها قابل حمل و شامل یک دیسک Volume ایزوله شده هستند. این دیسک Volume ایزوله شده در طول توسعه کانتینر با آن همراه است و در محیطهای مختلفی قابل استقرار است.
- شبکهسازی مبتنی بر نرمافزار: داکر از شبکهسازی تعریف شده به وسیله نرمافزار (Software-Defined Networking) پشتیبانی میکند. بدون استفاده از حتی یک مسیریاب (روتر)، خط فرمان داکر و موتور داکر اپراتورها را قادر میسازد تا شبکههای ایزوله شده برای کانتینرها تعریف کنند.
- امکان کاهش حجم استقرار: با توجه به اینکه داکر به وسیله کانتینرها نمونه کوچکتری از سیستم عامل را فراهم میکند، میتوان گفت که داکر میتواند حجم توسعه نرمافزار را کاهش دهد.
حال پس از بیان ویژگیهای داکر ، بهتر است در ادامه نوشته «Docker چیست» به این سوال پاسخ داده شود که دلیل محبوبیت داکر چیست؟
دلیل محبوبیت داکر چیست؟
استفاده از کانتینرها و Docker به این دلیل بسیار محبوب شده است که آنها بسیاری از چالشهای توسعه نرمافزار را برطرف میکنند. امکان محفظهسازی تنها برای یک بار و اجرا در همه محیطها، منجر به کاهش فاصله میان محیط توسعه و سرورهای تولید محصول میشود. استفاده از Containerها این اطمینان و اعتماد را به وجود میآورد که همه محیطها برابر هستند. در صورتی که عضو جدیدی به تیم توسعه اضافه شود، این فرد تنها لازم است از دستور «docker run» برای راهاندازی نمونه توسعه خود استفاده کند. محیط زنده (Live Environment) دقیقاً با نمونه محلی مطابقت خواهد داشت و از حالتهایی که فقط روی یک ماشین کار میکند جلوگیری خواهد شد.
داکر نسبت به یک ماشین مجازی تمام عیار سادهتر است. ماشینهای مجازی ابزارهایی همهمنظوره هستند که برای پشتیبانی از هر میزان حجم کاری ممکن طراحی شدهاند. در مقابل آن، کانتینرهای کم حجم داکر، خودکفا و برای کاربردهای یک بار مصرف مناسبتر هستند. با توجه به اینکه داکر کرنل میزبان را به اشتراک میگذارد، Containerها تاثیر قابل چشمپوشی در کاهش عملکرد و کارایی سیستم دارند. زمان اجرای Container تقریباً لحظهای و بلافصل است. زیرا، به جای یک سیستم عامل کامل، تنها تعدادی پردازه راهاندازی میشوند. همه اینها گواهی برای محبوبیت داکر به حساب میآیند.
مزایا و معایب داکر
در این بخش از مقاله «داکر چیست» به طور خلاصه به شرح مزایای و معایب داکر پرداخته شده است.
مزایای داکر چه هستند؟
تا اینجا با شرح چیستی، کاربردها و ویژگیهای داکر و بسیاری از سایر موارد پیرامون فناوری داکر مزایای Docker به میزان زیادی روشن شدهاند و واضح است که فواید بسیاری در اجرای محیط توسعهای وجود دارد که دستگاه یا سیستم عامل زیرساختی برایش اهمیت و تفاوتی ندارد.
در ادامه این بخش از نوشته «داکر چیست» برخی از فواید و مزایای داکر فهرست شدهاند:
- ثبات و پایداری
- خودکارسازی
- صرفهجویی در فضا
- امکان استفاده از داکر در مک و ویندوز (که روز به روز بهتر هم میشود)
- سادهسازی فرایند خطایابی
- افزایش سرعت فرایند آمادهسازی
- جامعه توسعهدهندگان داکر بسیار وسیع است.
حال پس از شرح خلاصهای از مزایای داکر، در ادامه مقاله «داکر چیست» به بیان نقاط ضعف و معایب داکر پرداخته شده است.
معایب داکر چه هستند؟
با وجود مزایای متعدد، همه چیز در فناوری داکر بینقص نیست. برخی موارد در مورد داکر میتونند چالش برانگیز باشد و بهتر است آشنایی با این موارد وجود داشته باشد.
بنابراین، در ادامه این بخش از مقاله «داکر چیست» فهرستی از کاستیها و معایب داکر ارائه شده است:
- برخی کمبودها در مستندات داکر وجود دارند.
- داکر در محیطهای غیربومی تا حدودی مشکلات عملکردی از خود بروز میدهد.
- عملکرد داکر برای مک OS چندان قابل قبول نیست و در حد آزمایشی است.
- منحنی یادگیری برای مهاجرت به داکر میتواند قابل توجه باشد.
در ادامه مقاله «داکر چیست» به آموزش شروع به کار با داکر در ویندوز و لینوکس پرداخته شده است.
آموزش شروع به کار با Docker
داکر (Docker) در تمام توزیعهای مختلف لینوکس در دسترس است. علاوه بر آن، داکر روی ویندوز و مک OS هم اجرا میشود. برای شروع به کار با داکر ، ابتدا باید مراحل راهاندازی داکر روی پلتفرم مورد نظر (یک توزیع لینوکس، ویندوز یا مک OS) را انجام داد. در ادامه مقاله «Docker چیست» نحوه شروع به کار با داکر در ویندوز لینوکس و ویندوز آموزش داده شده است.
شروع به کار با Docker در ویندوز
در این بخش از نوشته «Docker چیست» نحوه شروع به کار با داکر در ویندوز از صفر آموزش داده شده است. برای شروع به کار با Docker در ویندوز (و مک) باید برنامه Docker Desktop را نصب کرد. بنابراین بهتر است در ابتدا به این سوال پاسخ داده شود که Docker Desktop چیست ؟ آموزش شروع به کار با داکر در لینوکس نیز پس از این بخش از مقاله «داکر چیست» ارائه شده است.
Docker Desktop چیست ؟
Docker Desktop اپلیکیشنی برای ماشینهای تحت مک OS و ویندوز است که برای ساخت و به اشتراکگذاری اپلیکیشنهای محفظهبندی شده و میکروسرویسها استفاده میشود. Docker Desktop شامل ابزارهای توسعه، Kubernetes و همگامسازی نسخه با موتورهای تولید داکر است.
Docker Desktop امکان بهرهمندی از Imageها ، قالبهای رسمی و هر زبان برنامهنویسی و ابزار توسعه دلخواه را فراهم میکند.
حال پس از آشنایی با Docker Desktop، در ادامه مقاله «داکر چیست» به شرح نحوه نصب داکر در ویندوز پرداخته شده است.
آموزش نصب Docker در ویندوز
کار را باید با مراجعه به نشانی دانلود Docker Desktop برای ویندوز آغاز کرد. همچنین برای استفاده از Docker Hub بهتر است یک حساب کاربری ایجاد شود. در صورتی که از طریق صفحه اصلی سایت داکر دکمه Get Started کلیک شود، صفحه ایجاد حساب کاربری ظاهر میشود و تنها پس از ایجاد حساب کاربری و وارد شدن صفحهای ظاهر میشود که در آن گزینه دانلود داکر برای ویندوز وجود دارد. ابتدا باید فایل نصب Docker Desktop را دانلود کرد. پس از دانلود، نوبت به نصب فایل Docker Desktop Installer فرا میرسد. مراحل نصب بسیار ساده است و تنها باید روی گزینه Install کلیک کرد.
پس از اتمام نصب باید سیستم را Restart کرد. پس از Restart شدن ویندوز، Docker Desktop به صورت خودکار اجرا میشود. در ابتدا ممکن است خطایی مبنی بر نیاز به نصب بهروزرسانی بسته کرنل لینوکس در ویندوز وجود داشته باشد. باید «Linux kernel update package» را دانلود و نصب کرد و سپس میتوان در پنجره خطای برنامه Docker Desktop دکمه Continue را کلیک کرد. پس از آن، Docker Engine در برنامه Docker Desktop به صورت خودکار بارگذاری میشود. حال در ادامه این بخش از مقاله «داکر چیست» به ارائه توضیحاتی پیرامون بخش راهنمای شروع به کار با داکر در Docker Desktop پرداخته شده است.
راهنمای شروع به کار با داکر در Docker Desktop
پس از انجام مراحل ذکر شده در بخش قبل، یک آموزش شروع به کار با داکر در داخل برنامه Docker Desktop به صورت خودکار آغاز و کاربر را برای شروع به کار با داکر در Docker Desktop راهنمایی میکند.
در این راهنما یک پنجره ترمینال در Docker Desktop وجود دارد و دستورات خط فرمان برای مراحل مختلف شروع به کار به صورت آماده در هر مرحله ارائه شده است که تنها با کلیک روی آن، دستورات در ترمینال اجرا میشوند. در ادامه تصویری از بخش آموزش ابتدایی و شروع به کار با داکر در برنامه Docker Desktop آمده است:
این راهنمای آموزشی در برنامه Docker Desktop شامل ۵ مرحله زیر است:
- ساخت مخزن گیتهاب: این مخزن حاوی همه آنچه برای ساخت یک Image و اجرای آن به عنوان یک Container خواهد بود.
- ساخت یک Image: در این مرحله دستورات لازم برای ساخت یک Image در ترمینال وارد میشود.
- اجرای اولین Container: پس از ساخت Image نوبت به اجرای Container میرسد. این Container اپلیکیشن را همراه با منابع و به صورت ایمن و ایزوله شده اجرا میکند.
- ذخیرهسازی و به اشتراکگذاری Image: در مرحله آخر دستورات لازم برای ذخیره و به اشتراکگذاری Image در Docker Hub انجام میشود.
در ادامه نوشته «Docker چیست» به آموزش شروع به کار با داکر در لینوکس پرداخته شده است.
آموزش شروع به کار با Docker در لینوکس
در این بخش از مقاله «داکر چیست» چگونگی شروع به کار با داکر در لینوکس شرح داده شده است. ابتدا به آموزش نصب داکر در لینوکس پرداخته میشود.
آموزش نصب داکر در لینوکس
میتوان Docker را روی انواع پلتفرمهای لینوکسی مثل CentOS ، Fedora ،Debian و Raspbian نصب کرد. مشتقاتی از این توزیعهای لینوکس نیز قابل استفاده هستند. نسخههای ۳۲ و ۶۴ بیتی داکر و نسخههای مخصوص ARM داکر نیز برای اکثر پلتفرمهای تحت پشتیبانی در دسترس است. در ادامه این بخش از نوشته «داکر چیست»، برای آموزش نصب داکر در لینوکس از یک سیستم مبتنی بر Debian با مدیر بسته apt استفاده شده است.
دستورالعملهای نصب و راهاندازی داکر برای سایر توزیعهای لینوکس را میتوان در مستندات داکر یافت. آموزش نصب داکر در لینوکس برای برخی دیگر از توزیعهای لینوکس نیز پس از Debian در این بخش از مقاله «داکر چیست» به طور خلاصه ارائه شدهاند.
آموزش نصب داکر در Debian و Ubuntu
در این بخش از مقاله «داکر چیست» به آموزش نصب داکر در Dbian و اوبونتو پرداخته شده است. برای نصب آخرین نسخه Docker میتوان از ساز و کار مدیریت بسته (Package Manager) در لینوکس استفاده کرد. ابتدا باید شاخه (Repository) داکر را اضافه کرد، فهرست بستهها را بهروزرسانی کرد و سپس داکر را نصب کرد. به این ترتیب، کار با افزودن متعلقات مورد نیاز در فرایند نصب آغاز میشود:
sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
سپس، نوبت به افزودن کلید GPG پوشه داکر فرا میرسد:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
حال باید پوشه را به منبع اضافه و فهرست بسته را بهروزرسانی کرد:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update
حالا میتوان با استفاده از دستور زیر داکر را نصب کرد:
sudo apt-get install docker-ce docker-ce-cli containerd.io
در ادامه آموزش نصب داکر در لینوکس از مقاله «داکر چیست» به آموزش نصب Docker در سیستم عامل Fedora پرداخته شده است.
آموزش نصب داکر در Fedora
افزودن پوشه بسته Docker در Fedora به صورت زیر انجام میشود:
sudo dnf -y install dnf-plugins-core sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
سپس، باید داکر را در Fedora به صورت زیر نصب کرد:
sudo dnf install docker-ce docker-ce-cli containerd.io
آموزش نصب داکر در CentOS
افزودن مخزن بسته داکر در سیستم عامل CentOS به صورت زیر انجام میشود:
sudo yum -y install yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
سپس، دستور نصب Docker در CentOS نیز در ذیل آمده است:
sudo yum install docker-ce docker-ce-cli containerd.io
پس از آموزش نصب داکر در لینوکس، باید صحت نصب داکر در لینوکس مورد آزمایش قرار بگیرد. این کار در ادامه این بخش از مقاله «Docker چیست» انجام شده است.
آزمایش نصب Docker در لینوکس
پس از نصب Docker ، باید آزمایش کرد که آیا نصب به درستی انجام شده است یا خیر. میتوان برای آزمایش صحت نصب داکر از «minimal hello-world image» به صورت زیر استفاده کرد:
docker run hello-world:latest
پس از وارد کردن دستور فوق، باید چند خط خروجی مانند تصویر زیر در ترمینال ملاحظه شود. داکر ابتدا به دنبال Image مربوط به hello-world:latest در ماشین (لینوکسی) مربوطه خواهد بود. سپس، Image از مخزن Docker Hub بیرون کشیده خواهد شد.
پس از آنکه Image بیرون کشیده شد، یک Container جدید از آن ایجاد خواهد شد. این کانتینر به گونهای پیکربندی شده است تا یک پیام Hello World ساده را منعکس کند و سپس خارج شود. اگر متن «Hello World» در خروجی ملاحظه شود، نصب Docker به درستی انجام شده است. همچنین، میتوان نصب و راهاندازی صحیح داکر روی سیستم را به وسیله دستور زیر نیز آزمایش کرد:
docker run hello-world
این دستور هم یک Container جدید با یک Image ساده hello-world را راهاندازی خواهد کرد. این Image یک خروجی را درست مطابق تصویر فوق چاپ خواهد کرد که در آن چگونگی استفاده از داکر شرح داده شده است. حال پس از آموزش نصب داکر در لینوکس، بهتر است در ادامه مقاله «Docker چیست» به آموزش استفاده از Docker بدون Sudo در لینوکس پرداخته شود.
آموزش استفاده از Docker بدون Sudo در لینوکس
استفاده از Docker Daemon یا همان سرویس داکر در لینوکس تنها به صورت Root قابل انجام است.
به همین دلیل باید همیشه قبل از دستورات Docker از دستور Sudo استفاده کرد. اگر از داکر زیاد استفاده میشود، استفاده از Sudo میتواند خسته کننده و تکراری باشد. افزودن شناسه کاربر به گروه Docker امکان استفاده از داکر را بدون Sudo فراهم میکند:
sudo usermod -aG docker $USER
پس از افزودن شناسه کاربری خود به گروه داکر، باید از سیستم خارج و دوباره وارد شد. همچنین، به جای این کار میتوان دستور «newgrp docker» را برای ورود بلافصل به گروه بهروزرسانی شده استفاده کرد. حالا باید امکان عدم استفاده از عبارت Sudo در دستورات داکر به وجود آمده باشد. در ادامه آموزش شروع به کار با داکر در لینوکس از نوشته «Docker چیست» به شرح چگونگی ایجاد Image در داکر پرداخته شده است.
آموزش ایجاد Image در Docker
پس از اجرای hello-world حال آمادگی برای ایجاد Imageهای شخصی داکر فراهم شده است. نحوه انجام این کار در این بخش از مقاله «Docker چیست» آموزش داده شده است.
یک فایل Docker یا «Dockerfile» نحوه اجرای سرویس را به وسیله نصب نرمافزار مورد نیاز و کپی و وارد کردن فایلها توصیف میکند. در ادامه این بخش از مطلب «Docker چیست» ، مثال سادهای در این خصوص با استفاده از وب سرور آپاچی ارائه شده است:
FROM httpd:latest RUN echo "LoadModule headers_module modules/mod_headers.so" >> /usr/local/apache2/conf/httpd.conf COPY .htaccess /var/www/html/.htaccess COPY index.html /var/www/html/index.html COPY css/ /var/www/html/css
در کدهای فوق، خط مربوط به FROM تصویر یا Image پایه را تعریف و تعیین میکند. در این مورد به خصوص، کار از تصویر (Image) رسمی آپاچی شروع شده است. داکر دستورات باقیمانده در Dockerfile را بر اساس Image پایه اعمال میکند. مرحله RUN یک دستور را در درون نگهدارنده (Container) اجرا میکند. این میتواند هر دستوری باشد که در محیط کانتینر در دسترس است. همچنین، Headerهای ماژول آپاچی فعال میشوند. این Headerها میتوانند به وسیله فایل « «.htaccessبرای تنظیم قواعد مسیریابی استفاده شوند. در خطوط پایانی، فایلهای HTML و CSS از پوشه فعلی به داخل Container Image کپی میشوند. به این ترتیب، اکنون Image مربوطه همه آنچه برای اجرای وبسایت مورد نیاز است را در بر دارد. حالا میتوان Image را ساخت و ایجاد کرد:
docker build -t my-website:v1 .
داکر از Dockerfile برای ساخت Image استفاده خواهد کرد. با اجرای هر یک از دستورات توسط داکر، خروجی در ترمینال ملاحظه خواهد شد. برچسب -t در دستور فوق، Image مربوطه را با یک نام تعیین شده برچسبگذاری میکند (my-website:v1). این برچسبگذاری (Tag کردن) ارجاع به Image را در آینده سادهتر خواهد کرد. برچسبها (Tagها) دارای دو بخش هستند که هر یک از این بخشها با یک علامت دو نقطه از یکدیگر جداسازی میشوند. اولین بخش، نام Image را تعیین و بخش دوم، نسخه آن را مشخص میکند.
علامت نقطه در انتهای دستور فوق به داکر میگوید که از Dockerfile موجود در پوشه کاری محلی استفاده کند. همچنین، زمینه ساخت (Build Context) نیز به این وسیله تنظیم میشود که به کاربر امکان میدهد با دستورات COPY در Dockerfile خود از فایلها و پوشهها در پوشه کاری استفاده کند. پس از اینکه Image ایجاد شد، میتوان یک Container را با استفاده از دستور «docker run» ایجاد یا آغاز کرد:
docker run -d -p 8080:80 my-website:v1
در خط کد بالا، از تعدادی پرچم (Flag) به همراه دستور docker run استفاده شده است. پرچم «-d» باعث میشود که خط فرمان داکر (CLI) از کانتینر جدا شود که باعث میشود کانتینر بتواند در پسزمینه اجرا شود. یک عملیات نگاشت پورت (Port Mapping) با پرچم «-p» انجام میشود تا پورت ۸۰۸۰ در میزبان به پورت ۸۰ در Container نگاشت شود. با مراجعه به آدرس «localhost:8080» میتوان صفحه وب را در مرورگر ملاحظه کرد. Imageهای داکر از چند لایه تشکیل شدهاند. هر دستورالعمل در فایل داکر یک لایه جدید ایجاد میکند. میتوان از قابلیتهای ساخت پیشرفته برای ارجاع به چند Image پایه استفاده کرد که باعث جدا شدن لایههای میانی از Imageهای اولیه میشود. در ادامه این بخش از نوشته «Docker چیست» به آموزش عملی استفاده از Registery در داکر پرداخته شده است.
بایگانیهای Image
وقتی که یک Image وجود داشته باشد، میتوان آن را در یک بایگانی (Registery) قرار داد (Push کرد). بایگانیها امکان ذخیرهسازی متمرکز را فراهم میکنند تا بتوان کانتینرها را با دیگران به اشتراک گذاشت. بایگانی پیشفرض، «Docker Hub» نام دارد.
وقتی دستوری اجرا میشود که در آن به یک Image ارجاع داده شده، داکر ابتدا بررسی میکند که آیا این Image به صورت محلی در دسترس است یا خیر. در صورتی که Image به صورت محلی در دسترس نباشد، سعی خواهد شد تا Image مربوطه از Docker Hub بیرون کشیده شود (واکشی شود). میتوان Imageها را به صورت دستی (Manual) با استفاده از دستور «docker pull» بیرون کشید:
docker pull httpd:latest
در صورتی که قصد انتشار یک Image وجود داشته باشد، باید یک شناسه کاربری Docker Hub ایجاد شود. سپس باید دستور «docker login» را اجرا و شناسه و رمز را وارد کرد. پس از آن، باید Image را با استفاده از شناسه کاربری Docker Hub برچسبگذاری کرد:
docker tag my-image:latest docker-hub-username/my-image:latest
حالا میتوان Image مربوطه را درج (Push) کرد:
docker push docker-hub-username/my-image:latest
حالا سایر کاربران این امکان را خواهند داشت تا Image مربوطه را واکشی (Pull) و کانتینرهایی را با استفاده از آن ایجاد کنند. همچنین میتوان بایگانی شخصی مربوط به خود را راهاندازی کرد. این کار در صورتی انجام میشود که نیاز به یک محل ذخیره خصوصی وجود داشته باشد. همچنین، بسیاری از سرویسهای شخص ثالث، بایگانیهایی به عنوان جایگزین Docker Hub ارائه میدهند. ادامه این بخش از مقاله «Docker چیست» به مدیریت Containerها در خط فرمان Docker اختصاص دارد.
مدیریت Containerها در خط فرمان Docker
خط فرمان داکر دستورات زیادی برای مدیریت Containerهای در حال اجرا دارد. در این بخش از نوشته «Docker چیست» به معرفی کاربردیترین دستورات برای مدیریت Containerهای در حال اجرا ارائه شده است:
فهرست کردن کانتینرها در خط فرمان داکر
دستور «docker ps» تمام کانتینرهای در حال اجرا را نمایش میدهد. با اضافه کردن یک پرچم «-a» کانتینرهای متوقف شده نیز نمایش داده میشوند:
در ادامه این بخش از مطلب «Docker چیست»، چگونگی متوقف کردن و آغاز کردن Containerها در خط فرمان داکر شرح داده شده است.
متوقف کردن و آغاز کردن Containerها در خط فرمان داکر
برای متوقف کردن یک کانتینر باید دستور «docker stop my-container» را اجرا کرد. نام کانتینر یا شناسه آن با جایگزین «my-container» میشود. میتوان اطلاعات مربوط به نام یا شناسه یک Container را با استفاده از دستور ps استخراج کرد. یک کانتینر متوقف شده با دستور «docker start my-container» بازنشانی (Restart) میشود.
کانتینرها معمولاً تا زمانی که پردازه آنها فعال باشد، در حال اجرا به حساب میآیند. خط مشیهای بازنشانی آنچه در زمان توقف یک کانتینر یا بازنشانی میزبان رخ میدهد را تحت کنترل دارند. با اجرای دستور «–restart always to docker run» یک کانتینر به بازنشانی درست بعد از متوقف شدنش واداشته میشود. حال در ادامه مقاله «Docker چیست» به نظارت بر Logها از طریق خط فرمان داکر پرداخته شده است.
نظارت بر Logها از طریق خط فرمان داکر
داکر به صورت خودکار خروجی منعکس شده به جریانهای ورودی و خروجی استاندارد یک Container را نگهداری میکند. دستور «docker logs my-container» لاگ (تاریخچه) یک کانتینر را در داخل خط فرمان نمایش میدهد. پرچم «–follow» یک جریان مداوم را راهاندازی میکند که از طریق آن میتوان لاگهای لحظهای را مشاهده کرد.
ادامه مقاله «Docker چیست» به پاکسازی منابع در Docker اختصاص دارد.
پاکسازی منابع در Docker
کانتینرها و Imageهای قدیمی معمولاً به سرعت روی هم تلنبار شده و فضای زیادی از سیستم را اشغال میکنند. با استفاده از دستور «docker rm my-container» میتوان یک کانتینر را با استفاده از نام یا شناسهاش حذف کرد. دستور حذف Imageها به صورت: «docker rmi my-image:latest» است که باید شناسه یا نام کامل Image مربوطه را با my-image جایگزین کرد.
در صورتی که یک برچسب مشخص شده باشد، Image پاک نخواهد شد. در واقع، یک Image زمانی حذف میشود که هیچ برچسبی به آن اختصاص داده نشده باشد. در غیر اینصورت، برچسب مربوطه پاک خواهد شد، اما سایر برچسبهای آن Image همچنان قابل استفاده خواهند بود.
پاکسازی سراسری (یکجا) با استفاده از دستور «docker prune» انجام میشود. با استفاده از این دستور، میتوان به راحتی حذف تمام کانتینرهای متوقف شده و Imageهای زائد را انجام داد. در ادامه نوشته «Docker چیست» به کنترل مدیریت از طریق رابط گرافیکی در Docker پرداخته شده است.
مدیریت از طریق رابط گرافیکی در Docker
در صورتی که استفاده از ترمینال باب میل نباشد، میتوان از ابزارهای ثانویه برای راهاندازی یک واسط گرافیکی برای داکر استفاده کرد. داشبوردهای وب (Web Dashboards) امکان نظارت و مدیریت نصب را فراهم میکنند. همچنین، داشبوردهای وب اجازه دسترسی راه دور به Containerها را به وجود میآورند. حال در ادامه مقاله «Docker چیست» به موضوع ذخیرهسازی مداوم دادهها در داکر پرداخته شده است.
ذخیرهسازی مداوم دادهها
کانتینرهای داکر به صورت پیشفرض موقتی هستند. تغییرات اعمال شده در سیستم فایل یک Container پس از متوقف شدن آن باقی نخواهند ماند. اجرای هیچ نوع سیستم ذخیرهسازی فایل در کانتینری که با یک دستور ساده docker run ایجاد شده باشد امن نیست. برخی رویکردها برای مدیریت دادههای دائمی وجود دارند.
رایجترین آن استفاده از یک Docker Volume است. Volumeها واحدهای ذخیرهسازی هستند که در داخل سیستمهای فایل Containerها نصب میشوند. هر دادهای در یک Volume پس از متوقف شدن کانتینر مرتبطش، دست نخورده باقی میماند و امکان متصل کردن کانتینر دیگر در آینده را فراهم میکند. ادامه نوشته «Docker چیست» به بحث حفظ امنیت در داکر اختصاص دارد.
حفظ امنیت در داکر
پروژههایی که از Docker در آنها استفاده شده است نسبت به سایر موارد میتوانند امنیت بیشتری داشته باشند. زیرا داکر تا حدودی میان سیستم عامل و سرویسهای پروژه فاصله ایجاد میکند. با این وجود، Docker یک مسئله بالقوه امنیتی به حساب میآید، چرا که به صورت معمول Docker در حالت Root اجرا میشود.
به همین دلیل داکر میتواند برای اجرای نرمافزارهای آلوده مورد بهرهبرداری قرار بگیرد. در صورتی که تنها از Docker به عنوان یک ابزار توسعه نرمافزار استفاده میشود، استفاده از داکر در حالت نصب پیشفرض به طور کلی امن است. سرورهای مربوط به تولید که دارای یک سوکت دیمن (سرویس) در معرض شبکه هستند باید قبل از اجرا شدن از لحاظ امنیتی مقاوم شوند.
برای شناسایی مسائل امنیتی بالقوه باید نسخه نصب شده Docker را بررسی کرد. ابزارهای خودکار برای این کار وجود دارند که میتوانند به یافتن نقاط ضعف و ارائه راهکار برای رفع آنها کمک کنند. همچنین، میتوان هر یک از Imageهای کانتینر را برای شناسایی مسائلی که میتوانند از داخل مورد سو استفاده قرار بگیرند بررسی کنند. در ادامه نوشته «Docker چیست» به کار با چند Container به وسیله Docker Compose پرداخته شده است.
کار با چند Container به وسیله Docker Compose
دستور docker تنها با یک کانتینر در لحظه کار میکند. اما ممکن است نیاز به استفاده از چند Container به صورت جمعی وجود داشته باشد. «Docker Compose» ابزاری است که امکان تعریف کانتینرها را به صورت اعلامی (Declarative) در یک فایل YAML فراهم میکند. بنابراین، با استفاده از Docker Compose میتوان تمام کانتینرها را تنها با یک دستور اجرا کرد.
این قابلیت زمانی مفید است که پروژه به سرویسهای دیگری مثل یک بکاند وب وابسته باشد که متکی بر یک سرور پایگاه داده است. هم میتوان Containerها را در فایل docker-compose.yml تعریف کرد و هم از مدیریت چابک با شبکهسازی خودکار بهرهمند شد. در ادامه یک فایل docker-compose.yml ساده آمده است:
version: "3" services: app: image: app-server:latest ports: - 8000:80 database: image: database-server:latest volumes: - database-data:/data volumes: database-data:
در کدهای فوق دو Container (یکی مربوط به اپلیکیشن و دیگری برای پایگاه داده) تعریف میشود. همچنین، یک Volume نیز برای پایگاه داده ایجاد شده است. این Volume در بخش /data داخل کانتینر بارگذاری میشود. پورت ۸۰ مربوط به سرور اپلیکیشن به عنوان پورت ۸۰۰۰ در معرض میزبان قرار میگیرد. برای ایجاد هر دو سرویس باید از دستور «docker-compose up -d» شامل شبکه و Volume استفاده شود. استفاده از Docker Compose به کاربر اجازه میدهد تعاریف Containerهای قابل استفاده مجددی بنویسد که میتوان آنها را با دیگران به اشتراک گذاشت.
به جای واداشتن توسعهدهندگان به حفظ کردن دستورات docker run، میتوان یک فایل docker-compose.yml را در سیستم کنترل نسخه Commit کرد. روشها و رویکردهای دیگری هم برای اجرای چند Container وجود دارد. Docker App راهکاری نوظهور است که سطح انتزاع دیگری را فراهم میکند. در نقاط دیگری از زیستبوم، Podman جایگزینی برای داکر است که امکان ایجاد «Podهایی» (غلاف) از کانتینرها را به وسیله ترمینال فراهم میکند. آخرین موضوعی که در مقاله «Docker چیست» به آن پرداخته شده، تنظیم و هماهنگسازی Container است.
تنظیم و هماهنگسازی Container
داکر معمولاً به همین شکلی که هست در تولید اجرا و پیادهسازی نمیشود. در حال حاضر رایجتر است که از یک پلتفرم تنظیم و هماهنگسازی (Orchestration) مثل Kubernetes یا حالت داکر ازدحامی (Docker Swarm) استفاده شود. چنین ابزارهایی برای مدیریت چند ماکت (Replica) کانتینر استفاده میشوند که مقیاسپذیری و قابلیت اطمینان را بهبود میدهند. داکر تنها جزئی از جنبش وسیعتر محفظهبندی به حساب میآید.
هماهنگ کنندهها از فناوریهای Container زمان اجرای مشابهی برای فراهم کردن محیطی استفاده میکند که برای تولید مناسبتر هستند. استفاده از چند نمونه کانتینر امکان اعمال بهروزرسانیها را به همراه توزیعهایی بین ماشینها فراهم میکند. این مسئله باعث میشود که استقرار نرمافزار با انعطافپذیری بیشتر نسبت به تغییرات و قطع و وصلیها انجام شود. با یک خط فرمان معمولی داکر، تنها میتوان یک میزبان را هدف قرار داد و با هر یک از Containerها به صورت مستقل و مستقیم تعامل داشت. در بخش پایانی مقاله «Docker چیست» برخی از دورههای آموزشی مرتبط معرفی شدهاند.
جمعبندی
در این مقاله به طور جامع مباحث مربوط به فناوری Docker شرح و به این سوال پاسخ داده شد که داکر چیست ؟ کانتینرها در داکر یکی از مفاهیم کلیدی به حساب میآیند که به طور جامعی پیرامون آنها توضیحات لازم ارائه شد. علاوه بر آن به شرح کاربردها، ویژگیها، مزایا و معایب داکر نیز در مقاله «Docker چیست» پرداخته شده است.
همچنین، بسیاری از مفاهیم اصلی در Docker در این مقاله معرفی شدهاند. برخی از این مفاهیم شامل Image ، کلاینت داکر، Docker Daemon، هاب داکر، Docker Compose و سایر موارد است. در ادامه نیز راهنمایی برای شروع به کار با داکر در ویندوز و لینوکس ارائه شده است و بسیاری از مفاهیم داکر به صورت عملی آموزش داده شدهاند. امید است مقاله «Docker چیست» برای خوانندگان مفید واقع شود.