Container در کامپیوتر چیست؟ (قسمت دوم)
فهرست مطالب
Toggleدر آموزش قبلی شما را با Container ها و کاربردهای آن آشنا کردیم. همینطور ذکر کردیم که دو مدل از معروفترین کانتینر ها عبارتند از Docker و Kubernetes. در این آموزش سعی میکنیم که شما را با این دو مدل ابزار مدیریت کانتینر بیشتر آشنا کنیم.
Docker چیست؟
در آموزش قبل عنوان کردیم که شاید نرم افزار یا قطعه کدی را در یک کامپیوتر بدون هیچ مشکلی اجرا کنید ولی اگر همین قطعه کد یا نرمافزار را به کامپیوتر دیگر انتقال دهید باعث بروز باگ و مشکلاتی در کد میشود.
کانتینری که به وسیله Docker اجرا میشود همانند یک کامپیوتر در داخل کامپیوتر شما است. بنابراین اگر این کانتینر را برای شخص دیگری ارسال کنید، این قطعه کد یا نرم افزار بدون هیچ گونه باگی اجرا خواهد شد.
کانتینر های داکر روی همه محیط ها اجرا میشوند. اما توجه کنید که container های سیستم عاملها مختص به همان سیستم عامل هستند. یعنی کانتینر لینوکس فقط روی لینوکس و کانتینر ویندوز روی ویندوز اجرا میشود.
معماری داکر
معماری داکر از اجزای مختلفی تشکیل میشود که در ادامه به تشریح این اجزا میپردازیم.
Docker Engine
این بخش به شما امکان توسعه، پیکربندی و اجرای اپلیکیشنها را با استفاده از اجزای زیر میدهد:
- Docker Daemon: پردازشی در پس زمینه سیستم عامل که ایمیجها، container ها ، شبکه و فضای ذخیره سازی را مدیریت میکند. Docker Daemon به صورت مداوم به درخواستهای API گوش میدهد و آنها را پردازش میکند. برای اجرای این daemon باید از دستور dockered استفاده کنید.
- Docker Engine REST API: این API به وسیله اپلیکیشن به منظور ارتباط با Docker Daemon استفاده میشود.
- Docker CLI: رابط کاربری به منظور ارتباط با Docker Daemon است. که با دستور docker فراخوانی میشود.
Docker Client
کاربران داکر میتوانند با استفاده از کلاینت با Docker در ارتباط باشند.
Docker Registries
مسیری است که ایمیجهای داکر در آنجا ذخیره میشوند. Docker Hub مسیر پیشفرض به منظور ذخیره سازی ایمیجهای داکر است. در حقیقت مسیر ذخیره سازی رجیستریهای Public است. یعنی میتواند انواع ایمیجهای کانتینر ها را از این مسیر که در اینترنت قرار دارد، دانلود کنید. شما همچنین میتوانید رجیستریهای Private نیز ایجاد کنید.
آبجکتهای Docker
هنگامی که با داکر کار میکنیم، از ایمیج، container، فضای ذخیره سازی و شبکه استفاده میکنیم.
ایمیج: ایمیجها تمپلیتهایی هستند که برای ساختن کانتینر ها استفاده میشوند. ایمیجها را میتوان از Docker Hub دریافت کرد. یا آنها را تغییر داد و یا حتی یک ایمیج داکر ساخت.
کانتینر: وقتی که یک ایمیج داکر را اجرا میکنید، یک کانتینر داکر ایجاد میشود. کل اپلیکیشن و محیط آن، در داخل این کانتینر اجرا میشود. شما میتوانید از Docker API یا CLI به منظور شروع، توقف یا حذف کانتینر داکر استفاده کنید.
فضای ذخیره سازی: برای این که بتوان در لایه قابل نوشتن کانتینر داده ذخیره کنیم، نیازمند درایور ذخیرهسازی هستیم. برای ذخیرهسازی دائم داده، داکر ۴ گزینه را ارئه میدهد.
- Data Volumes: Data Volume ها قابلیت ایجاد ذخیره سازی دائم داده، همچنین تغییر نام درایو، لیست کردن درایو ها و یا حتی لیست کردن کانتینری که با این درایو کار میکند را دارد.
- Data Volume Container: این روش، جایگزین روشی است که در آن یک کانتینر مشخص Volume را میزبانی میکند و به منظور Mount کردن آن volume به بقیه کانتینر ها کاربرد دارد. در نتیجه این فضای ذخیره سازی بین چندین کانتینر به اشتراک گذاشته میشود.
- Directory Mounts: روش دیگر این گونه است که دایرکتوریهای محلی میزبان را در یک کانتینر Mount کنید.
- Storage Plugin: این روش توانایی اتصال به فضاهای ذخیره سازی خارجی را فراهم میآورد. این پلاگینها فضای ذخیره سازی را به منابع خارجی مثل Storage Array ها نگاشت میکند.
Kubernetes چیست؟
نگهداری اپلیکیشنهای کانتینر شده میتواند بسیار پیچیده باشد. چون گاها تعداد زیادی کانتینر در ماشینها وجود خواهند داشت. Kubernetes روشی اتوماتیک برای زمانبندی و پیاده سازی این کانتینر ها را فراهم میآورد. همچنین آنها را گسترش میدهد و چرخه عمر آنها را نیز مدیریت میکند.
به عبارت دیگر شما میتوانید گروههایی از هاستها که کانتینر های لینوکس را اجرا میکنند را کلاستر بندی کنید. Kubernetes به شما این امکان را میدهد که این کلاستر ها را به سادگی مدیریت نمایید.
قابلیتهای Kubernetes
کوبرنیتس به عنوان پلتفرم اتوماتیک سازی (Orchestration) استاندارد برای کانتینر ها تبدیل شده است. اغلب ارائه دهندگان سرویسهای ابری بزرگ امروزه از این قابلیت پشتیبانی میکنند. در ادامه به برخی از ویژگیهای Kubernetes اشاره میکنیم:
- پیاده سازی: پیاده سازی کانتینر ها در هاستهای مشخص
- فضای ذخیره سازی: قابلیت Mount کردن فضای ذخیره سازی محلی یا ابری برای کانتینر ها
- مدیریت سلامت کانتینر ها: هنگامی که کانتینری از کار میافتد، Kubernetes میتواند آن را به صورت اتوماتیک ریست کند و یا تغییر دهد.
- مدیریت پیکربندیها: قابلیت تغییر در پیکربندی کانتینر ها (توقف، ادامه و یا Rollback آنها)
معماری کوبرنیتس
Kubernetes از اجزای مختلفی تشکیل شده است. این اجزا از طریق API Server با هم در تماس قرار میگیرند. هر کدام از این اجزا وظایف خود را انجام میدهند و سپس اطلاعاتشان را به نمایش میگذارند که ما میتوانیم از آنها به منظور مانیتور کردن استفاده کنیم. این اجزا را میتوان به سه بخش تقسیم کرد:
- Control Plane یا همان نود اصلی
- Nodeها که در آن Pod ها زمانبندی میشوند.
- Podها که کانتینر ها را نگهداری میکنند.
Control Plane (نود اصلی): این نود به عنوان Orchestrator است. این نود شامل Etcd به منظور ذخیره سازی است. API Server به منظور ارتباط با اجزا میباشد. و Scheduler برای تصمیم گیری بابت این که کدام Pod ها باید اجرا شوند. در نهایت Controller Manger به منظور چک کردن وضعیت کنونی کانتینر ها در مقایسه با وضعیت مورد نظر است.
Node ها: نود ها وظیفه محاسبات در کلاستر Kubernetes را بر عهده دارند. در حقیقت در اینجا کانتینر ها پیاده سازی میشوند. نود ها ساختار فیزیکی هستند که اپلیکیشن شما روی آن اجرا میشود.
Pod ها: Pod ها پایینترین سطح از منابع در کلاستر Kubernetes هستند. Pod ها شامل یک یا چند container هستند. هنگامی که کلاستر را تعریف میکنید، محدودیتها برای Pod ها اعمال میشوند که تعریف میکنید که چه منابعی، CPU یا مموری را باید اجرا کنند. Scheduler از این اطلاعات استفاده میکند تا تصمیم بگیرد که در چه نود هایی باید این Pod ها را قرار دهد.
نتیجه گیری
در این مقاله به تشریح Kubernetes و Docker پرداختیم. دیدیم که این دو تکنولوژی به گونهای مکمل هم هستند. یعنی ما container ها را با استفاده از Docker ایجاد میکنیم. Kubernetes نیز به عنوان Container Orchestration عمل میکند.