⚠️ خواندن و درک بهتر این بخش به دانش پایه ای در لینوکس نیاز دارد. در صورتی که این دانش را ندارید می توانید از این بخش عبور کنید.
داکر با زبان برنامه نویسی Go نوشته شده است و از تعداد زیادی از قابلیت های مفید در کرنل لینوکس بهره میبرد تا عملکردهای زیر را ارائه بدهد.
Namespaces
داکر از تکنولوژی به نام Namespaces برای جدا کردن کانتینرها استفاده می کند. وقتی که یک کانتینر را اجرا می کنید، داکر تعدادی Namespace را برای آن کانتینر قرار می دهد. این Namespace ها یک لایه ای از جداسازی را محیا می کنند تا هر وجه از یک کانتینر در namespace مجزایی اجرا شود و دسترسی هایش به همان namespace خاص محدود می دهد.
موتور داکر از namespace های زیر در لینوکس استفاده می کند:
- Pid: جداسازی پردازه ها یا فرایندها (PID مخفف Process ID است)
- Net: مدیریت رابطه ای شبکه (NET کوتاه شده ی Networking است)
- Ipc: مدیریت دسترسی به منابع IPC (IPC مخفف شده ی Inter Process Communication است)
- Mnt: مدیریت نقاط نصب فایل سیستم (MNT کوتاه شده ی Mount است)
- Utc: جداسازی شناسه های نسخه و هسته یا همان کرنل (UTC مخفف عبارت Unix Timesharing System است)
Control group
یکی دیگر از تکنولوژی هایی که موتور داکر بر آن تکیه کرده است Control groups یا همان cgroups است. یک cgroups برنامه را به دسته ای از منابع مشخص محدود می کند. Control groups به موتور داکر اجازه می دهد تا منابع سخت افزاری موجود را بین کانتینرها به اشتراک بگذارد و به صورت اختیاری محدودیت هایی را روی کانتینرها اعمال کند. برای مثال، شما می توانید حافظه ی قابل استفاده برای یک کانتینر خاص را محدود کنید.
فایل سیستم های Union
فایل سیستم های Union یا همان UnionFS، فایل سیستم هایی هستند که با ایجاد لایه هایی کار می کنند که آنها را بسیار سبک و سریع می کند. موتور داکر از UnionFS برای آماده سازی بلوک هایی برای ساخت کانتینرها استفاده می کند. موتور داکر می تواند از چندین نوع UnionFS شامل AUFS، btrfs ، vfs و DeviceMapper استفاده کند.
قالب کانتینر Container format
موتور داکر namespaceها، Control groups و UnionFS را با هم ادغام و بسته بندی می کند و نام آن را قالب کانتینر گذاشته است. قالب کانتینر پیش فرض libcontainer است. در آینده ممکن است داکر به واسطه ی ادغام با تکنولوژی هایی از قبیل BSD Jails یا Solaris Zones از فرمت های دیگر کانتینر نیز پشتیبانی کند.