Docker یک نرمافزار یا بهتر است بگوییم پلتفرمی باز برای توسعه، حملونقل و اجرای برنامهها است. با استفاده از این برنامه کامپیوتری میتوان محصولات نرمافزاری را از زیرساختها بهسرعت جدا کرد و تحویل مشتری داد. اغلب از برنامه داکر برای توسعه نرمافزارها و Applicationها روی فضاهای ابری و کانتینرها استفاده میشود.
در این مقاله قصد داریم تا به بررسی معماری Docker بهصورت کامل همراه با کاربردهای آن بپردازیم. اگر چیزی از این پلتفرم نمیدانید و یا حتی نام این نرمافزار نیز به گوشتان نخورده است، در ادامه با ما همراه باشید تا درک کاملی از داکر و بخشهای مختلف آن به دست آورید.
فهرست عناوین مقاله
داکر چیست؟
تا قبل از این اگر میخواستید یک برنامه وب را اجرا کنید ابتدا باید یک سرور تهیه میکردید، سپس با نصب سیستمعامل لینوکس (Linux) و اجرای یک پشته LAMP، برنامه آماده راهاندازی میشد. بعدها اگر برنامه بهخوبی توسعه مییافت و ترافیک ورودی افزایش پیدا میکرد، میتوانستید با تهیه سروری دیگر حجم درخواستها و ترافیک را کنترل کنید. اما در دنیای اینترنت و ارتباطات امروزی دیگر راهاندازی و اجرای یک وب اپلیکیشن بهسختی گذشته نیست.
به لطف دو مؤلفه مجازیسازی و سرورهای ابری، میتوان بهراحتی دانه یک نرمافزار را در محیطی ایزوله و مطمئن کاشت و بعد از توسعه و بزرگ کردن آن، در صورت لزوم بهراحتی منابع و زیرساختهای موردنیاز را افزایش داد.
مطالعه مقاله رایانش ابری چیست؟ را پیشنهاد می کنیم.
بگذارید بهتر توضیح دهم. فرض کنید که قصد دارید دانهای را بکارید و آن را تبدیل به درخت کنید. حال فرض بعدی را این در نظر بگیرید که مکانی برای کاشت دانه ندارید و همچنین تا قبل از این هم گلدان اختراع نشده بود! پس تنها چاره کار خرید یا اجاره یک زمین خالی برای این کار است. درنتیجه برای شروع باید هزینههایی بهمنظور اجاره یا خرید زمین در نظر بگیرید که یکی از معایب کشاورزی در این حالت تلقی میشود. زیرا افراد زیادی پول کافی برای این کار ندارند.
حال بعد از مثلا 10 سال اولین گلدانها وارد بازار شد تا بتوان با هزینه بسیار کم یکی از آنها را تهیه کرد و بعد رشد کافی دانه، سپس اقدام به بزرگ کردن گلدان و یا حتی خرید زمین کرد. دقیقا اجرای یک برنامه تحت وب نیز تا قبل از مجازیسازی و سرویس ابری به این صورت بود. یعنی اگر برنامهنویسی قصد خلق یک WebApplication را داشت، ابتدا باید یک سرور با تمامی منابع را اجاره یا خریداری میکرد.
اما بعد از Virtualization و Cloud Service، حال یک برنامهنویس میتوانست یک کانتینر (Container) که نشاندهنده همان گلدان است، بر اساس بودجه و نیاز خود تهیه کند و سپس با توسعه نرمافزار، کانتینر را نیز بزرگتر کند. سرویس ابری داکر همراه با ابزارهای مختلف خود اجازه کنترل و مدیریت این کانتینرها (همان گلدانها) را امکانپذیر میسازد. البته گزینههای دیگری نیز بهجای Docker برای این کار مانند CRI-O, Podman, LXC وجود دارند.
برای آشنایی بهتر با مفهوم اصطلاح کانتینر یا ظروف مجازی پیشنهاد میکنیم تا مقاله مربوط به مجازیسازی را مطالعه فرمایید.
کاربرد Docker
آیا بعد از رشد و تکامل برنامه بهاندازه کافی باز نیاز به استفاده از ابزارهای مدیریت و کنترل کانتینرها مانند Docker است؟ باید در پاسخ گفت که بله و حتی بیشتر از قبل. در برنامهنویسی و بخصوص توسعه نرمافزارهای تحت وب همواره نیاز به یک میز کار ایزوله و ایمن برای انجام برخی امور خارج یا مرتبط به شبکه حس میشود. از جمله مهمترین کاربردهای داکر (Docker) عبارتاند از:
۱) رفع ایرادات، توسعه نرمافزار و تحویل آن در سریعترین زمان ممکن و بهصورت پیوسته
با استفاده از داکر و به لطف کانتینرهای مجازی میتوان بهسرعت برنامهای را بهروزرسانی کرد و با انجام تستهایی در محیط ایزوله، ایرادات و باگهای آن را رفع کرد. همچنین با همکاران مرتبط نیز بهصورت متمرکز همکاری کنید تا سرعت کار افزایش یابد.
برای مثال اگر قصد دارید تا سایت خود را آپدیت کنید، به چه صورت عمل خواهید کرد؟ سایتهای معتبری مانند دیجیکالا با بازدید روزانه بیش یک میلیون کاربر هیچوقت و هرگز بهروزرسانی سایت خود را بهصورت آنلاین انجام نمیدهد. ابتدا یک کپی از سایت را گرفته و سپس با انتقال آن به یک کانتینر مجازی و ایزوله، به لطف ابزارهای Docker، سایت را بهصورت کاملا شبیهسازی شده اجرا میکند.
سپس تیم متخصص با دسترسیهایی که به کانتینر دارند وارد عمل شده و در سریعترین زمان ممکن هر نوع نیازی برای بهروزرسانی را اعمال میکنند. بعد از رفع باگها و ایرادات حال در همان محیط ایزوله سایت را چندین بار تست کرده، در نهایت به لطف قابلیتهای Containers و داکر، سایت جدید جایگزین میشود.
۲) استقرار و پیادهسازی آن بدون محدودیت
روی هر دستگاهی میتوان بدون محدودیت کانتینرهای مجازی شده و مبتنی بر ابزارهای Docker را اجرا کرد که از دیگر ویژگیهای جذاب این پلتفرم برای برنامهنویسان است. زیرا اگر تازهکار هستید و به دنبال آموزش، تنها با virtualization کردن لپتاپ یا کامپیوتر شخصی خود بدون نیاز به پرداخت هزینه برای اجاره سرویس ابری، میتوانید از توسعه WebApplicationها لذت ببرید.
پس میتوان نتیجه گرفت که استقرار پلتفرمها بر مبنای Docker و مجموعه ابزارهای آن، روی هر نوع سختافزاری باقدرت پردازشی حتی کم یا سرورهای ابری متشکل از ارتباط میان دیتا سنترهای بزرگ و متعدد، امکانپذیر خواهد بود.
۳) اجرای بار کاری زیاد روی همان سختافزار
آخرین ویژگی مهم این سیستم، سبک و سریع بودن آن است. نباید تصور شود که مانند یک سیستمعامل (مثلا ویندوز) این پلتفرم نیز سنگین است و نیاز به فضای ذخیرهسازی و قدرت پردازشی نسبتا زیادی برای اجرا دارد.
بلکه قضیه کاملا برعکس است. یعنی کانتینرهای مجازی در کنار ابزارهای مدیریت و کنترل آن (داکر یا دیگر ابزارهای مرتبط)، برای اجرا در محیطی متراکم و تعداد بالا طراحی شدهاند. یعنی در یک منبع سختافزاری میتوان تعداد بالایی از این ظروف مجازی را بدون مشکل نصب و اجر کرد.
از این ویژگی برای انجام کارهای سبک ولی متعدد در یک منبع و زیرساخت سختافزاری واحد، بهمنظور کاهش هزینهها استفاده میشود. مانند پیادهسازی عملیات مانیتورینگ، نرمافزارهای امنیتی، کدهای برنامه و… در یک سرور ولی در چند محیط ایزوله.
مقاله مانتیورینگ شبکه چیست؟ را از دست ندهید.
Docker Engine
مهندسی داکر این امکان را میدهد تا بهراحتی برنامهها را توسعه دهید و یا مونتاژ کرده و به هر مکانی ارسال کنید. Docker Engine از سه بخش اصلی تشکیل شده است که قبل از توضیح معماری و ساختار (architecture) آن، بهتر است تا با این سه بخش آشنا شویم.
Docker Daemon: یک فرایند و عملیات دائمی را در پسزمینه اجرا میکند که وظیفه کنترل و مدیریت تصاویر، کانتینرها، شبکهها و فضای ذخیرهسازی را بر عهده دارد. داکر deamon بهصورت مداوم در حال گوشدادن به درخواستهای Docker API و اجرای آنها است.
Docker Engine REST API: یک API است که برای ایجاد تعامل با deamon توسط برنامهها استفاده میشود و به این API میتوان با یک client HTTP دسترسی ایجاد کرد.
Docker CLI: یک command line interface client (سرویسگیرنده رابط خط فرمان) برای تعامل با deamon داکر است. این داکر مدیریت containerها را بسیار ساده میکند و از دلایل محبوبیت Docker میان کاربران طلقی میشود.
با این تعاریف باید اضافه کرد که داکر را میتوان روی سیستمعاملهای Mac OS و Windows 10، انواع مختلف سرورهای Linux و Windows Server 2016 یا سرویسهای ابری Amazon Web Services، Microsoft Azure، Google Compute Platform، IBM Cloud و… اجرا نمود.
اجزا داکر یا Docker architecture
معماری داکر بهصورت Client – Server (مشتری – سرور) است که در آن Docker client با Docker deamon ارتباط برقرار (بهتر بگوییم صحبت) میکند تا کارهای سنگین ساخت، اجرا و توزیع کانتینرهای داکر، انجام گیرد. هر دو داکر (client و deamon) میتوانند روی یک سیستم اجرا شوند و یا docker client در یک سیستم جداگانه اجرا شده و با اتصال از راه دور با docker deamon ارتباط برقرار کند.
در صورت Remote (از راه دور) بودن اتصال، client و deamon داکر با استفاده از REST API، با بهرهگیری از سوکتهای یونیکس (UNIX sockets) یا یک شبکه اتصالی، باهم ارتباط برقرار میکنند. یکی دیگر از مشتریهای داکر (Docker client)، Docker Compose نام دارد که به شما اجازه میدهد تا با برنامههای تشکیل شده از مجموعه کانتینرها کار کنید. اجزای اصلی داکر عبارتاند از:
Docker Client
مشتری داکر به کاربران اجازه میدهد تا با هسته اصلی docker صحبت و دستورات لازم را صادر کنند. همانطور که گفته شد، client و deamon میتوانند روز یک هاست یا سیستم سختافزاری مشترک اجرا شوند و یا از طریق ارتباط راه دور باهم تعامل داشته باشند. همچنین باید اشاره کرد که یک مشتری میتواند با بیش از یک deamon ارتباط داشته باشد. docker client با ارائه یک CLI، کاربر را قادر میسازد تا دستورات مختلفی مانند اجرا یا توقف برنامه برای deamon صادر کند. مانند:
- docker build
- docker pull
- docker run
Docker Host
میزبان داکر یک محیط کامل و ایزوله را برای اجرای تمامی دستورات و عملیاتها فراهم میکند. برای مثال دستورات کشیدن تصویر و خلق یک کانتینر (container) که با استفاده از مجموعه عملیاتهایی انجام میگیرد، در محیط هاست داکر میزبانی میشود.
Docker Objects
آبجکتهای اصلی داکر عبارتاند از:
- Images: یک الگوی باینری که فقط قابلیت خواندن را دارد، بوده و شامل متا دیتاهایی (metadata) برای توصیف نیازها و ویژگیهای کانتینرها است. تصاویر را میتوان میان تیمهای یک پروژه یا حتی برای کل جهان به اشتراک گذاشت.
- Containers: ظروف (containers)، محیطهای محصور شده و ایزولهای هستند که در آنها برنامهها اجرا میشوند. دسترسی منابع کانتینرها توسط تصاویر (Images) کنترل شده و ازجمله به اتصالات شبکه و گزینههای ذخیرهسازی تعریف میشوند.
- Networking: داکر، نتورکینگ نرمافزارها را بهصورت application-driven مدیریت کرده و همچنین برای پیکربندی شبکه گزینههای متنوعی را برای توسعه دهندگان ارائه میکند. در حالت کلی دو نوع شبکه در معماری داکر برای توسعه دهندگان در نظر گرفته شده است. شبکههای پیشفرض و شبکههای تعریف شده توسط کاربر یا توسعهدهنده.
None، bridge و host سه شبکه پیشفرض در نظر گرفته شده است. البته bridge زیاد موردتوجه دولوپرها نیست زیرا در مواردی محدودیتهای دارد. شبکههای تعریف شده توسط کاربر نیز شامل: Bridge network، Overlay network و Macvlan network است.
- Storage: میتوان دادهها و اطلاعات را در لایههای قابل نوشتن کانتینرها ذخیره کرد، اما زمانی که یک کانتینر اجرا نشود، دادهها از بین خواهند رفت. ازاینرو نیاز به یک فضای ذخیرهسازی دیگری نیز است که معماری داکر 4 مدل Storage دائمی را ارائه میکند.
- Data Volumes: توانایی ایجاد یک فضای ذخیرهسازی دائمی در خارج از کانتینرها و روی سیستم میزبان را ارائه میکند.
- Data Volume Container: یک Storage در یک Container جدا و مستقل ایجاد میکند که میتوان این ظرف مخصوص برای ذخیره دادهها را با کانتینرهای دیگر به اشتراک گذاشت.
- Directory Mounts: گزینه دیگری که دولوپرها برای ذخیرهسازی دادهها و اطلاعات خود میتوانند استفاده کنند، Directory Mounts است که یک دایرکتوری محلی در هاست و کانتینر قرار میدهد.
- Storage Plugins: اما بهترین گزینه و همچنین راحتترین روش برای ذخیرهسازی DATA استفاده از اتصالات Storage و بخصوص نوع ابری آن است. در این روش با استفاده از افزونههای خاصی امکان اتصال میان کانتینر و پلتفرمهای ذخیرهسازی خارجی فراهم میشود. انواع مختلفی از Storage Plugins عبارتاند از: HPE 3PAR، EMC (ScaleIO, XtremIO, VMAX, Isilon)، NetApp و نوع ابری آنها عبارتاند از: Azure File Storage و Google Compute Platform.
Docker Registries
رجیستریهای داکر مکانهایی است که کاربران و توسعه دهندگان میتوانند از آنجا تصاویر (images) را ذخیره و دانلود کنند. به تعبیری دیگر Docker registries مانند یک فروشگاه حاوی تصاویر هستند که نوع عمومی آنها Docker Hub و Docker Cloud است. همچنین انواع خصوصی آن نیز وجود دارد؛ رایجترین دستورات برای رجیستری داکر عبارتاند از:
- docker push
- docker pull
- docker run
جمعبندی
کانتینرها بستر مناسبی برای شروع خلق یک برنامه و سپس توسعه آن به وجود آوردهاند. تا قبل از این اگر میخواستید یک WebApplication درست کنید ابتدا باید یک سرور اجاره میکردید که در ابتدا هزینههای زیادی برای دولوپرها به همراه میآورد و همچنین افراد تازهکار و بهاصطلاح Beginner را دلسرد میکرد. اما امروزه به لطف مجازیسازی دیگر نیازی به اجاره یک سرور نیست و برای شروع میتوان با ساخت یک کانتینر محلی حتی روی لپتاپ نیز شروع کرد.
همچنین برخی سرویسهای ابری تا یک سال برای افرادی که ثبتنام میکنند خدمات رایگان ارائه میدهند. در این مقاله سعی شد تا به بررسی دقیق و کامل داکر (docker) که نوعی پلتفرم باز برای کنترل و مدیریت کانتینرها است، بپردازیم امید است تا توانسته باشیم این مبحث را بهخوبی برای کاربران عزیز شرح دهیم و در حل سوالات شما کمکی کرده باشیم.
دیدگاهتان را بنویسید