احمد رفیعی
احمد رفیعی
خواندن ۸ دقیقه·۷ ماه پیش

در مسیر دواپس به داکر رسیدم. (قسمت اول)

تو این پست در مورد داکر می‌خواهیم صحبت کنیم.

بذارید این شکلی شروع کنم، یه سری چیزای به درد بخور توی کرنل لینوکس بود که استفاده ازشون برای دولوپرا مرسوم و آسون نبود و یه سری سیس ادمین که بیشتر سمت کارای سکیوریتی و امنیت بودن از اینا استفاده میکردن. البته خیلی کم. داکر اومد استفاده از اونا رو راحت کرد 🙂 اینجوری است که تبدیل شد به یه ابزاری که دیگه الان اسمشو تو همه‌ی استک‌ها می‌شنوید و اصلا دیگه همه‌جا هست.

سعی میکنم بعد از توضیح هرکدوم از مفاهیم لیستی از کامندهای اون مفهوم رو به همراه یه توضیح مختصر با فونت کوچکتر بذارم برای درک بهتر مفهوم و اینکه بتونید سریع دست‌به کار بشید. اما یادتون باشه که درک مفاهیم مهم تر هست و کامند رو با سرچ می‌تونید پیدا کنید.

Docker
Docker

خب یه مروری کنیم پست‌های قبلی رو:

توصیه می‌کنم که حتما این پست‌ها رو هم مطالعه کنید. بریم که ادامه بدیم.


داکر چیه؟

داکر راه حلی هست برای مدیریت کردن کانتینر هامون. پلتفرمی که به دولوپرها و سیس ادمین‌ها این امکان رو میده که اپلیکیشن هاشون رو راحت بیلد، شیپ و ران کنن که شعار داکر هم همینه : Build , Ship , Run Any App Anywhere

داکر با زبان گولنگ توسعه داده شده و به شدت اینترفیس خیلی خوب و ساده‌ای برای کار کردن داره. به صورت کلی طوری ارائه شده که می‌شه به راحتی باهاش ارتباط برقرار کرد و کار کرد.

Build, Ship, Run
Build, Ship, Run

چرا داکر خوبه؟

خوبه که یه بررسی کنیم چرا داکر خوبه و چی شد که این طوری شد.

  • با داکر راحت می‌تونید اپلیکیشن‌تون رو با بقیه به اشتراک بذارید.
  • سریعتر می‌تونید اپلیکیشن‌تون رو دلیور کنید و بالا بیارید.
  • داکر کاملا با اتومیشن‌های مختلف سازگار هست و راحت می‌تونید دیپلوی کنید باهاش و به سرعت اسکیل کنید.
  • داکر بهمون کمک میکنه تا سریعتر تکون بخوریم🙂 بین محیط‌های مختلف و بهره‌وری توسعه دهنده هامون رو بالاتر می‌بره.
  • در ادامه مسیرمون به ci/cd میرسیم ولی اینجا فقط اشاره کنم که داکر خیلی واسه ci/cd خوبه در حدی که اگه من بخوام واسه جایی ci/cd بزنم، واسه آسون کردن کار خودمم که شده اونارو داکرایز میکنم حتما.
  • خیلی خوب و راحت داکر با بیزینس های مختلف سازگار میشه، هر زبان برنامه نویسی، هر فریم‌ورکی، هر سیستم عاملی، هر زیرساختی (بیرمتال، ماشین مجازی یا کلاد) که دارید، فرقی نمی‌کنه. داکر با شما همه جوره می‌سازه 😀 با داکر میتونید از بابت امنیت مطمئن باشید در حالیکه سرعت نوآوری شما رو کاهش نمیده، از ساختار چندلایه سکیوریتی تا اسکن های اتومیت اپلیکیشن ها و … داکر قابلیت بهمون میده که امن تر بشیم.
Benefits of Docker
Benefits of Docker

ورژن های مختلف داکر:

