הקונטיינריזציה היא אריזת יישום, התלויותיו וספריותיו יחד כך שניתן להשתמש בהם כמו פלאג-אנד-פליי על כל סוג של תשתית. כל אריזה נקראת קונטיינר.
למה להקונטיינריז יישום Node.js?
כפי שנדון בקטע הקודם, הקונטיינריזציה של שירות Node.js תהווה אריזת היישום, התלויותיו, הספריות ואף התצורה לתוך קונטיינר אחד.שירות Node.js .הקונטיינריזציה מספקת את היתרונות הבאים:
- נייד. כאשר אנו מקוננים את כל דרישות היישום בתוך קונטיינר, התמונות האלה יכולות להתקין בסביבת פיתוח, בסביבות הבדיקה ו הפקה.
- מהיר וקל. קונטיינרים נמצאים לעיתים קרובות הרבה יותר מהירים ממכונות וירטואליות (VMs) או ממתכת גולמית מכיוון שהם מפעילים רק את דרישות היישום, בעוד שהיסטורית, ה-VMs או המתכת הגולמית היו מפעילים את כל המכונה, ואת כל היישומים.
- נמדד. עם היתרונות שנ"ל, סקאלביליות מתבצעת בקלות מאחר והקונטיינרים מהירים, יעילים וקלים להתקנה.
במאמר זה, נמקד במיוחד ב המרת אפליקציית Node.js לקונטיינר.
דרישות מוקדמות
כלים ותוכנה
Docker (מנוע Docker ו-CLI של Docker)
יהיה עלינו ל התקין Docker כדי לנהל את הקונטיינרים שלנו. מנוע Docker טופל בזמן ריצה, ו-CLI ניתן לשימוש לאינטראקציה דרך שורת הפקודה.
Node.js ו-npm/yarn מותקנים (לצורך פיתוח/בדיקה ראשוניים)
יהיה עלינו להתקין את Node.js ו-npm כדי להתקין את תלות הספריות ולהפעיל את השירות.
Kubernetes או Docker Compose לניהול מספר קונטיינרים (אופציונלי)
יהיה עלינו להשתמש ב-Kubernetes או ב-Docker Compose לניהול מספר קונטיינרים.
יסודות
מבנה של אפליקציית 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
צור קובץ שרת, נקרא אותו server.mjs, שבו נוסיף את הנתיב והלוגיקה המתאימה לנתיב. מאחר שהמאמר הזה עוסק יותר בתחום ה-containerization, נשמור על לוגיקת הנקודת סיום בצורה פשוטה מאוד. משהו בסגנון:
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
משורש הטרמינל, נווט אל הפרויקט שלך והרץ את הפקודה הבאה :
docker build -t image-name .
כאשר image-name
הוא שם תמונת ה-Docker. ה-.
בסוף מציין שהקונטקסט הוא הספרייה הנוכחית.
לאחר שהתמונה נבנתה, ניצור את הקונטיינר ונריץ את אפליקציית Node.js בעזרת הפקודה הבאה :
docker run --name container-name -p 8080:8080 image-name
לאחר שהפעולה לעיל הצליחה, תוכל לאמת שהשירות פועל על ידי הרצת docker ps
, ולאחר מכן ללכת לאותו כתובת URL של localhost כמו קודם.
העלאת תמונות לרג'יסטרי
עכשיו שהתמונה שלך מוכנה, הגיע הזמן לדחוף אותה לרשימה. לצורך מאמר זה, בוא נדחוף רק ל-Docker Hub. Docker Hub הוא שירות מבוסס ענן לאחסון, שיתוף וניהול תמונות של קונטיינרי Docker.
צור חשבון בhttps://hub.docker.com/ והיכנס עם החשבון שלך.
docker login
ברגע שאתה מחובר, תמונות שנבנו מקומית יכולות להתווסף כך: כמו:
docker tag image-name:tag dockerhub-username/repository-name:tag
איפה:
תג
הוא אוהחדש ביותר
או מספר גרסה.שם-מאגר
הוא שם המאגר הרצוי.
בהמשך, דחוף את התמונה כך:
docker push dockerhub-username/repository-name:tag
סיכום
כפי שאנו יכולים לראות, ה-containerization עושה זרימות ושירותים מורכבים מהירים, ניידים ונפתחים על ידי ניתוח התלות. לאחר היישום, כל הצוות נהנה מכך.אני ממליץ לך לחקור את התכונות המתקדמות כגון בניית שלבים מרובים ורשתות של container. כמו כן, שקול ללמוד על כלים לאורכסטרציה (לדוגמה, Kubernetes) ולשלב צינורות CI/CD כדי לייעל את זרימת הפיתוח שלך.
נספח
Source:
https://dzone.com/articles/containerization-of-a-nodejs-service