مقدمه
جاوا اسکریپت یکی از زبانهایی است که امروزه در توسعهی فرانتاند و بکاند بسیار مورد استفاده قرار میگیرد. از محبوبترین محیطهای runtime آن Node.js است. قصد داریم در این مستند در مورد نحوهی نوشتن داکرفایل (Dockerfile) برای اپهایی که با Node.js اجرا میشوند صحبت کنیم.
نوشتن داکرفایل
ابتدا در پوشهی اصلی اپ خود یک فایل به نام
Dockerfile
بسازید.
خطوط زیر را داخل داکرفایل کپی کنید:
FROM hub.hamdocker.ir/node:16 as builder
ARG NODE_OPTIONS
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build
FROM hub.hamdocker.ir/node:16 as runner
WORKDIR /app
ENV NODE_ENV production
COPY --from=builder /app/ ./
CMD ["npm", "start"]
توضیحات:
-
توجه کنید که کار ساخت ایمیج در ۲ مرحله انجام میشود. یک بار dependencyها نصب شده و بعد در ایمیج نهایی فایلهای ساخته شده کپی میشود.
-
در خط اول ما یک ایمیج داکری
nodeبا توجه به نسخهی Node.js اپ خود انتخاب میکنیم و نام آن راbuilderمیگذاریم. میتوانید نسخهی Node.js را دقیقتر هم تعیین کنید. مثلا ازnode:16.14.0استفاده کنید. آدرسhub.hamdocker.ir/در ابتدای نام ایمیج برای این است که رجیستری همروش استفاده کنیم. -
با
ARGمیتوان متغیرهایی را تعیین کرد که موقع بیلد به داکر میدهیم. به این متغیرها آرگومان بیلد میگوییم. اینجا ماNODE_OPTIONSرا مشخص کردهایم. با استفاده از بخش Enviornment Variables در دارکوب، میتوانید از این متغیر در هنگام اجرای اپهای خود بهره بگیرید. مطابق تصویر زیر، میتوان این متغیر را در بخش متغیرهای محیطی تعریف کرد.
-
سپس مسیری که در آن کار میکنیم تعیین شده است. عبارت
WORKDIRباعث میشود پوشهی/appساخته شود و بقیهی دستورها در آن اجرا میشوند. نام این پوشه دلخواه است و هر چیزی میتواند باشد. -
با
COPYفایلهایpackage.jsonوpackage-lock.jsonرا به داخل ایمیج کپی میک نیم. اگر از yarn استفاده میکنید فایلyarn.lockرا کپی کنید. در این مرحله کد اصلی کپی نمیشود؛ زیرا اولا این فایلها خیلی کمتر از کد اصلی تغییر میکنند. دوما داکر یک ویژگی دارد که موقع بیلد ایمیج اگر فایلها تغییری نکرده باشند از کش (cache) استفاده میکند. با این کار ما موقع نصب پکیجها (که مدت قابل توجهی طول میکشد) از کش داکر استفاده میکنیم و بیلد سریعتری داریم. -
با
RUNمیتوان موقع بیلد دستوراتی اجرا کرد. اینجا ما با npm پکیجهای مورد نیاز را نصب میکنیم. اگر از yarn استفاده میکنید دستوراتی که باnpmآمده است را تغییر دهید. -
حال تمام کد را با
COPYبه ایمیج کپی میکنیم. بعد باRUNعملیات build را انجام میدهیم. تا اینجا اپ ما بیلد شده و آمادهی اجراست. -
بعد از نصب پکیجها کار ما با ایمیج جدید شروع میشود. مجددا میتوانید نسخهی ایمیج را طبق نیاز تغییر دهید. عبارت
WORKDIRهم مانند قبل است. -
با
ENVدر ایمیج یک متغیر محیطی ایجاد میشود. اینجا ما مقدارNODE_ENVراproductionقرار دادهایم. -
این بار با COPY محتویات پوشهی
/appاز ایمیج قبلی را به ایمیج فعلی کپی میکنیم. به کاربرد--fromتوجه کنید که اسم ایمیج قبلی را مشخص کرده است. -
در نهایت با
CMDمیگوییم موقع اجرای کانتینر از روی این ایمیج دستورnpm startاجرا شود
در این مستند سعی کردیم به طور کلی ساخت داکرفایل برای اپهای Node.js را آموزش دهیم. با توجه به تنظیماتی که برای اپ خود دارید و ابزارهایی که استفاده میکنید، آن را تغییر دهید تا مناسب اپ شما بشود.