Container چیست؟
Containerها روشی برای جاسازی یک برنامهی کاربردی در یک جعبهی ایزولهشدهی مختص به آن برنامه میباشند. برنامهی کاربردی که در Container خود قرار گرفته است و از دیگر برنامههای کاربردی و Processهایی که در خارج از جعبهاش قرار دارند، هیچ اطلاعی ندارد. هر آنچه که این برنامهی کاربردی برای اجرای موفقیتآمیز به آن احتیاج دارد نیز درون این Container قرار دارد. این جعبه به هر مکانی که منتقل شود برای برنامهی کاربردی تفاوتی ندارد و همواره بهخوبی اجرا خواهد شد چرا که همراه با تمام چیزهایی که برای اجراشدن نیاز دارد، درون Container قرار دارد.
به منظور روشن شدن مطلب، آشپزخانهای را در نظر بگیرید که همهی اسباب و اثاثیه، ظروف و شویندهها و حوله را درون آن قرار دادهایم. این آشپزخانه Container ما میباشد.
حال میتوانیم این Container را برداشته و آن را در هر آپارتمانی که بخواهیم قرار دهیم و آشپزخانه هنوز همان آشپزخانهی پیشین خواهد بود و تغییری نمیکند. فقط باید آب و برق به آن وصل کنیم، سپس برای آشپزی آماده است.
Containerها از جنبههای بسیاری به این آشپزخانه شباهت دارند. ممکن است اتاقهای بسیاری وجود داشته باشد و همچنین تعداد زیادی اتاقِ مشابه. اما نکتهی حائز اهمیت این است که Containerها تمام مایحتاج خود را دارا میباشند.
اصول اساسی در Containerها
Containerها یک محیط Runtime ایزولهشده، Resource-Control شده و قابل حمل هستند که یا بر روی یک Host و یا یک ماشین مجازی، اجرا میگردند. یک برنامهی کاربردی یا یک Process که درون یک Container اجرا میشود، همراه با تمامی نیازمندیها و فایلهای پیکربندیاش درون Container قرار گرفته، با این پیش فرض که هیچ فرآیند دیگری خارج از Container در جریان نیست.
میزبانِ آن Container یکسری منابع برای Container تدارک میبیند و Container فقط از همان منابع استفاده مینماید. تا آنجایی که آن Container مطلع است، بهجز منابعی که در اختیارش قرار گرفتهاند منابعی دیگری وجود ندارند و از همینرو نمیتواند به منابعی که به یکی از Containerهای مجاور داده شدهاند، دسترسی پیدا کند.
مفاهیم کلیدی ذیل در شروع ساخت و کار با Windows Containerها سودمند میباشند:
- Container Host: یک سیستم کامپیوتری مجازی یا فیزیکی که با ویژگی Windows Container پیکربندی شده است. Container Host یک یا چند Windows Container را اجرا خواهد نمود.
- Container Image: با صورت گرفتن اصلاحاتی در فایل سیستم Containerها و یا Registry مانند نصب نرمافزار آن اصلاحات در یک محیط Capture ،Sandbox میشوند. در بسیاری از موارد ممکن است کاربر بخواهد این حالت را Capture نماید تا بتوان Containerهای تازهای ایجاد کرد، که این اصلاحات در آنها نیز حفظ شود. در واقع تعریف Image این است که هنگامیکه یک Container متوقف شود، یا میتوان آن Sandbox را Discard کرد، یا آن را به یک Container Image تازه تبدیل نمود. برای مثال، فرض میکنیم یک Container از Image مختص به Windows Server Core OS را پیادهسازی نمودهایم. سپس میتوان MySQL را بر روی این Container نصب نمود و Image تازهای از این Container ساخت که میتواند بهعنوان نسخهی قابلپیادهسازی این Container عمل کند. این Image فقط محتوی تغییرات ایجادشده خواهد بود (نصب MySQL)، با اینحال بهعنوان لایهای بر روی Container OS Image عمل خواهد کرد.
- Sandbox: هنگامیکه یک Container شروع بهکار میکند، تمام تغییرات همچون اصلاحات فایل سیستم، اصلاحات Registry و نصب نرمافزارها در این لایهی Capture ،Sandbox خواهند شد.
- Container OS Image: Containerها از Imageها پیادهسازی میشوند. Container OS Image اولین لایه از تعداد زیاد لایههای احتمالی است که یک Container را میسازند. این Image محیط سیستم عامل را فراهم میآورد. یک Container OS Image تغییرناپذیر است؛ یعنی نمیتوان در آن اصلاحاتی انجام داد.
- Repository Container: هربار که یک Container Image ساخته میشود، خودِ Image و نیازمندیهای آن در یک Local Repository (مخزن محلی) ذخیره میگردند. میتوان بارها از این Imageها بر روی Container Host استفاده نمود. Container Imageها را میتوان بر روی یکRepository عمومی یا خصوصی (مانند DockerHub) نیز ذخیره کرد تا بتوان از آنها بر روی تعداد زیادی Container Host متفاوت استفاده نمود.
برای افرادی که با ماشینهای مجازی آشنایی داشته باشند، Containerها نیز شدیداً با ماشین مجازی شباهت دارد. یک Container بر روی یک سیستمعامل اجرا میشود، یک فایل سیستم دارد و میتوان از طریق شبکه درست همانند یک سیستم کامپیوتری فیزیکی یا مجازی به آن دسترسی پیدا نمود. با اینحال تکنولوژی و مفاهیم پشت Containerها در قیاس با ماشینهای مجازی، بسیار متفاوت است.
انواع Containerهای ویندوز
Windows Containerها شامل دو گونهی متفاوت Container یا Runtime میباشند:
- Containerهای Windows Server: از طریق Process و تکنولوژی ایزولهسازی Namespace، ایزولهسازی را برای برنامهی کاربردی فراهم میآورد. یک Container مختص به Windows Server با Container Host و تمام Containerهای دیگری که بر روی هاست در حال اجرا هستند، یک Kernel مشترک دارند. این Containerها یک Hostile Security Boundary ارائه نمیدهند و نباید از آنها برای ایزولهسازی کدهای نامطمئن استفاده نمود. بهدلیل فضای Kernel مشترک، این Containerها به نسخهی Kernel و پیکربندی یکسان احتیاج دارند.
- ایزولهسازی Hyper-V: با اجرای هر کانتینر در یک ماشین مجازی که بهخوبی بهینهسازی شده است، ایزولهسازی ارائهشده توسط Containerهای Windows Server را افزایش میدهد. در این پیکربندی، Kernel مختص به Container Host با دیگر Containerهای همان هاست مشترک نیست. این Containerها برای هاستینگ Hostile Multi-tenant طراحی شده و همان ضمانتهای امنیتی ماشینهای مجازی را دارا هستند. از آنجایی که این Containerها Kernel جداگانهای از هاست و دیگر Containerهای روی هاست دارند، میتوانند تمام Kernelها را با نسخهها و پیکربندیهای متفاوت (با نسخههای تحت پشتیبانی) اجرا نمایند؛ برای مثال تمام Windows Containerهای روی Windows 10 از ایزولهسازی Hyper-V برای بهکارگیری پیکربندی و نسخهی Kernel مختص به Windows Server استفاده مینمایند.
اجرای یک Container بر روی Windows، با یا بدون ایزولهسازی Hyper-V یک تصمیم Runtime است. ممکن است کاربر در ابتدا Container را با ایزولهسازی Hyper-V ایجاد نموده و بعداً در هنگام اجرا تصمیم بگیرد که بهجای ایزولهسازی Hyper-V، آن را بهشکل یک Container مختص به Windows Server اجرا نماید.
ــــــــــــــــــــــــــــــــــــ
مفهوم Container و کاربرد Docker در ویندوز – قسمت اول
مفهوم Container و کاربرد Docker در ویندوز – قسمت دوم (پایانی)