داکر یه نسخه انترپرایز (Enterprise Edition) داره و یه نسخه کامیونیتی (Community Edition). توی نسخه رایگان که نسخه کامیونیتی هست ما ساپورت خود داکر رو نداریم و یه سری پشتیبانی ها و امکانات خاص رو که داکر ارائه میده اینجا نداریم در عوض ساپورت کامیونیتی توسعه دهنده های آزاد رو داریم. نسخه‌ی کامرشیال داکر سال ۲۰۱۶ ارائه شد و می‌تونیم بگیم از همون سال هم داکر خیلی استیبل و پایدارتر هم شده و می‌شه گفت که میتونیم سرویس‌هامون رو با خیال راحت روی این زیرساخت بیاریم بالا و ازش استفاده کنیم.

یه نکته‌ی دیگه اینکه سال ۲۰۱۹ هم کمپانی معظم میرانتیس جناب داکر رو خرید و در اختیار گرفت. تغییر خاصی از اون تاریخ نکرده و هنوز می‌تونیم به خوبی ازش استفاده کنیم.

Docker Versions
Docker Versions

تاریخچه کانتینرها:

جالبه بدونید که تو سال ۲۰۰۰ FreeBSD Jails اومد توی chroot یونیکس برای ایزوله کردن پروسه‌ها. بعدش سال ۲۰۰۱ توی Linux-VServer ایزوله کردن پورت‌های کرنل اومد اما به کامپایل مجدد نیاز داشت. سال ۲۰۰۴ Solaris Zones کانسپت اسنپ شات رو آورد و بعدش CGroup رو گوگل سال ۲۰۰۶ ارائه کرد و Namespace رو سال ۲۰۰۸ ردهت ارائه کرد و از همون سال لینوکس کانتینرها شروع شدن و IBM ابزاری رو برای کار با نیم اسپیس و سی گروپ به نام LXC ارائه کرد و سال ۲۰۱۳ داکر اومد. که سالومون هیکس داکر رو به عنوان یه پروژه داخلی توی dotCloud استارت زد و همون سال داکر اوپن سورس شد تا اینکه سال ۲۰۱۶ داکر اولین نسخه تجاری خودش رو ارائه کرد.

Container History
Container History
Docker History
Docker History

کانتینر چیه؟

مفهوم کانتینر مجزا از داکر مورد نیازه که بررسی کنیم و بشناسیمش و چون خیلی ازش استفاده می‌شه برای همین مستقل بهش می‌پردازیم. سعی میکنم تعریف های مختلفی که از کانتینر شده رو اینجا براتون بیارم که بتونید یه درک خوبی بعد خوندشون از مفهوم کانتینر پیدا کنید چون به نظرم مهمه که این مفهوم رو خوب بشناسید. یکی از مفاهیم اصلی تو کوبرنتیز هم همین کانتینر هست که باید خوب و عمیق اون رو شناخته باشیم. بریم بیشتر باهاش آشنا بشیم.

ردهت میگه: کانتینرها تکنولوژی ای هستن که به ما امکان پکیجینگ و ایزولیشین اپلیکیشن مون به همراه انوایرومنت ران تایمش و تمام فایل‌هایی که برای ران شدنش لازمه رو میدن. به خاطر ویژگی هایی که دارن کانتینر ها به ما امکان اینو میدن که کانفلیکت های بین دولوپمنت و آپریشن مون رو کم کنیم.

داکر میگه: کانتینر یه محیط ایزوله شده هست برای کد شما. به این معنی که اگه از کانتینر در مورد سیستم عامل شما یا فایل هاتون سوالی بپرسیم، میگه اطلاعی ندارم! از دید خودش داخل کانتینر تنها هست.

دیجیتال اوشن میگه: کانتینر یک فضای کاربری مینیمال و ایزوله است که در سطح سیستم عامل اجرا می شود و منابع سیستم را با سایر کانتینرها به اشتراک می گذارد. کانتینرها به گونه ای طراحی شده اند که یک محیط اجرا قابل حمل و پایدار برای برنامه ها فراهم کنند، در حالی که منابع کمتری را نسبت به سرور یا ماشین مجازی سنتی مصرف می کنند. کانتینرها امکان استفاده بهتر از منابع محاسباتی در برنامه های کاربردی چند جزئی، توزیع شده و سیستم های high-available را فراهم می کنند.

