Skip to main content

اپ Node.js

مقدمه

جاوا اسکریپت یکی از زبان‌هایی است که امروزه در توسعه‌ی فرانت‌اند و بک‌اند بسیار مورد استفاده قرار می‌گیرد. از محبوب‌ترین محیط‌های 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 را آموزش دهیم. با توجه به تنظیماتی که برای اپ خود دارید و ابزارهایی که استفاده می‌کنید، آن را تغییر دهید تا مناسب اپ شما بشود.