قالب های Dockerfile برای فریم ورک های Node.js
این راهنما به شما کمک میکند تا Dockerfile های مناسب برای پروژههای مبتنی بر Node.js بسازید. ما قالبهایی برای فریمورکهای محبوب Vue.js، React.js، Next.js و Nuxt.js ارائه میدهیم.
نکات کلیدی برای تمام Dockerfile ها
- استفاده از تصاویر رسمی Node.js
- ایجاد یک کاربر غیر root برای امنیت بیشتر
- استفاده از متغیرهای محیطی برای انعطافپذیری بیشتر
- بهینهسازی برای هر فریمورک خاص
- NextJS
- NuxtJS
- ReactJS
- VueJS
FROM node:$node_version
ARG UID=1000
ARG GID=1000
ENV PORT=3000
ENV HOSTNAME=0.0.0.0
RUN groupadd -g $GID -o app && \
useradd -g $GID -u $UID -mr -d /home/app -o -s /bin/bash app
USER app
WORKDIR /home/app
COPY --chown=app:app app/ /home/app/
RUN npm install
CMD [ "npx", "next", "start", "--hostname", "0.0.0.0", "-p", "$PORT" ]
اطلاع
- این Dockerfile برای Next.js از یک مرحله واحد استفاده میکند، زیرا Next.js به Node.js در زمان اجرا نیاز دارد.
- از دستور
npx next start
برای اجرای برنامه استفاده میشود.
توجه
- اطمینان حاصل کنید که
$node_version
را با نسخه مناسب Node.js جایگزین کردهاید. - متغیر PORT را تعیین کرده اید که در تنظیمات پیشرفته یا داشبورد پروژه در کوبار جایگزین کنید .
FROM node:$node_version
ARG UID=1000
ARG GID=1000
ENV PORT=3000
ENV HOSTNAME=0.0.0.0
RUN groupadd -g $GID -o app && \
useradd -g $GID -u $UID -mr -d /home/app -o -s /bin/bash app
USER app
WORKDIR /home/app
COPY --chown=app:app app/ /home/app/
RUN npm install
# RUN generate
# CMD [ "HOSTNAME=0.0.0.0", "PORT=$PORT", "npm", "run", "start" ]
#or
# RUN npm run build
# CMD [ "node", ".output/server/index.mjs" ]
اطلاع
- این Dockerfile برای Nuxt.js طراحی شده و شباهت زیادی به نسخه Next.js دارد.
- دو گزینه برای اجرا ارائه شده است: استفاده از
npm run start
یا اجرای مستقیم فایل خروجی سرور. - متغیر PORT را تعیین کرده اید که در تنظیمات پیشرفته یا داشبورد پروژه در کوبار جایگزین کنید .
توجه
$node_version
را با نسخه مناسب Node.js جایگزین کنید.- بسته به نیازهای پروژه، یکی از دو گزینه CMD را انتخاب و از حالت کامنت خارج کنید.
- اگر از حالت استاتیک استفاده میکنید، دستور
RUN generate
را از حالت کامنت خارج کنید.
FROM node:$node_version as build
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
USER app
WORKDIR /home/app
COPY --chown=app:app app/ /home/app/
RUN npm install
#CMD [ "npm", "run", "build" ] or CMD [ "npm", "run", "start" ]
FROM nginx:$nginx_version as production
COPY --from=BUILD /home/app/build/ /usr/share/nginx/html/
RUN echo 'server {\n\
listen 3000;\n\
server_name _;\n\
location / {\n\
root /usr/share/nginx/html;\n\
try_files $uri $uri/ /index.html;\n\
}\n\
location /index.html {\n\
root /usr/share/nginx/html;\n\
expires 0d;\n\
}\n\
}' > /etc/nginx/conf.d/default.conf
اطلاع
- ساختار این Dockerfile بسیار شبیه به نسخه Vue.js است.
- تفاوت اصلی در مسیر خروجی ساخت است: برای React از
/home/app/build
استفاده میشود. - پیکربندی Nginx مشابه است، که برای برنامههای SPA بهینه شده است.
توجه
- اطمینان حاصل کنید که
$node_version
و$nginx_version
را با نسخههای مناسب جایگزین کردهاید. - توجه داشته باشید که مسیر خروجی ساخت React (
/home/app/build
) با Vue.js متفاوت است.
FROM node:$node_version as build
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
USER app
WORKDIR /home/app
COPY --chown=app:app app/ /home/app/
RUN npm install
#CMD [ "npm", "run", "build" ] or CMD [ "npm", "run", "start" ]
FROM nginx:$nginx_version as production
COPY --from=BUILD /home/app/dist/ /usr/share/nginx/html/
RUN echo 'server {\n\
listen 3000;\n\
server_name _;\n\
location / {\n\
root /usr/share/nginx/html;\n\
try_files $uri $uri/ /index.html;\n\
}\n\
location /index.html {\n\
root /usr/share/nginx/html;\n\
expires 0d;\n\
}\n\
}' > /etc/nginx/conf.d/default.conf
اطلاع
- این Dockerfile از یک ساختار چند مرحلهای استفاده میکند: مرحله ساخت و مرحله تولید.
- در مرحله ساخت، ما پروژه Vue.js را کامپایل میکنیم.
- در مرحله تولید، فایلهای ساخته شده را به یک سرور Nginx منتقل میکنیم.
- پیکربندی Nginx برای اجرای صحیح برنامه Vue.js (SPA) تنظیم شده است.
توجه
- متغیر
$node_version
را با نسخه مورد نظر Node.js جایگزین کنید. - متغیر
$nginx_version
را با نسخه مورد نظر Nginx جایگزین کنید. - بسته به نیاز پروژه، میتوانید بین
npm run build
وnpm run start
انتخاب کنید.
بیلد و اجرا کردن داکر فایل
برای بیلد کردن داکر فایل و ساخت ایمیج از دستور
docker build -t [ProjectName] .
- t- : دادن برچسپ و نام مخصوص برای پروژه
و سپس برای اجرای آن:
docker run -p outport:inport[3000] --name=container-name -d [ProjectName]
- p- : تعیین پورت برای اجرای پروژه
- outport : پورتی خارجی
- inport : پورت داخلی پروژه که در داکر فایل تعیین کرده اید
- name-- : تعیین نام کانتینر
- d- : اجرای کانتینر در حالت بدون نمایش
توجه
- امنیت: همیشه از آخرین نسخههای پایدار Node.js و Nginx استفاده کنید.
- تست: قبل از استقرار در محیط تولید، حتماً ایمیج Docker خود را در یک محیط مشابه تولید تست کنید.