برنامه نویسی Programming

Docker داکر چیست؟ خوش و بشی با داکر Docker

Docker

مبحثی که در موردش میخایم شروع به صحبت کنیم، در مورد Container ها و علی الخصوص داکر (Docker) هستش که به صورت کلی و مختصر به تعریف و توضیح کوتاهی در موردشون می پردازیم. لازم به گفتن میدونم که بعضی از تعاریف برای سادگی به شکل دیگه ای بیان میشه و سعی میکنم زیاد ریز بینانه وارد نشم تا مبحث ویژگی فهم عمومی داشته باشه.

Container چیست؟

خب اول از همه بریم سراغ Container و ببینیم چی هست و کجا استفاده مون میشه.

به زبان خیلی ساده میشه گفت Container به گروهی از پروسس ها میگن که داخل یک فضای ایزوله شده‌ قرار گرفته‌اند (البته ما در docker سراغ این میریم که microprocess ها رو داشته باشیم و در هر کانینر یک پروسس اصلی رو اجرا کنیم).

از نگاهی دیگه میشه گفتش که مدلی از مجازی سازی در لایه ی سیستم عامل هستش که هسته ی سیستم عامل این قابلیت رو به ما میده که تعدادی فضای ایزوله رو کاربر بتونه ایجاد کنه.

اینجا سؤال پیش میادش که فضای ایزوله ای که ازش اسم بردیم چی هستش؟ چه قابلیتی از سیستم عامل هستش که این ویژگی رو به ما داده؟

در سیستم عامل لینوکس، یکی از مزیت‌های هسته، Namespace هستش که منابع سیستمی رو برای ما به صورتی کاملاً مجزا جدا و شبیه سازی میکنن. مثلاً Process ID، دسترسی شبکه یا حتی فایل سیستم و یا ارتباطات داخلی پروسس ها، پس اینطوری ما با استفاده از Namespace یک فضای ایزوله برای کارمون ایجاد کردیم.

خب، دوباره تعریف سادمون از Container رو اینجا باز گو میکنم: Container به گروهی از پروسس ها میگن که داخل یک فضای ایزوله شده قرار گرفته و هر Container میتونه قابلیت‌های Namespace رو که چندتاشون رو نام بردیم داشته باشه.

Docker
Docker

داکر (Docker)

وقتش رسیده که بریم سراغ Docker و ببینیم نهنگ آبی و خندون داکر کی هستش و چی هست و رسالتش چیه.

هسته‌ی داکر که میتونیم بهش Docker Engine بگیم، یک نرم‌افزار متن باز هستش که روی سیستم عامل نصب میشه و به ما اجازه ی ساخت، پیاده‌سازی و مدیریت Container ها رو میدهاین برنامه توسط تیم داکر و یا dotCloud نوشته شده و در اختیار من و شما قرار گرفته. Docker به ما این قابلیت رو میده که برنامه‌های خودمون رو به صورت اتوماتیک پیاده‌سازی کنیم و در قالب microprocess هر container رو دربیاریم و استفاده کنیم.

بزرگترین مزیتی که Docker بهمون ارایه میده این هستش که به سرعت میتونین کار development خودتون رو باهاش تست کنین، جلو ببرین و به حالت production برسونینشازین باحال تر این هستش که دیگه مثله نیازمندی های KVM، VMware و … به سیستم عجیب و غریبی نیاز نداریم؛ در واقع بسادگی میتونین روی سیستمی که دارین (که شاید RAM و CPU بالایی نداشته باشه)، داکِر رو نصب و ازش استفاده کنین.

containers
containers

موارد کاربردی داکر

