Skip to main content

ساخت اپ‌های بیلدپکی در دارکوب

معرفی Buildpack

بیلدپک برای اولین بار توسط شرکت Heroku در سال 2011 معرفی شد. از آن موقع تا الان شرکت‌های زیادی از آن استفاده کرده‌اند و به گسترش آن کمک کردند. در سال 2018 دو شرکت Pivotal و Heroku پروژه‌ی Cloud Native Buildpacks یا به شکل مخفف CNB را بنیان‌گذاری کردند که بعد از چند ماه به CNCF پیوست. هدف این پروژه این است که بیلدپک‌های مختلف را کنار هم جمع کند تا بتوان از آن‌ها به شکلی استاندارد استفاده کرد. در این نوشته قصد داریم معرفی کنیم که بیلدپک چیست و پروژه‌ی CNB چه کمکی در استفاده از بیلدپک به ما می‌کند.

اجزای پروژه‌ی CNB

بیلدپک ابزاری است که سورس کد شما را تبدیل به یک ایمیج آماده می‌کند. از روی این ایمیج می‌توان در محیط production کانتینر ساخت. بیلدپک‌ها سورس کد شما را بررسی می‌کنند و dependencyهای آن را نصب می‌کنند تا بتوان ایمیجی داشت که در هر ابری قابلیت اجرا دارد. برای انجام این کار هر بیلدپک دو مرحله را طی می‌کند:

  1. اولین مرحله detect یا تشخیص است. در این مرحله بیلدپک سورس کد را بررسی می‌کند و تعیین می‌کند که برای آن قابل استفاده است یا نه. اگر قابل استفاده باشد در مرحله‌ی بعد که build است استفاده می‌شود. در غیر این صورت در نظر گرفته نمی‌شود. برای مثال فرض کنید یک بیلدپک Node.js در مرحله‌ی detect دنبال فایل package.json در روت پروژه می‌گردد. اگر این فایل باشد در مرحله‌ی بعد استفاده می‌شود و اگر وجود نداشته باشد بیلدپک Node.js در مرحله‌ی build استفاده نخواهد شد.

  2. مرحله‌ی دوم، همان طور که گفته شد، build یا ساخت است. بیلدپک‌هایی که در detect قابل استفاده تشخیص داده شده‌اند dependencyهای کد شما را در یک ایمیج پایه نصب می‌کنند و اگر لازم باشد کد را کامپایل می‌کنند. بیلدپک‌ها دستور اجرایی مناسب برای زمان اجرا را هم تنظیم می‌کنند. مثلا بیلدپک Node.js دستور npm install را برای نصب پکیج‌ها اجرا می‌کند و دستور اجرایی را npm start می‌گذارد.

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

بیلدر (builder)

بیلدر یک ایمیج است که تمام اجزای لازم برای بیلد را در خود دارد. از جمله‌ی این اجزا بیلدپک‌ها و تنظیمات اجرای آن‌ها هستند. مثلا برای تنظیمات ترتیب اجرای بیلدپک‌ها در آن وجود دارد. یکی از اجزای مهم در بیلدر lifecycle نام دارد که در بخش بعدی به آن می‌پردازیم.

lifecycle

در بیلدر وقتی عملیات بیلد انجام می‌شود این lifecycle است که آن را مدیریت می‌کند.‌ یعنی بیلدپک‌ها را اجرا می‌کند و نتیجه‌ی کار آن‌ها را در یک ایمیج نهایی به نام run image قرار می‌دهد. برای این کار lifecycle مراحلی را طی می‌کند که به ترتیب آن‌ها را بیان می‌‌کنیم.

Detect, Analyze, Restore, Build & Export

مرحله‌ی اول detect است. در این مرحله از تمامی بیلدپک‌ها پرسیده می‌شود که آیا برای بیلد ایمیج از روی سورس کد می‌توانند کمک کنند یا نه. برای این کار مرحله‌ی detect هر بیلدپک اجرا می‌شود و اگر موفقیت‌آمیز بود آن بیلدپک برای بیلد استفاده خواهد شد. بعد از detect دو مرحله‌ی analyze و restore را داریم که برخی فایل‌ها را آماده می‌کنند تا بیلد را بهتر انجام دهد. استفاده از کش ایمیج‌های قبلی هم در restore انجام می‌شود. سپس نوبت به مراحل build و export می‌رسد تا به کمک بیلدپک‌های قابل استفاده، سورس کد را تبدیل به یک ایمیج کنند و آن را به رجیستری پوش کنند.

پلتفرم

عنصری که فرایند بیلد را آغاز می‌کند پلتفرم نام دارد. پلتفرم بیلدر را اجرا می‌کند و سورس کد را به آن می‌دهد تا اجرا شود. یک نمونه از پلتفرم ابزاری به نام pack است که یک CLI است و به کمک آن فرایند بیلد ایمیج اجرا می‌شود.

اپ‌های بیلدپکی قابل ساخت در دارکوب

ساخت اپ استاتیک در دارکوب
Static
ساخت go در دارکوب
Go
ساخت java در دارکوب
Java
ساخت nodejs در دارکوب
Node js
ساخت Python در دارکوب
Python
ساخت ruby در دارکوب
Ruby
ساخت PHP در دارکوب
PHP
ساخت .Net Core در دارکوب
.Net Core