اگر به دنیای کانتینرها علاقه مند باشید، احتمالاً با دو اصطلاح مهم LXC و LXD رو به رو شده اید. در نگاه اول، این دو مخفف می توانند کمی گیج کننده به نظر برسند. نام آن ها شباهت زیادی به یکدیگر دارد، هر دو به فناوری های مرتبط با کانتینرها اشاره می کنند و در توسعه هر دو نیز یک شرکت نقش مهمی داشته است. همچنین، این دو فناوری از نظر فنی ارتباط نزدیکی با یکدیگر دارند.
به همین دلیل، در ابتدا ممکن است تشخیص تفاوت میان آن ها دشوار باشد. با این حال، با توضیحی کوتاه درباره ساختار و نقش هر یک، درک این موضوع چندان پیچیده نخواهد بود. بدین صورت، مدیران سیستم و توسعه دهندگانی که قصد استفاده از کانتینرها را دارند می توانند دید واضح تری نسبت به این دو فناوری پیدا کنند.
در این مقاله توضیح داده می شود که LXC وLXD چه هستند و چه تفاوت هایی با یکدیگر دارند. همچنین بررسی می شود که چرا مدیران سیستم یا توسعه دهندگان ممکن است از این فناوری ها استفاده کنند و در مقابل، چرا برخی ترجیح می دهند همچنان از ابزارهایی مانند Docker یا CoreOS بهره ببرند. این مقاله دلایل چنین انتخاب هایی را نیز توضیح می دهد.

تصویر(1)
LXC
برای درک LXD ابتدا باید با مفهوم LXC آشنا شوید. LXC مخفف Linux Containers است. این فناوری راهکاری برای مجازی سازی در سطح سیستم عامل درون کرنل لینوکس فراهم می کند .
این روش با هایپروایزرهای سنتی مانند VMware، KVM و Microsoft Hyper-V متفاوت است. هایپروایزرها معمولاً یک ماشین مجازی کامل همراه با سیستم عاملی مستقل اجرا می کنند، در حالی که LXC اجازه می دهد برنامه ها در یک محیط ایزوله و سبک اجرا شوند. البته در صورت نیاز، می توان یک سیستم عامل کامل را نیز در یک کانتینر LXC راه اندازی کرد، اما هدف اصلی، ایجاد محیطی سبک و ایزوله برای اجرای برنامه ها است.
مزیت های اصلی LXC عبارت اند از:
- ابزارهای userspace در سیستم عامل میزبان امکان مدیریت آسان محیط های مجازی را فراهم می کنند.
- مصرف منابع و سربار آن نسبت به هایپروایزرهای سنتی بسیار کمتر است.
- کانتینرها امکان انتقال ساده برنامه ها بین سیستم های مختلف را فراهم می کنند؛ به طوری که توسعه دهندگان می توانند برنامه ها را داخل یک کانتینر بسته بندی و توزیع نمایند.
اگر این توضیحات برای شما شبیه کانتینرهای Docker یا CoreOS به نظر می رسد، دلیل مشخصی وجود دارد. در گذشته، Docker و فناوری های مرتبط با CoreOS بر پایه LXC ساخته شده بودند. با گذشت زمان، مسیر توسعه این پروژه ها تغییر کرد. Docker اکنون فناوری مستقل خود را دارد و دیگر به LXC وابسته نیست. از سوی دیگر، CoreOS نیز سیستم کانتینری اختصاصی خود با نام rkt را توسعه داده است.
با وجود این تغییرات، LXC نقش مهمی در آغاز انقلاب کانتینرها ایفا کرد. بسیاری از مفاهیم و اصول پایه ای که امروزه در فناوری های کانتینری استفاده می شوند، ریشه در ایده ها و معماری LXC دارند؛ حتی اگر کد اصلی آن در همه این فناوری ها استفاده نشود.
LXD
ساده ترین راه برای درک LXD این است که آن را بعنوان نسخه پیشرفته و توسعه یافته LXC در نظر بگیرید. با گذشت زمان، اهمیت LXC در پروژه هایی مانند Docker و CoreOS کاهش یافت و LXD به اصلی ترین دستاورد و شناخته شده ترین محصول این فناوری تبدیل شد.

