همانطور که در مقاله “ Docker چیست؟ ” بیان شده داکر یک پلتفرم open source است که بر مبنای سیستم عامل لینوکس راهاندازی شده است. میتوان گفت ابزاری است که فرآیند ایجاد، پیاده سازی و اجرای برنامهها را با استفاده از Containerها بسیار ساده میکند. در واقع با استفاده از هسته یا همان کرنل لینوکس میتوان یک سیستم عامل دیگر را در قالب یک Container هندل کرد.
در این مقاله ما معماری Docker و اجزای مرتبط با آن را و همچنین نحوه عملکرد هر یک از اجزا را بررسی خواهیم کرد.
اجزا داکر چیست؟
همانطور که در تصویر بالا مشاهده میکنید، داکر شامل اجزایی میباشد که در ادامه به تعریف و بیان وظیفه هرکدام میپردازیم. اما موارد زیر شامل اصلی ترین اجزا Docker میباشند.
Docker Daemon (dockerd)
Docker Client
Docker Images
Docker Registries
Docker Container
Docker Image چیست؟
Image پایهای ترین بخش Docker است. برای اجرای Docker Container به یک Image نیاز داریم که شامل کتابخانهی سیستمعامل، ملزومات و ابزارهای اجرای هر برنامه است. برای مثال اگر بخواهیم Nginx Web Server را بهعنوان Ubuntu Container اجرا کنیم، باید یک Docker Image با Nginx Binary و تمام کتابخانههای لازم سیستمعامل برای اجرای Nginx داشته باشیم. برای ساختن Imageها نیز میتوان از Dockerfile استفاده کرد که یک فایل متنی شامل دستورات اجرایی در هر خط است.
برای دسترسی به Image چند راه وجود دارد:
۱. به صورت آماده در DockerHub ( در ادامه به تعریف آن میپردازیم )
۲. استفاده از Image های ذخیره شده در حافظه دستگاه.
۳.به صورت فایل قابل Build که با دستورات خاصی به شما این قابلیت را میدهد تا Image شخصی بسازید.
DockerHub چیست؟
Docker Hub یک سرویس اشتراکگذاری Image میباشد که توسط شرکت Docker تهیه شده است و به راحتی میتوان Image مورد نظر را دریافت کرد. داکر هاب شامل مخزنی از image های آماده برای Docker میباشد. اگر قصد داشته باشید از یک Docker Image فقط pull بگیرید یا لیست Imageهای عمومی موجود را جست و جو کنید نیازی به داشتن اکانت در Docker Hub ندارید اما اگر بخواهید push انجام دهید یا نظر بدهید یا like بزنید حتماً باید در Docker Hub عضو باشید. همچنین شما میتوانید هر Docker Image را به راحتی با دیگران به اشتراک بگذارید که لازمه آن عضویت در DockerHub است.
بعد از اینکه Image مورد نظر خود را Pull کردید میتوانید آن را ذخیره کنید تا بعدا نیز از آن استفاده کنید. همچنین میتوانید یک Docker Image را خودتان ایجاد کنید که برای این کار نیاز به یک DockerFile است.
در واقع میتوان Image را به همان گونه که هست از Docker Hub استخراج و استفاده کرد یا با اعمال تغییراتی روی آن image جدیدی ایجاد کرد.
Container داکر چیست؟
Docker Container از Docker Image ساخته میشود. اگر فرض کنید Image یک دستور آشپزی باشد، container یک ظرف آماده شده از آن دستور آشپزی است.
Container نرم افزار را از فضای اطراف آن ایزوله میکند. آنها بدون در نظر گرفتن سیستم عامل میتوانند بر روی هر بستری راه اندازی شوند و شما حساس به سیستم عامل و بستر نیستید و این خصوصیت این امکان را فراهم میکند که یک container را همواره بتوانید بدون تغییر به بستر یا سیستم دیگری منتقل کنید. عدم نیاز به سیستم عامل و بستر خاص موجب کارآیی بیشتر کانتینرهای داکر میشود و کارآمدی این سیستم را چندین برابر میکند.
کانتینرهای داکر که برروی موتور داکر اجرا می شوند خصوصیات زیر را دارا هستند:
- استاندارد: داکر یک صنعت استاندارد برای ایجاد container میباشد، پس به صورت پرتابل قابل حمل و انتقال به هر کجا میباشند.
- سبک و ساده: کانتینرهای داکر از کرنل سیستم عامل به صورت اشتراکی استفاده میکند پس نیازی به سیستم عامل برای هر اپلیکیشن وجود ندارد پس کارآمدی آنها بسیار بالا و هزینه سرور و نگهداری آن ها کاهش مییابد.
- ایمن: اپلیکیشنها بسیار ایمن تر در داخل کانتینرها هستند و داکر قوی ترین حالت ایزوله سازی را در این صنعت به کار گرفته است.
Client داکر چیست؟
کاربران با استفاده از Client میتوانند با داکر ارتباط برقرار کرده و از آن استفاده کنند. همچنین Client دستورات را با استفاده از Docker API به docker ارسال میکند.
Docker Engine یا Docker Host چیست؟
موتور Docker هسته اصلی سیستم داکر میباشد. برنامهای بر پایه مدل کلاینت سرور (Client-Server) است که بر روی ماشین میزبان نصب میشود.
Docker Daemon چیست؟
سرویسی است که همواره در پشت صحنه در حال اجرا میباشد. توانایی ایجاد و مدیریت داکر، کانتینرها، شبکهها و فضای حافظه را دارد و همچنین به درخواستهای API پاسخ میدهد. در واقع دارای معماری سرویس گیرنده-سرویس گیرنده است و مسئول تمام اقدامات مربوط به container است.
Registry داکر چیست؟
Image های داکر در مکانهایی به نام رجیستری ذخیره میشوند که به آن Docker Hub میگویند. یک رجیستری عمومی است که شما میتوانید Image های خود را در آن ذخیره کنید. داکر به صورت پیشفرض Image را از Docker Hub خوانده و در آن ذخیره میکند. همچنین شما میتوانید یک رجیستری خصوصی برای خود ساخته و Image های خود را در آن ذخیره کنید.
Docker File چیست؟
داکر مفهومی از Dockerfile دارد که برای ساختن Image استفاده میشود. Dockerfile اساساً یک فایل متنی است که شامل دستورالعمل هایی در مورد نحوه ساختن یک Image است.
به عنوان مثال، اگر میخواهید یک وب سرور Nginx را به عنوان یک container اوبونتو اجرا کنید، باید یک Docker Image با فایل باینری Nginx و تمام کتابخانههای سیستم عامل مورد نیاز برای اجرای Nginx ایجاد کنید.
هر Image از یک Image پایه ایجاد میشود. به عنوان مثال، میتوانید از Image اصلی اوبونتو استفاده کنید و Image دیگری با برنامه Nginx در آن ایجاد کنید. یک Image پایه میتواند یک parent image یا یک Image ساخته شده از parent image باشد. مقاله Docker را مطالعه کنید تا در مورد آن بیشتر بدانید.
Docker Imageها ساختاری لایهای دارند و هر دستور Dockerfile یک لایه به Image اضافه میکند. بالاترین لایهی قابل نوشتن Image یک Container است. هر Image از یک Base Image ایجاد میشود و میتواند مجدا بهوسیلهی Dockerfile یک لایهی جدید به خود بگیرد و به یک Image دیگر تبدیل شود. برای مثال، میتوان از یک Base Image دارای Ubuntu استفاده کرد و یک Image دیگر با Nginx Application در آن ایجاد کرد.
docker-containerd چیست؟
containerd یکی دیگر از سرویسهای Docker Daemon است که مسئول بارگیری Image ها و اجرای آنها به عنوان یک container است.
Data Volume
تمام دادههای تولید شده توسط داکر و دادههای مورد استفاده کانتینرها در حافظهها ذخیره میشوند. این حافظهها توسط Docker API و CLI مدیریت میشوند. این حافظهها هم با کانتینرهای ویندوزی و هم با کانتینرهای لینوکسی سازگار هستند. بجای این که دادهها را در لایه نوشتنی کانتینرها ذخیره کنیم بهتر است تا آنها را در حافظهها ذخیره کنیم. عمر دادههای ذخیره شده در حافظه بیشتر از عمر کانتینرها میباشد. ذخیره سازی روی حافظه حجم و سایز کانتینرها را بیشتر نمیکند.
- Docker API: این API به وسیله اپلیکیشن به منظور ارتباط با Docker Daemon استفاده میشود.
- Docker CLI: رابط کاربری به منظور ارتباط با Docker Daemon است. که با دستور docker فراخوانی میشود.
Networks داکر
شبکهها گذرگاهی برای ارتباط کانتینرهای جدا از هم میباشد.
- None: این درایور به کلی تمام شبکهها را قطع میکند.
- Bridge: درایور پیشفرض کانتینرهای داکر میباشد و برای مواقعی استفاده میشود که برنامه شما بر روی کانتینرهای مستقل اجرا میشود.
- Host: این درایور جداسازی میان کانتینرها و میزبان را از بین میبرد. به عبارت دیگر زمانی که شما نمیخواهید جداسازی میان کانتینرها و میزبان وجود داشته باشد از این درایور استفاده میکنید.
Directory Mounts
روش دیگر اینگونه است که دایرکتوریهای محلی میزبان را در یک کانتینر Mount کنید.
موارد استفاده از داکر
حال تا اینجا با مفهوم داکر آشنا شدیم. این سوال پیش میآید که در چه مواقعی پیشنهاد میشود از داکر استفاده کنیم؟
1. استفاده برنامه ساده
اگر برنامه شما ساده و یا استاندارد است، میتوانید بسیاری از برنامههای مورد نیاز خود را در قالب تصاویر داکر از Docker Hub به راحتی استخراج و از آن استفاده کنید.
2. ایزوله کردن برنامه
اگر میخواهید چندین برنامه را بر روی یک سرور اجرا کنید با استفاده از داکر میتوانید کامپوننتهای هر برنامه را در کانتینرهای جداگانه نگهداری کنید و از مشکلات مدیریت وابستگی دادهها جلوگیری کنید.
3. تیمهای توسعه دهنده
اگر شما توسعه دهندگانی دارید که با تنظیمات مختلفی کار میکنند، با استفاده از داکر میتوانید محیطهای پیاده سازی محلی مشابه با محیط محصول فراهم کنید تا هر یک بر روی آن کار کنند.
جهت مطالعه دیگر مقالات مرتبط صفحه آموزشگاه را مشاهده نمائید.
منبع: www.devopscube.com