در مورد مزیتی که اول گفتم (تسریع در Developmentبگذارین یک مثال تجربیِ کوچیک بزنم:
امروز میخاستم یک اسکریپت کامپایل Nginx با OpenSSL ورژن 1.0.2j و یک سری enable/disable کردن‌های دیگه درست کنمروال کار برای من اینجوری بودش:

  1. نصب پیش نیاز ها
  2. دانلود nginx و openssl
  3. کامپایل openssl
  4. کامپایل nginx

اگه تا به حال کامپایل انجام داده باشین، متوجه میشین بعضی وقتا حوصله سَربَر میشه، مخصوصاً زمانی که بخواین پکیج رو کم و زیاد کنین یا موقغی که بلا به دور با نقص پیش نیاز مواجه بشین.

۲ تا حالت رو با هم بررسی میکنیمیکی حالت معمولی و روی یک سیستم عامل معمولی که میخایم یک template تر و تمیز بسازیمو حالت بعدی استفاده از docker که میخایم یک کانتینر ازش بسازیم.

حالت عادی

فرض کنید اسکریپت ما تا مرحله ۴ رو کامل هر بار جلو میره و یک زمان زیادی رو کامپایل OpenSSL ازمون میگیره و بعدش میرسه به Nginxحالا توی Nginx به ایراد میخورید و برطرفش میکنیماسکریپت با comment کردن کارای قبل تست اولیه میشه و بعدش از comment برای تست نهایی خارجش میکنیم و باز میبینیم یک feature زیاده و باز دوباره از اولفرض کنین چند بار این اتفاق بیوفتهشما یک صبح کاری رو به همین سادگی از دست میدیناین صبح کاری به ساخت یک اسکریپ نصب گذشت که هر بار برای تست نهایی ۳ مرحله ابتدایی رو دوباره اجرا میکردش.

حالت دوم – استفاده از DOCKER

در این روال داکر برای هر مرحله‌ای که جلو میریم یک لایه در نظر میگیرهاینطور فرض کنید که از هر جای این ۴ مرحله میتونیم کار رو ادامه بدیماسکریپتمون مثل قبل تا مرحله ۴ میره و در مرحله ۴ ما شروع به enable/disable کردن ها میکنیماما اینجا کامپایلمون یک تفاوتی دارهدیگه نیازی به کامنت کردن نداریمهر بار اجرا کنیم، چون ۳ مرحله ی قبلی تکراری هستن، از مرحله ۴ به بعد ادامه پیدا میکنه و زمان ۳ مرحله قبل رو (مخصوصاً کامپایل OpenSSL که طولانی هستشمی‌خریم و هر بار فقط مرحله ۴ تکرار میشه.

این یک مثال خیلی خیلی کوچیک اما ملموس و دم دستی بود که گفتم.

از مزیت‌های دیگه ای که Docker-Container بهمون میده، میتونیم به این اشاره کنیم که Image ها (فعلاً فرض رو بر این میگذاریم که Image مثل Template در دنیای مجازی سازی هستشحجم های بسیار کمی دارنمثلاً Image سیستم عامل Debian حدود 123 مگابایت هستشولی شما وقتی یک Debian روی سیستم نصب میکنید حدود 4 گیگابایت (تا جایی که یادمه) ازتون فضا میگیره … دلیلش رو اینطور فرض کنید که Image حداقل نیاز خود سیستم عامل مورد نظر بدون هیچ Kernel ای از خودش هستچون Container گفتیم که از Kernel سیستم عامل اصلی استفاده میکنه، پس این مزیت تأکید بر حجم داشتش.

Docker
Docker

یک مزیت بزرگی که داکر بهمون میده، Registry اون هستش. Registry رو به چشم Repository ای از Image های مختلف ببینینمیشه گفت بزرگترین Registry مربوط میشه به Docker Hub که انواع و اقسام Image ها رو میشه داخلش پیدا کرد.

از ویژگی‌هایی که مربوط به داکر میشه، به Swarm میتونم اشاره کنم که قابلیت مدیریت چند سیستم دارای Docker رو بهمون ارایه میده و میتونیم از یک نقطه به صورت توزیع شده Application خودمون رو پیاده‌سازی کینم و دیگه به این فکر نکنیم که الان باید روی کدوم سیستم Container رو بالا بیارم.

مزیت دیگه میشه به HealthCheck اشاره کردش که با وجود Swarm دیگه نگرانی این رو نداریم که اگر Application از دسترس خارج شد، دیگه Application از کار بیوفتهبا وجود این ویژگی در اسرع زمان، در یکی از نقاط در دسترس Application به صورت اتوماتیک اجرا میشه

Shares:

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *