التحجيم هو تجميع تطبيق وتبعياته ومكتباته معًا بحيث يمكن استخدامها كـ Plug-and-Play على أي نوع من البنية التحتية. يُطلق على كل حزمة اسم حاوية.
لماذا تحجيم خدمة Node.js؟
كما تم مناقشته في القسم السابق، فإن تحجيم خدمة Node.jsستعني تجميع التطبيق وتبعياته ومكتباته، وحتى التكوين في حاوية واحدة.التحجيمله فوائد التالية:
- محمولة.نظرًا لأننا قمنا بتجميع جميع متطلبات التطبيق في حاوية، يمكن تثبيت نفس الصور في التطوير والمرحلة التجريبية والإنتاج.
- سريعة وخفيفة الوزن.تكون الحاويات أسرع بكثير من الآلات الافتراضية (VMs) أو المعدن الخام حيث أنها تعمل فقط على متطلبات التطبيق، بينما تقوم التقنيات التقليدية بتشغيل الآلة بأكملها وجميع التطبيقات.
- مُتطور. مع المزايا المذكورتين أعلاه، يصبح التوسع سهلًا للغاية حيث تكون الحاويات سريعة وفعالة وسهلة التنفيذ.
في هذه المقالة، سنركز بشكل خاص على تحويل تطبيق Node.js إلى حاوية.
المتطلبات الأساسية
الأدوات والبرامج
دوكر (محرك دوكر وواجهة سطر الأوامر لدوكر)
سنحتاج إلى تثبيت دوكر لإدارة حاوياتنا. يتعامل محرك دوكر مع الوقت التشغيلي، ويمكن استخدام واجهة سطر الأوامر للتفاعل.
تثبيت Node.js و npm/yarn (للتطوير/الاختبار الأولي)
سنحتاج إلى تثبيت Node.js و npm لتثبيت تبعيات المكتبات وتشغيل الخدمة.
كوبرنيتيس أو دوكر كومبوز لإدارة عدة حاويات (اختياري)
سنحتاج إلى كوبرنيتيس أو دوكر كومبوز لإدارة عدة حاويات.
الأساسيات
هيكل تطبيق Node.js:
- من المتوقعأن يكونالقارئ على دراية بالفعل بدور الملف الرئيسي (
app.js
أوindex.js
) في المشروع، إلى جانب دور الملفات الأخرى مثلpackage.json
وyarn.lock
. - لن يتطرق هذا المقال أيضًا إلى الجوانب الأخرى للمشروع، مثل وحدات التحكم، الوسائط، و المسارات.
أوامر Docker الأساسية وصياغة Dockerfile
أوامر Docker:
docker ps -> Lists all the containers running on the system
docker pull -> Pulls any image from the docker hub or official registry of Docker
docker build -> Creates an image from the docker file
docker run -> Starts a container from an exiting image
docker stop -> Stops a container if it has crashed or if you want to switch the container
تعليمات Dockerfile الأساسية:
FROM -> Every DockerFile
WORKDIR -> Set the working directory inside the container
COPY (or ADD) -> Transfers the application's files to the image
RUN -> Executes commands during build time
CMD -> Sets the default command to be run when the container is started from the image
EXPOSE -> Specifies the port the container listens on
ENV -> Sets environment variables used during build and runtime
كلا الجدولين المذكورين وهيكل Node.js يكفيان للبدء في الحاويات ونشر خدمة Node.js الخاصة بك.
إعداد خدمة Node.js
إعداد بيئة Node.js عملية بسيطة. تأكد أنك قد قمت بتثبيت Node.js على جهازك. إذا كانت لديك أي شكوك، يرجى الرجوع إلى التذييل (1). بمجرد التثبيت، افتح الـ طرفية الخاصة بك وقم بالتحقق من التثبيت عن طريق كتابة.
node -v
npm -v
أنشئ دليلًا للمشروع وقم بتهيئة الـ مشروعك على النحو التالي:
npm init -y
قم بتثبيت وحدة express
npm install express
أنشئ ملف خادم، دعنا نسميه خادم.mjs, حيث يمكننا إضافة المسار والمنطق الذي يتوافق مع المسار.نظرًا لأن هذه المقالة تتعلق أكثر بالتحجيم، سنحتفظ بمنطق النقطة النهائية بشكل بسيط جدًا. شيء مثل هذا:
import express from "express";
const app = express();
const port = 8080;
app.get('/', (req, res) => {
res.send('Welcome to my demo service!');
});
app.listen(port, () => {
console.log(`Demo Service is running on port ${port}`);
});
الآن خدمتك جاهزة للبدء، انتقل إلى دليل المشروع في الطرفية وقم بتشغيل هذا الأمر:
node server.mjs
الخدمة قد تم تشغيلها؛ إذا زرنا http://localhost:3000، سنرى:
“مرحبًا بك في الخادم الخاص بي”
إنشاء ملف Dockerfile
لن نراجع ما هو ملف Dockerfile، إنه يحتوي على التعليمات لبناء صورة الدوكر. لنقم بإنشاء Dockerfile في الدليل الجذري. خلال هذه الخطوة، كما ناقشنا في تعليمات Dockerfile، نحتاج إلى القيام بالأمور التالية:
FROM node:18-alpine => Indicate the base image to use. Here we're using the official Nodejs 14 image.
WORKDIR /usr/src/app => Sets the working directory in the container.
COPY package*.json ./ => Duplicate the package.json and package-lock.json files to the working directory.
RUN npm install => Installs the app package dependencies.
COPY . . => Copies the remaining of the app to the working directory.
EXPOSE 8080 => Exposes the port our app is listening on.
CMD ["node", "app.js"] => Defines the command to start your Node.js application.
بناء وتشغيل صورة الدوكر
من جذر الطرفية، انتقل إلى مشروعك وقم بتشغيل الأمر التالي:
docker build -t image-name .
حيث يكون image-name
اسم صورة Docker. النقطة .
في النهاية تعيين السياق إلى الدليل الحالي.
بمجرد بناء الصورة، سنقوم بإنشاء الحاوية وتشغيل تطبيق Node.js باستخدام الأمر التالي:
docker run --name container-name -p 8080:8080 image-name
بمجرد نجاح الخطوات السابقة، يمكنك التحقق من تشغيل الخدمة عن طريق تشغيل docker ps
، ثم الانتقال إلى نفس عنوان URL المحلي كما كان مسبقاً.
رفع الصور إلى مستودع
الآن بعد أنصورتك جاهزة، حان الوقت لدفعها إلى سجل. لغرض هذه المقالة، دعنا ندفع فقط إلى Docker Hub. Docker Hub هو خدمة قائمة على السحابة لتخزين ومشاركة وإدارة صور حاويات Docker.
قم بإنشاء حساب على https://hub.docker.com/ وسجل الدخول باستخدام حسابك.
docker login
بمجرد تسجيل الدخول، يمكن إضافة الصور التي تم بناؤها محليًا كما يلي: مثل:
docker tag image-name:tag dockerhub-username/repository-name:tag
حيث:
tag
هو إماlatest
أو رقم إصدار.repository-name
هو اسم المستودع المرغوب فيه.
بعد ذلك، ادفع الصورة كما يلي:
docker push dockerhub-username/repository-name:tag
الخاتمة
كما نلاحظ، تجعل تقنية الحاويات سير العمل والخدمات المعقدة سريعة ومحمولة وقابلة للتوسيع من خلال فصل التبعيات. بمجرد تنفيذها، يستفيد الفريق بأكمله من ذلك.أشجعك على استكشاف الميزات المتقدمةمثل بناء متعدد المراحل وشبكات الحاويات. كما، يُنصح بالتعرف على أدوات التحكم (على سبيل المثال، Kubernetes) ودمج أنابيب CI/CD لتحسين سير العمل التطويري الخاص بك.
المرفق
Source:
https://dzone.com/articles/containerization-of-a-nodejs-service