تصویر(2)
از نظر فنی، LXD یک REST API است که به کتابخانه نرم افزاری LXC (liblxc) متصل می شود. این سیستم که با زبان برنامه نویسی Go نوشته شده، یک دیمون (Daemon) ایجاد می کند که می تواند به دو روش در دسترس باشد:
- به صورت محلی از طریق Unix socket
- از طریق شبکه با استفاده از HTTPS
مزایای اصلی LXD عبارتند از:
یک میزبان می تواند چندین کانتینر LXC را تنها با یک دیمون اجرا کند. این کار مدیریت را ساده تر کرده و مصرف منابع را کاهش می دهد، در حالی که در LXC خالص برای هر کانتینر نیاز به یک پروسه مجزا وجود دارد. دیمون LXD می تواند از ویژگی های امنیتی سطح میزبان بهره ببرد و امنیت کانتینرها را افزایش دهد. امنیت کانتینرها در LXC ساده، چالش برانگیز است.
مدیریت شبکه و ذخیره سازی داده ها بر عهده دیمون LXD می باشد و کاربران می توانند از طریق CLI، این منابع را به راحتی کنترل نمایند. این قابلیت فرآیند اشتراک گذاری منابع با کانتینرها را ساده می کند.
LXD امکانات پیشرفته ای ارائه می دهد که در LXC وجود ندارند؛ از جمله آنها میتوان به انتقال زنده کانتینرها (live migration) و ایجاد snapshot از کانتینر در حال اجرا اشاره نمود. شرکت Canonical، شرکتی که سیستم عامل Ubuntu GNU/Linux را تأمین مالی می کند (که از حامیان اصلی LXC نیز هست)، LXD را در اواخر سال ۲۰۱۴ راه اندازی کرد.
LXC و LXD
اگر شما یک توسعه دهنده برنامه یا مدیر سرور هستید، احتمالاً می خواهید بدانید که این فناوری ها چه تأثیری بر کار شما دارند و کدام راهکار کانتینری برای نیازهای شما مناسب تر است. پاسخ ساده نیست. ابتدا باید بدانید که انتخاب بین LXC و LXD به معنای رقابت بین آن ها نیست، زیرا این دو فناوری مستقل از یکدیگر نمی باشند؛ آن ها شاخه (fork) و کپی (clone) یکدیگر نیز نیستند.
در حقیقت، LXD بر پایه LXC ساخته شده است. هر دو فناوری توسط همان گروه توسعه دهندگان اصلی و به طور همزمان در حال پیشرفت هستند. بنابراین، وقتی از LXD استفاده می کنید، در واقع همیشه از LXC نیز بهره می برید. البته امکان استفاده از LXC بدون LXD وجود دارد، اما احتمالاً این روش برای شما جذاب نخواهد بود. LXC به تنهایی صرفا مجموعه ای از امکانات پایه ای را ارائه میدهد، در حالی که LXD با قابلیت های پیشرفته و ابزارهای مدیریتی خود، استفاده در محیط های عملیاتی و واقعی را ساده و مؤثر می کند.
LXC + LXD در مقایسه با Docker و CoreOS

تصویر(3)
ممکن است برای شما این سوال پیش آمده باشد که آیا ترکیب LXC + LXD بهتر از Docker یا CoreOS است یا خیر. پاسخ به این موضوع بستگی به نیازهای شما دارد.
ابتدا توجه کنید که شرکت Canonical قصد ندارد LXC + LXD را جایگزین Docker کند. همان طور که استفان گرابر، یکی از توسعه دهندگان LXD می نویسد، LXD برای میزبانی محیط های مجازی طراحی شده است که «معمولاً طولانی مدت اجرا می شوند و بر اساس یک نسخه پایه و سالم از سیستم عامل ساخته شده اند»، در حالی که «Docker روی کانتینرهای کوتاه مدت، بدون حالت (stateless) و مینیمال تمرکز دارد که معمولاً به روزرسانی یا پیکربندی مجدد نمی شوند؛ اما در صورت نیاز به طور کامل جایگزین می گردند.»
این تفاوت ها به شما کمک می کنند قبل از انتخاب بین LXD وDocker/CoreOS، نوع پیاده سازی مناسب خود را مشخص نمایید .اگر نیاز دارید تعداد زیادی کانتینر سبک و سریع از ایمیج عمومی برنامه ها اجرا کنید،Docker یا CoreOS گزینه بهتری هستند .اگر قصد دارید یک سیستم عامل کامل مجازی سازی کنید یا برنامه ای پایدار و طولانی مدت را اجرا نمایید، LXD احتمالاً مناسب تر است. عامل مهم دیگر محیط میزبان است:

تصویر(4)
LXD تنها از لینوکس پشتیبانی می کند و مستندات آن عمدتاً برای Ubuntu تهیه شده است. بنابراین اگر سرورهای شما از توزیع دیگری از لینوکس یا از ویندوز استفاده می کنند، LXD عملکرد مناسبی نخواهد داشت.
در مقابل، Docker و CoreOS قابلیت انتقال بالایی دارند و تقریباً روی هر سیستم عامل مبتنی بر لینوکس اجرا می شوند. همچنین Docker اکنون به طور بومی روی ویندوز و macOS نیز قابل اجرا است. البته تجربه واقعی شما ممکن است متفاوت باشد، اما این نکات پایه و اساسی هستند. با درک این تفاوت ها، می توانید بهترین راهکار کانتینری را برای نیازهای خود انتخاب کنید و با اطمینان وارد دنیای کانتینرها شوید.