جناب IBM میگه: کانتینرها واحدهای نرم افزاری قابل اجرایی هستند که درونشون کد اپلیکیشن ما به همراه کتابخانه ها و دیپندنسی ها پکیج شده، به همین خاطر اون کد می‌تونه هر جایی ران بشه.

پس یه دید اولیه تو ذهنمون شکل گرفت که کانتینر یه پروسه هست که از بقیه ی پروسه های سیستم عامل ایزوله شده و دسترسی ای به اونا نداره و هم چنین یه قسمتی از منابع در اختیارشه و می‌تونه از آنها استفاده کنه. حالا در ادامه درکتون عمیق تر میشه.

What is Container
What is Container


مقایسه کانتینر با ماشین مجازی (VM) :

Container vs Virtual Machine
Container vs Virtual Machine

کانتینر مجازی‌سازی و ایزوله‌سازی در سطح سیستم عامل و پروسه هست در حالی‌ که VM مجازی سازی و ایزوله سازی در سطح سخت افزاره. یه جورایی این قیاس مع الفارق هست ولی چون معمولا این مقایسه رو انجام میدن اینجا براتون آوردمش و از چند نظر مختلف بررسیش میکنیم.

از نظر ایزوله سازی و اختصاص منابع: ماشین مجازی قسمتی از سخت افزار لایه پایینش رو از hypervisor ی که داره اونو می‌سازه می‌گیره اما کانتینر قسمتی از منابع که سیستم عامل لایه پایینش در اختیارش می‌گذاره رو می‌گیره.

از نظر حجمی که اشغال می‌کنند: ماشین های مجازی در اردر چند گیگ هستند در حالیکه کانتینر ها در اردر چند مگ، یعنی هزار برابر کوچیکتر 🙂 البته مثال‌های نقض این موضوع هم وجود داره اما به صورت کلی این شکلی هست که حجم‌ها تو کانتینرها خیلی کمتر از ماشین‌های مجازی هستند.

از نظر سرعت بوت شدن: ماشین های مجازی در اردر چند ده ثانیه یا دقیقه هستن در حالیکه کانتینر ها در اردر میلی ثانیه هستن یه جورایی ده هزار برابر سریعتر 🙂. سرعت بوت شدن سرویس‌ها و بالا آمدن آنها تو کانتینرها خیلی خیلی کمتر هست. ببینید تو ماشین مجازی باید سیستم عامل بوت بشه بعد از بوت باید سرویس‌های سیستمی بیاد بالا و بعدش هم تازه اپ ما بالا بیاد اما اینجا وقتی کانتینر بالا میاد مستقیم سرویس ما بالا میاد و خیلی خیلی سریع‌تر هست. هر ماشین مجازی یک نسخه‌ی کامل از سیستم عامل را دارد در حالیکه کانتینرها سیستم عامل رو با هم به اشتراک میذارن، در واقع کرنل سیستم عامل رو با هم شیر میکنن.

Container vs Virtual Machine
Container vs Virtual Machine

البته این مقایسه دلیل نمیشه که بگیم دیگه VM هارو بندازیم دور و همه جا باید از کانتینر استفاده کنیم، اینطور نیست و هر کدومش یوز کیس خودشو داره و بسته به نیاز شما و کاری که میخواید انجام بدید باید بررسی کنیم که استفاده از کدوم مورد بهتر هست.

در ادامه مسیر توی داکر عمیق تر میشیم و باهاش بیشتر آشنا میشیم.


خوبه که داکرمی رو تو جاهای مختلف فالو کنید. پذیرای نظرات شما هستیم.

داکرdockerdevopsمهندس DevOps
مشاور زیرساخت. موسس سایت آموزشی DockerMe.ir
شاید از این پست‌ها خوشتان بیاید