خب به نظرم یکم از دنیای اندروید فاصله بگیریم و یه سری هم به دنیای برنامهنویسی بکاند سری بزنیم بد نباشه.
بذارید اول بگم این مطلب مناسبه چه افرادیه. اگر شما برنامه نویسی بکاند یا فرانتاند هستید و توی تیم کار یا تنها این مطلب مناسب شماست. اگر شما SysAdmin هستید یا برنامهنویسی هستید که به دنیای SysAdmin ها یا DevOps کارها علاقه دارید هم این مطلب برای شماست. یا حتی اگر برنامه نویسی هستید که گاها با تکنولوژیهای خاص و جدید و متفاوتی کار میکنید و از ستاپ کردنها و نصب کردنهای طولانی خسته شدید، باز هم این مطلب براش شماست.
خلاصه بگم; اگر برنامه نویس هستید باید با داکر آشنا بشید.
و اما جواب این سوال که کلا داکر (Docker) چیه؟
داکر ابزاری برای ساختن، ارائه و اجرای پلتفرمهای مختلف نرمافزاریه. میخواد روی لپتاپ باشه یا روی ماشین مجازی رو سرور یا اصلا Cloud. داکر چیزی شبیه به مجازیسازهای معمول مثل KVM, VirtualBox , یا VMWare هستش ولی خوب به طور کلی با اونها فرق میکنه.
شما اگر یک ماشین مجازی با یکی ابزارهای بالا بسازید، تمام منابع سیستم به طور اختصاصی برای شما در نظر گرفته میشه. شما Kernel سیستمعامل کاملا جدا خواهید داشت با فضای رم تضمین شده و کاملا اختصاصی و کلا انگار که سیستم عامل جدا رو ران کردید و همه چیز تقریبا با سیستم عامل واقعی یکی خواهد بود.
اما تو داکر قضیه فرق میکنه. شما از Kernel سیستم عامل میزبان (Host) به صورت اشتراکی استفاده میکنید. اگر از سخت افزاری قراره استفاده بکنید لازمه که باز از سیستمعامل میزبان قرض بگیرید. فضای رم و فضای هارد هم به همین صورت. و حتی ظرفیت پردازشگر مرکزی رو.
شاید سوال پیش بیاد که این چیش خوبه؟! خوب بنظرتون اگر ما سیستمعامل جدا نداشته باشیم و لازم نباشه تمامی Boot Sequence یک سیستم عامل رو انجام بدیم کلی تو زمان و منابع سیستمی صرفه جویی نکردیم؟
با استفاده از داکر و روشی که به اصطلاح Containerization گفته میشه شما میتونید یک محیط کاملا ایزوله برای کد خودتون داشته باشید بدون دردسرهای ماشین مجازی و مصرف منابعی (رم، هارد، سی پی یو) بسیار کمتر که خیلی راحت و در عرض چند ثانیه میتونید انواع و اقسام Stackهای از پیش آماده رو اجرا و استفاده کنید.
برای مثال من نرم افزار تحت سروری نوشتم که به یک محیط توسعه php احتیاج داره و برای دیتابیس هم از PostgreSql استفاده میکنه. خیلی راحت میام از دو تا Image پیش ساخته داکر یکی برای php و دیگری برای PostgreSql استفاده میکنم و با استفاده از روشی که در ادامه میگم این دو تا رو بهم وصل میکنم، بدون اینکه نیاز باشه خودم به صورت دستی چیزی رو نصب کرده باشم.
یا حتی اگر هیچ کدوم از Image های آماده داکر به دردم نخوره، خیلی راحت با استفاده از یک Dockerfile ایمیج مخصوص به خودم رو میسازم و بارها ازش استفاده میکنم.
مثلا دیگهاش رو میتونم به این صورت بزنم که من یک برنامهنویس بکاند هستم و روی یک API دارم کار میکنم که قرار به کلاینتهای Android, iOS , وب سرویس دهی کنه. ما هنوز در مرحله توسعه هستیم و مطمئنا قرار کدها بارها عوض بشن. یک روش کار به این صورت که میتونیم کدها رو رو یک سرور مرکزی قرار بدیم و همه کلاینتها برای توسعه به اون ریکوئست بزنن و هر بار هم که تغییری لازم بود من سرور رو آپدیت میکنم. حالا اگه این وسط به هر دلیلی، دسترسی به سرور نباشه (از قطعی اینترنت گرفته تا مشکلات شبکه و یا اصلا هزینه بالای نگهداری سرور) تکلیف ما چیه؟!
اینجاست که من میتونم با استفاده از داکر و ساختن ایمیجهای مناسب با استفاده از Dockerfile و همچنین تعریف سرویسها مورد نیاز و نحوه اتصالشون داخل فایلی به اسم docker-compose.yml یک بکاند شبیه سازی شده و کامل رو در اختیار تیمهای مختلف کلاینت قرار بدم و تنها چیزی که اونا لازم دارن اجرای یک دستور ساده است تا API شما رو به طور کامل روی سیستم خودشون و به صورت لوکال داشته باشن. بنظرتون این روش خیلی خیلی ساده و کارا نیست؟
مورد استفادهای دیگهای که میتونم مثال بزنم برای تست کردن زبانهای و استکهای جدیده. برای مثال من جدیدا به مباحث یادگیری ماشینی (Machine Learning) و یادگیری عمیق (Deep Learning) علاقه مند شدم و دوست دارم خیلی مختصر برای شروع باهاشون کار کنم و دلم نمیخواد سیستمعاملم رو با دهها ابزاری که باید نصب کنم سنگین و آلوده کنم.
اینجا خیلی راحت میام و از یکی از ایمیجهای از پیش ساخته مثل این یا این یا این استفاده میکنم و در عرض چند ثانیه یه محیط کاملا آماده برای شروع به کار دارم. بدون اینکه کوچکترین پکیجی رو روی سیستمعامل اصلی خودم نصب کرده باشم.
امروزه داکر همه جا داره استفاده میشه. از پروژههای کوچک و شخصی گرفته تا حتی ناسا! پس به عنوان یه برنامهنویس وظیفه همه ماست که در موردش بخونیم و نحوه استفاده اش رو یاد بگیریم. اگر هم که برنامه نویس بکاند هستید بنظرم لازمه با ابزارهای دیگه مرتبط مثل Docker Swarm و یا Kubernetes هم آشنا باشید.
تو این مطلب سعی به صورت ساده داکر رو معرفی کنم و موارد استفاده مختلفش رو با کمک مثال شرح بدم. توی مطالب بعدی کمی قضیه رو عملیتر میکنیم و سعی میکنیم یه پروژه ساده رو تو داکر پیاده سازی بکنیم.
پس حتما اگر سوالی بود بپرسید. اگر هم که این مطلب رو دوست داشتید ? یادتون نره.