داکر به زبان آدمیزاد

داکر به زبان آدمیزاد

تعریف Environment

یک نرم افزار در طول حیات خود در محیط های مختلفی، برای افراد متفاوت و با کاربرد های مختلف، اجرا می شود. به طور کلی 3 محیط مختلف را می توان متصور بود. (البته محیط های بیشتری هم وجود دارند)

  1. محیط توسعه یا Development
  2. محیط تست یا Staging
  3. محیط عملیاتی یا Production

نرم افزار در مدت زمان تولیدش در محیطی به نام Development Environment یا محیط توسعه قرار دارد و در این محیط است که به دنیا می آید و توسعه داده می شود. این محیط، محیط Developer ها یا توسعه دهندگان نرم افزار است که در حال کار کردن روی نرم افزار هستند و بنا به درخواست مشتری، به آن Feature اضافه کرده و Bug های احتمالی آن را رفع می کنند. 

بعد از این که نرم افزار به مرحله ای برسد که بشود آن را تحویل مشتری داد، قبل از آن باید از صحت عملکرد آن اطمینان حاصل کرد. در تیم های نرم افزاری تیمی وجود دارد به نام تیم QA یا تست(Quality assurance) که این وظیفه را بر عهده می گیرند. محیط این تیم با محیط تیم توسعه دهندگان متفاوت است و به آن Staging یا محیط تست گفته می شود. نرم افزار از محیط توسعه به این محیط منتقل می شود تا تست های لازم روی آن انجام گیرد.

اگر نرم افزار از همه ی تست ها با موفقیت عبور کند، باید تحویل مشتری نهایی داده شود تا از آن استفاده کند. محیطی که نرم افزار در آن جا اجرا می شود تا مشتری نهایی بتواند از آن استفاده کند، محیط Production یا عملیاتی گفته می شود. البته می توان در بین محیط های گفته شده، محیط های دیگری مانند Sandbox را هم داشت که برای پیچیده نشدن نوشتار از توضیح آن ها خود داری خواهیم کرد.

دنیای قبل از داکر

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

  1. ممکن است برنامه ای که به محیط جدید منتقل شده است، به درستی deploy یا استقرار پیدا نکرده باشد و یک یا چند فایل آن به درستی در محیط جدید کپی نشده باشد پس در نتیجه برنامه اجرا نمی شود یا عملکرد درستی نخواهد داشت.
  2. ممکن است نسخه درستی از برنامه ای که برنامه اصلی به آن وابستگی دارد، در محیط جدید نصب نشده باشد یا اصلا آن برنامه در محیط جدید نصب نشده باشد.  مثلا برنامه ما به MySQL نسخه 8.0 وابسته باشد اما روی محیط جدید MySQL نسخه 5.7 نصب شده باشد یا کلا MySQL نصب نشده باشد، در نتیجه برنامه به درستی کار نمی کند.
  3. دلیل سومی که می توان برشمرد این است که در محیط های مختلف پیکربندی های متفاوتی اعمال شده است و در نتیجه یا برنامه به درستی کار نمی کند یا به دلیل عدم وجود پیکربندی های مورد نیاز کلا اجرا نمی شود.

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

دنیای بعد از داکر

راه حل داکر برای مشکلاتی که در قسمت قبل بیان شد این است که می توان کل برنامه را با همه ی متعلقاتش یعنی همه ی فایل های برنامه و وابستگی های آن، همراه با پیکربندی های برنامه، درون یک Package یا بسته قرار داده و این بسته را در محیط های مختلف جا به جا کرد و اجرا کرد. در ادبیات داکر به این بسته Image  گفته می شود.

فرض کنید برنامه ای با استفاده از زبان پایتون نسخه 3.8 توسعه داده ایم و هم چنین از MySQL نسخه 8.0 برای ذخیره داده ها استفاده کرده ایم. پس یک بسته به این شکل خواهیم داشت.

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

داکر چگونه برنامه ها را اجرا می کند؟

وقتی به داکر دستور اجرای یک برنامه را می دهیم، به صورت اتوماتیک برنامه های وابسته آن را دریافت(Download) می کند و تنظیمات لازم را اعمال کرده و سپس آن را درون یک محیط ایزوله شده اجرا می کند که به این محیط ایزوله شده Container  گفته می شود. یکی از مزیت هایی که Containerها دارند این است که می توان چندین Container را به صورت موازی در کنار هم اجرا کرد، بدون اینکه تاثیری بر روی یکدیگر داشته باشند. از یک منظر دیگر می توان هر یک از این Containerها را مانند یک کامپیوتر جدا از هم فرض کرد در نتیجه این امکان وجود دارد که روی آن ها نسخه های متفاوتی از یک برنامه را اجرا کرد. به طور مثال تصویر زیر را مشاهده کنید.

هر دوی این Containerها درون یک کامپیوتر به صورت همزمان قابل اجرا هستند ولی چون در محیط های ایزوله شده از هم در حال اجرا هستند، هیچ تاثیری روی یکدیگر ندارند. همان طور که می بینید نسخه های مختلفی از MySQL و python بر روی این دو Container نصب شده اند و این Containerها به صورت side by side کنار هم در حال اجرا هستند و این نکته مهمی است که داکر در اختیار ما قرار می دهد. 

امکان دیگری که داکر در اختیار ما قرار می دهد این است، زمانی که کارمان با یک Container تمام شد، کل آن Container با تمام برنامه هایی که درون آن در حال اجرا هستند، از کامپیوتر پاک شده و درگیر حذف برنامه ها نخواهیم بود چون در بسیاری از موارد وقتی با پروژه های مختلفی کار می کنیم با انبوهی از برنامه ها و کتابخانه ها و ابزارهای بلا استفاده روبرو می شویم که از ترس از کار افتادن سایر برنامه ها نمی توانیم حذفشان کنیم ولی داکر این امکان را در اختیار ما قرار می دهد که برنامه ها همراه با وابستگی هایشان در یک محیط نصب شده و با هم از روی کامپیوتر حذف شوند.

در نهایت تعریف کلی داکر 

به طور کلی داکر سه وظیفه اصلی برای ما انجام می دهد.

  1. Build یا ساختن برنامه
  2. Run یا اجرای برنامه
  3. Ship یا انتقال برنامه

در حوزه Build، داکر به ما کمک می کند که Image برنامه هایمان را بسازیم و در اصطلاح داکر، آن ها را Dockerize  کنیم. پس از تولید Image برنامه، داکر به ما کمک می کند که یک Container  از روی Image بسازیم و درون آن برنامه را توسط داکر Run یا اجرا کنیم. کار نهایی داکر Ship یا انتقال Image برنامه از یک محیط به محیط دیگر است بدون آن که درگیر نصب برنامه های مختلف شویم یا تنظیمات خاصی را اعمال کنیم.

به یاد داشته باشید که شعار اصلی داکر این است: هر برنامه ای را می شود در همه جا اجرا کرد.

شنیدن این اپیزود از رادیوفول‌استک را به شما پیشنهاد می‌دهیم

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس