پرش به مطلب اصلی

قالب های Dockerfile برای Node.js

این راهنما به شما کمک می‌کند تا Dockerfile مناسب برای پروژه‌های Node.js بسازید.

نکات کلیدی برای تمام Dockerfile ها

  1. استفاده از ایمیج های رسمی Node.js
  2. ایجاد یک کاربر غیر root برای امنیت بیشتر
  3. استفاده از متغیرهای محیطی برای انعطاف‌پذیری بیشتر
  4. بهینه‌سازی برای کاربردهای مختلف Node.js
FROM node:$node_version
ARG UID=1000
ARG GID=1000

RUN groupadd -g $GID -o app && \
useradd -g $GID -u $UID -mr -d /home/app -o -s /bin/bash app

WORKDIR /home/app

COPY --chown=app:app package*.json ./

RUN npm install

COPY --chown=app:app . .

USER app

ENV NODE_ENV=production
ENV PORT=3000

EXPOSE $PORT

CMD [ "npm", "start" ]
اطلاع
  • این Dockerfile برای یک برنامه Node.js استاندارد طراحی شده است.
  • از یک کاربر غیر root برای اجرای برنامه استفاده می‌کند.
  • وابستگی‌ها قبل از کپی کد اصلی نصب می‌شوند تا از cache داکر بهتر استفاده شود.
  • متغیرهای محیطی برای تنظیمات مختلف در نظر گرفته شده‌اند.
توجه
  • متغیر $node_version را با نسخه مورد نظر Node.js جایگزین کنید.
  • دستور CMD را بر اساس نیاز پروژه تنظیم کنید (مثلاً npm start, node index.js, etc.).
  • در صورت نیاز به نصب پکیج‌های سیستمی اضافی، آنها را قبل از npm install اضافه کنید.

بیلد و اجرا کردن داکر فایل

برای بیلد کردن داکر فایل و ساخت ایمیج:

docker build -t [ProjectName] .
  • t- : دادن برچسب و نام مخصوص برای پروژه

و سپس برای اجرای آن:

docker run -p outport:inport[3000] --name=container-name -d [ProjectName]
  • p- : تعیین پورت برای اجرای پروژه
  • outport : پورت خارجی
  • inport : پورت داخلی پروژه که در داکر فایل تعیین کرده‌اید
  • name-- : تعیین نام کانتینر
  • d- : اجرای کانتینر در حالت بدون نمایش
توجه
  1. امنیت:

    • همیشه از آخرین نسخه‌های پایدار Node.js استفاده کنید
    • از نصب پکیج‌های غیرضروری خودداری کنید
    • حتماً از کاربر غیر root استفاده کنید
  2. بهینه‌سازی:

    • از .dockerignore برای حذف فایل‌های غیرضروری استفاده کنید
    • در محیط production از npm ci به جای npm install استفاده کنید
    • حجم ایمیج نهایی را با استفاده از ایمیج‌های alpine کاهش دهید
  3. تست: قبل از استقرار در محیط تولید، حتماً ایمیج Docker خود را تست کنید.