مدیریت و چرخه حیات Containerهای داکر
چرخه حیات Container
برنامهنویسی در دنیای امروز فراتر از کدزنی و حل مسئله است. امروز برنامهنویسان برای رسیدن به درجات شغلی و درآمد بالا باید بتوانند در قالب تیمهای بزرگ در شرکتهای دیجیتال یا استارتاپها فعالیت کنند. تیمهایی که هدف آنها توسعه و بهبود یک یا چند نرمافزار و بهروزرسانی آنها برای رفع اشکال است.در این مقاله قصد داریم به مدیریت چرخه حیات Container و راههای استخراج عملکرد بهینه از آن بپردازیم.
کار روی نرمافزارهای بزرگ بیشتر اوقات نیازمند کار با چند ابزار و در چند محیط کدزنی است. نتورک داکر و در قلب آن کانتینرها این امکان را به تیمهای برنامهنویسی میدهند که روی پروژههای عظیم و چندبخشی بهصورت تیمی کار کنند. در واقع داکر با ارائه یک شبیهسازی از سیستمعامل و ارائه موارد لازم برای اجرا شدن کد به توسعهدهندگان اجازه میدهد کدشان را روی فضای ابری اجرا کنند.
داکر چیست و چه کاربردی دارد؟
داکر یک ابزار کاربردی برای تیمهای برنامهنویسی و شرکتهای دیجیتال است. این ابزار که در سال ۲۰۱۳ بهصورت رسمی و استاندارد عرضه شد توانست یک مشکل مهم را برای برنامهنویسان حل کند. مشکل این بود که برنامهنویس وقتی کد خود را برای یک برنامهنویس دیگر میفرستاد، بهدلایل مختلفی کد روی سیستم مقصد اجرا نمیشد.
عمدهترین علت این مشکل مربوط به نبود Dependency های برنامه در سیستم مقصد میشد. نتورک داکر به تیمهای نرمافزاری کمک میکند بدون محدودیت سیستم کدهای خود را روی فضای ابریاجرا کنند. داکر یک سرویس پلتفرمی (Platform as a service) است و از تعدادی کانتینر تشکیل میشود.
نقش کانتینر در داکر چیست؟
کانتینرها واحدهای استاندارد شده نرمافزاریهستند که به توسعهدهنده برای ایزوله کردن اپلیکیشن از محیط خود کمک میکنند. یعنی کد دیگر روی محیط کامپیوتر شما و بر اساس فایلهای موجود در آن اجرا نمیشود. شما کدتان را روی فضای ابری کانتینرها اجرا میکنید و دیگران هم میتوانند با دسترسی به آن ابر کد را بههمانصورت دیده و در صورت نیاز تغییراتی در آن ایجاد کنند.
در واقع با وجود کانتینرها شما برای اجرای هر کدی فقط نیاز به متن کد، runtime و ابزار و کتابخانههای پیشفرض سیستم خود دارید. کانتینر را به نوعی میتوان جانشین ماشین مجازی (Virtual Machine) دانست. ماشینهای مجازی شبیهسازی یک سیستم کامپیوتری بودند در حالی که کانتینر شبیهسازی سیستمعامل است.
چرخه حیات Container به چه شکل است؟
برنامهنویسی در دنیای امروز خیلی پیچیده و گسترده شده است. در حال حاضر استفاده از داکر و کانتینر برای بسیاری از پروژهها حیاتی بهنظر میرسد. اما باید توجه داشت که کار با کانتینر به این سادگیها نیست. هر کانتینر یک چرخه حیات ۶ مرحلهای دارد که توسعهدهندگان باید از آن آگاه بوده و برای گذر از تکتک مراحل آن برنامه داشتهباشند. در ادامه این ۶ مرحله را همراه بهترین راه برای عبور از هر کدام شرح میدهیم.
چرخه حیات کانتینر با دریافت (Acquire) اطلاعات یا ظرفیتها (capabilities) آغاز میشود. این اتفاق از طریق مفهومی به نام image ممکن میشود. شما ابتدا یک image از اطلاعات یا ظرفیتهای مورد نظر در داکر ایجاد میکنید و دیگر اعضای تیم یا خودتان میتوانید از این image کپی تهیه کرده و انشعابات جدید (بدون دست خوردن به image اصلی بسازید). این قابلیت کانتینر باعث راحتتر شدن ساخت نسخههای مختلف از نرمافزار و آزمایش ویژگیهای جدید روی آن میشود.
مهمترین نکته برای این مرحله پاسخ درست به این سوال است که «از کجا باید شروع کنیم؟». در واقع باید با توجه به هدف نهایی شرکت یا تیم، مناسبترین نقطه شروع را از جهت اطلاعات و ظرفیتها تعیین کنیم.
قدم دوم ساخت (Build) نام دارد
حالا باید با استفاده از اطلاعات بارگذاری شده در مرحله قبلی شروع به ساخت و اجرای اپلیکیشن کنیم. در این مرحله بخشهای اساسی برنامه نهایی ساخته، چیده و خودکارسازی میشوند.
این مرحله شامل رساندن (Deliver) برنامهی ساخته شده به سیستمهای اجرایی (مثل سرور ها) است. تا اینجا ما درون تیم برنامه را ساختهایم و از اجرای سالم و درست آن مطمئن شدهایم. حالا میخواهیم به نسخه نهایی و قابل اجرا روی کامپیوترهای میزبان نهایی برسیم.
مرحله بعدی استقرار (Deploy) کانتینر است
در مرحله استقرار اپلیکیشن برای اجرا ارائه میشود و سپس نیازهای موجود برای تغییر مشخص خواهند شد. توسعهدهندگان اگر بخواهند اپلیکیشنهای مقیاسپذیر تولید کنند نیاز به عملکرد خوبی در این مرحله خواهند داشت.
در اینجا برنامه نهایی به مرحله اجرا (Run) رسیده است و کانتینرهای موجود در داکر با بههمپیوستن شرایط آن را فراهم میکنند. گاهی در این مرحله نیاز است برنامه به سرویسها و برنامههای خارجی متصل شود.
در نهایت به نگهداری (Maintain) از برنامه میرسیم. برنامهها همیشه بعد از اجرا در سیستمهای میزبان به موارد خاصی برمیخورند که باگ نامیده میشود. در اینجا برنامهنویس با بررسی کد خود و ارائه نسخههای جدید از اتفاقافتادن دوباره آن جلوگیری میکند. این مرحله گاهی از خود ساخت برنامه اهمیت بیشتری دارد چون که یک برنامه وقتی پر از اشکال باشد کاربران خود را از دست خواهد داد.
راهکارهای مدیریت اثربخش چرخه حیات Container
اولین و شاید مهمترین قدم، رسیدن به شناخت کامل در مورد چرخه حیات کانتینر است. باید توجه داشت که پروژههای برنامهنویسی همواره متفاوت و پیچیدهاند و برای همین فرمول خاصی در مورد آنها وجود ندارد. یک مدیر پروژه یا سرپرست تیم برنامهنویسی باید بتواند گامهای مختلف چرخه حیات را در مورد پروژه خود شناسایی کرده و متناسب با آنها بهترین روندها، ابزار و اتوماسیونها را انتخاب کند.
کانتینرها از صفر توسط تیم نرمافزاری ساخته نمیشوند. بلکه معمولا image یک کانتینر آماده (مثل کانتینر داکرهاب یا IBM) بهصورت public یا private مورد استفاده قرار میگیرد. ساخت و برنامهنویسی کانتینر از صفر بسیار هزینهبر و وقتگیر خواهد بود اما در عوض تمام ویژگیهای مورد نیاز تیم را بهصورت شخصیسازی شده در خود دارد. استفاده از کانتینر آماده کمهزینهتر و راحتتر است اما چالشهای خاص خود را دارد. برای مثال باید dependency های موجود در آن بهصورت دقیق توسط اعضای تیم شناخته شوند. کانتینر انتخاب شده باید بیشترین تناسب ممکن را با نیازهای پروژه داشته باشد.
یک نفر باید مسئول تست کانتینر آماده باشد. این فرد تمام ویژگیهای کانتینر را مطالعه کرده و آنها را برای اعضای تیم توضیح میدهد. قبل از همهچیز هم کانتینر را برای بررسی صحت و سلامت تست میکند.
راه اندازی یک کانتینر ساده چگونه است؟
برای راهاندازی یک کانتینر ساده لازم است ابتدا آن را با دستور زیر بسازیم:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
این دستور یک لایه قابل Write روی image مورد نظر ایجاد کرده و آن را آماده اجرای دستور میکند. شماره (ID) کانتینر روی STDOUT خروجی گرفته شده است. با استفاده از docker run میتوانید این کانتینر را راهاندازی کرده و با docker start میتوانید در هر بخش از برنامه آن را دوباره شروع کنید. پس از اجرای این دستورات حالت کانتینر روی created قرار میگیرد.
مثال: راهاندازی داکر اوبونتو
$ docker create -t -i fedora bash
۶d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752
$ docker start -a -i 6d8af538ec5
bash-4.2#
این دستورات یک داکر ساده را راهاندازی میکند. یکی از موارد مهم برای نگهداری اطلاعات، استفاده از Volume ها در داکر است. چون که داکر به صورت پیشفرض اطلاعات را در لایهای ذخیره میکند که با پاک شدن کانتینر از بین میرود.
$ docker create -v /data --name data ubuntu
۲۴۰۶۳۳dfbb98128fa77473d3d9018f6123b99c454b3251427ae190a7d951ad57
$ docker run --rm --volumes-from data ubuntu ls -la /data
total 8
drwxr-xr-x 2 root root 4096 Dec 5 04:10 .
drwxr-xr-x 48 root root 4096 Dec 5 04:11 ..
برای این کار میتوان همزمان از دو روش ذخیرهسازی استفاده کرد تا نگهداری بهتری از فایلها انجام شود.
$ docker create -v /home/docker:/docker --name docker ubuntu
۹aa88c08f319cd1e4515c3c46b0de7cc9aa75e878357b1e96f91e2c773029f03
$ docker run --rm --volumes-from docker ubuntu ls -la /docker
total 20
drwxr-sr-x 5 1000 staff 180 Dec 5 04:00 .
drwxr-xr-x 48 root root 4096 Dec 5 04:13 ..
-rw-rw-r-- 1 1000 staff 3833 Dec 5 04:01 .ash_history
-rw-r--r-- 1 1000 staff 446 Nov 28 11:51 .ashrc
-rw-r--r-- 1 1000 staff 25 Dec 5 04:00 .gitconfig
drwxr-sr-x 3 1000 staff 60 Dec 1 03:28 .local
-rw-r--r-- 1 1000 staff 920 Nov 28 11:51 .profile
drwx--S--- 2 1000 staff 460 Dec 5 00:51 .ssh
drwxr-xr-x 32 1000 staff 1140 Dec 5 04:01 docker
با دستور زیر میتوان میزان حافظه تخصیصیافته به داکر را روی ۱۲۰ گیگابایت تنظیم کرد.
$ docker create -it --storage-opt size=120G fedora /bin/bash
مشخص کردن تکنولوژی ایزولهسازی کانتینر
لینوکس تنها یک تکنولوژی ایزولهسازی default ارائه میدهد اما در ویندوز انتخاب نوع ایزولهسازی بهعهده خود برنامهنویس است. با قرار دادن دستور زیر میتوانید تکنولوژی ایزولهسازی را تعیین کنید.
--isolation=<value>
که در آن به جای Value نوع تکنولوژی ایزولهسازی قرار میگیرد.
Value | عملکرد |
---|---|
default |
داکر از تکنولوژی پیشفرض خود استفاده میکند و اگر تکنولوژی پیشفرض در داکر موجود نباشد، ویندوز Process را بهعنوان تکنولوژی ایزولهسازی قرار میدهد. |
process |
فقط Namespace را ایزوله میکند |
hyperv |
ایزولهسازی با سبک سرپرستی پارتیشنمجور Hyper-V |
اگر پرچم isolation– را خالی بگذاریم، مقدار پیشفرض در نظر گرفته میشود.
کلام آخر در مورد چرخه حیات Container
نتورک داکرها ابزارهایی بسیار کاربردی برای تیمهای برنامهنویسی بهحساب میآیند. هر داکر از تعدادی کانتینر تشکیل شده است که از طریق کانالهایی به هم متصلند و امکان اجرای بخشهای مختلف کد روی یک شبیهسازی ابری از سیستمعامل را به توسعهدهنده میدهند. البته باید توجه داشت که گرفتن بهترین کارکرد از داکر و کانتینر در گروه شناخت و مدیریت اصولی آن است. مهمترین اصل در مدیریت داکر، مدیریت چرخه حیات Container است. برای مدیریت چرخه حیات کانتینر باید ابتدا آن را درست بشناسیم. در این مقاله مراحل چرخه حیات Container داکر بههمراه استراتژیهای پیشنهادی برای کار با آن و دستورات مربوطه بررسی شد.