עצור את ה-Node.js REST API שלך באמצעות טכנולוגיית ה-Containerization של Docker, אשר מפשטת את תהליך הפריסה והניהול.
תהליך הפריסה וההפעלה של יישומים בסביבות שונות יכול להיות טרחה מכיוון שיש מספר גורמים שיש לקחת בחשבון כגון הגדרת משתני הסביבה להגדרת התלות הדרושות וגרסאות ספציפיות של חבילות תוכנה שונות.
עם זאת, על ידי שימוש בטכנולוגיית ה-containerization של Docker, אתה יכול לפרוס יישומים בסביבות שונות במינימום מאמץ עם כל התלות הנדרשת בתמונת docker. כלומר, אינך צריך לדאוג לגבי ביצוע תצורה כלשהי. זה הופך את תהליך הפריסה וההרצה של יישומים בסביבות שונות לנוח.
מה זה דוקר?
דוקר היא פלטפורמת פיתוח המספקת את הכלים והסביבה לאריזת יישומים כתמונות ניידות שניתן להפעיל כרכיבי הפעלה עצמאיים בקונטיינרים.
מיכלים אלו מהווים את הקוד של האפליקציה ואת התלות הנדרשת כדי שהאפליקציה תפעל בהצלחה בסביבות זמן ריצה שונות ללא בעיות.
לפני שתתחיל, התקן את Docker במחשב המקומי שלך. בדוק את הדרישות המוקדמות הספציפיות לפלטפורמה ואת הוראות ההתקנה מהתיעוד הרשמי.
צור Node.js REST API
להתחיל, ליצור שרת אינטרנט של Node.js.
אתה יכול למצוא את הקוד של יישום זה בה מאגר GitHub.
לאחר מכן, התקן את החבילות הנדרשות עבור פרויקט זה.
npm להתקין את morgan pg knex
ה עמ' החבילה משמשת ליצירת חיבור עם מסד נתונים PostgreSQL. knex, מצד שני, מספק API פשוט לאינטראקציה עם PostgreSQL - אתה תשתמש בו כדי לכתוב שאילתות SQL.
לבסוף, אתה תשתמש מורגן, תוכנת ביניים שמתעדת בקשות ותגובות HTTP בקונסולה, כדי לבצע ניפוי באגים ולנטר את האפליקציה שלך הפועלת בקונטיינר של Docker.
לבסוף, פתח את ה index.js קובץ, והוסיפו את הקוד שמתחתיו מיישם REST API פשוט עם שלושה מסלולים.
const express = לִדרוֹשׁ("אֶקְסְפּרֶס")
const מורגן = לִדרוֹשׁ("מורגן")
const app = express()
const db = לִדרוֹשׁ('./db')
const PORT = process.env. PORT || 5000app.use (מורגן('מפתח'))
app.use (express.json())
app.use (express.urlencoded({ מורחב: נָכוֹן }))app.get('/', (req, res) => res.send('שלום עולם!' ))
app.get('/משתמשים', אסינכרון (req, res) => {
const משתמשים = לְהַמתִין db.select().from('משתמשים')
res.json (משתמשים)
})app.post('/משתמשים', אסינכרון (req, res) => {
const משתמש = לְהַמתִין db('משתמשים').לְהַכנִיס({ שֵׁם: req.body.name }).returning('*')
res.json (משתמש)
})
app.listen (PORT, () => לְנַחֵם.עֵץ(`שרת למעלה בפורט:${PORT}`))
הגדר את חיבור מסד הנתונים
REST API יקיים אינטראקציה עם מופע PostgreSQL של Docker, עם זאת, תחילה עליך להגדיר את חיבור מסד הנתונים ביישום שלך. בספריית השורש של תיקיית הפרויקט שלך, צור א db.js קובץ והוסף את הקוד למטה.
const knex = לִדרוֹשׁ('קנקס')
מודול.exports = knex({
לָקוּחַ: 'פוסטגרס',
חיבור: {
מנחה: 'דב',
מִשׁתַמֵשׁ: 'testUser',
סיסמה: 'mypassword123',
מאגר מידע: 'testUser',
},
})
הגדר את קבצי migrate.js ו-seed.js
שני קבצים אלו יאפשרו ליצור טבלה במסד הנתונים ולאכלס אותה בנתוני בדיקה באמצעות ה-API. צור תיקייה חדשה, תסריטים, בספריית השורש של הפרויקט שלך והוסף שני קבצים: migrate.js ו seed.js.
בתוך ה migrate.js קובץ, הוסף את הקוד למטה:
const db = לִדרוֹשׁ('../db');
(אסינכרון () => {
לְנַסוֹת {
לְהַמתִין db.schema.dropTableIfExists('משתמשים')
לְהַמתִין db.schema.withSchema('פּוּמְבֵּי').createTable('משתמשים', (טבלה) => {
table.increments()
table.string('שֵׁם')
})
לְנַחֵם.עֵץ('טבלת משתמשים נוצרה!')
process.exit(0)
} לתפוס (שגיאה) {
לְנַחֵם.log (שגיאה)
process.exit(1)
}
})()
קוד זה יצור א משתמשים טבלה עם עמודת מזהה הגדלה אוטומטית ו-a שֵׁם עמודה במסד הנתונים.
לאחר מכן, ב- seed.js קובץ, הוסף את הקוד למטה:
const db = לִדרוֹשׁ('../db');
(אסינכרון () => {
לְנַסוֹת {
לְהַמתִין db('משתמשים').לְהַכנִיס({ שֵׁם: 'משתמש בדיקה1' })
לְהַמתִין db('משתמשים').לְהַכנִיס({ שֵׁם: 'משתמש בדיקה 2' })
לְנַחֵם.עֵץ('נוספו משתמשי דמה!')
process.exit(0)
} לתפוס (שגיאה) {
לְנַחֵם.log (שגיאה)
process.exit(1)
}
})()
קוד זה מיישם פונקציה אסינכרונית שתכניס שני משתמשים למסד הנתונים PostgreSQL.
לבסוף, הוסף את הפקודות האלה שלך package.json קוֹבֶץ.
"תסריטים": {
"הַתחָלָה": "node index.js",
"להגר": "סקריפטים של צומת/migrate.js",
"זֶרַע": "node scripts/seed.js"
},
מכיוון שאין לך לקוח מוגדר, כדי לבדוק את ה-API, תצטרך להפעיל את שני הקבצים כסקריפטים לצד ריצה npm פקודה.
הגדר Dockerfile
Dockerfile מגדיר את ההוראות הנדרשות על ידי מנוע Docker לבניית תמונת Docker. בספריית הבסיס של הפרוייקט שלך, צור קובץ חדש ושם לו, Dockerfile. לאחר מכן, הוסף את ההוראות הבאות לבניית תמונת Docker עבור היישום Node.js.
מ צוֹמֶת:16.3.0-אלפיני3.13
WORKDIR /app
עותק package*.json ./
לָרוּץ npm להתקין
עותק. .
לַחשׂוֹף8000
CMD [ "צוֹמֶת", "index.js" ]
בואו נפרק את זה:
- מ - הוראה זו מגדירה את תמונת הבסיס עבור האפליקציה, שהיא תמונת Node.js Alpine, גרסה קלת משקל של תמונת Node.js שניתן למצוא ברישום Docker.
- WORKDIR - סטים /app ספרייה בתור ספריית העבודה.
- עותק package*.json./ - מורה ל-Docker להעתיק את כל הקבצים עם פורמט שם הקובץ הזה מהספרייה הנוכחית ל- /app תיקייה.
- לָרוּץ - מבצע ובונה את התמונה.
- עותק.. - מעתיק את קבצי המקור לתוך /app תיקייה.
- לַחשׂוֹף - זה מורה ל-Docker לחשוף יציאה בתוך המכולה לסביבה החיצונית, במקרה זה, המחשב המארח.
- CMD - מציין את הפקודה שתתבצע כאשר הקונטיינר של Docker נוצר מהתמונה.
צור את קובץ Docker Compose
כדי שהיישום Node.js ייצור אינטראקציה עם מופע PostgreSQL של Docker, שני היישומים צריכים לפעול במכולות Docker בתוך אותה סביבת רשת.
מסיבה זו, עליך להגדיר ולבנות גם את תמונת האפליקציה וגם את מופע PostgreSQL באמצעות Docker Compose - כלי המאפשר לך לבנות ולנהל קונטיינרים מרובים של Docker.
במילים פשוטות, באמצעות Docker Compose, אתה יכול להגדיר את השירותים המרכיבים את האפליקציה שלך כיחידה אחת, במקרה זה, ה- Node.js REST API ומסד הנתונים PostgreSQL.
צור קובץ חדש, docker-compose.yml, בספריית השורש והוסיפו את הקוד למטה:
גִרְסָה:'3.9'
שירותים:
שרת:
לִבנוֹת:.
יציאות:
-'5000:5000'
תלוי ב:
-db
db:
תמונה:'פוסטגרס'
יציאות:
-'4321:5432'
סביבה:
POSTGRES_PASSWORD:'mypassword123'
POSTGRES_USER:'testUser'
נפחים:
-data:/var/lib/postgresql/data
נפחים:
נתונים:
קוד זה יצור ויריץ שני קונטיינרים של Docker. המכולה הראשונה, שרת, Docker Compose משתמש ב-Dockerfile כדי לבנות את התמונה עבור מיכל זה.
זה גם מציין שמיכל השרת תלוי ב- db מְכוֹלָה. כלומר, ה שרת יש להתחיל את המיכל לאחר ה db מיכל להתחבר אליו.
הקונטיינר השני הוא מיכל מסד נתונים PostgreSQL. אינך צריך לציין Dockerfile עבור מיכל זה מכיוון שהוא ייווצר מתמונת PostgreSQL ברישום התמונות של Docker.
בנה את תמונות Docker
השתמש בפקודה Docker Compose כדי לבנות את התמונות ולהתחיל את שני הקונטיינרים.
docker-compose up -ד
אתה אמור לראות תגובה דומה לאחר השלמת התהליך בהצלחה.
בדוק את REST API
הפעל את הפקודה למטה כדי לבדוק את REST API הפועל במיכל Docker. זה אמור ליצור טבלה במסד הנתונים של PostgreSQL.
docker exec docker_node-server-1 npm run migrate
אתה אמור לראות תגובה דומה.
שיתוף תמונות Docker
השלב האחרון הוא דחיפת תמונת Docker עבור אפליקציית Node.js שלך ל- Docker Hub. זה דומה לדחיפת הפרויקטים שלך ל- GitHub.
- פנה אל Docker Hub והירשם לחשבון והיכנס ללוח המחוונים של המשתמש.
- לאחר מכן, לחץ על צור מאגר. ספק את שם המאגר שלך והגדר את הנראות שלו לאחד מהם פּוּמְבֵּי אוֹ פְּרָטִי ולאחר מכן לחץ לִיצוֹר.
- כדי לדחוף את תמונת ה- Docker של האפליקציה שלך ל- Docker Hub, תחילה עליך להיכנס לחשבונך דרך המסוף ולאחר מכן לספק את שם המשתמש והסיסמה שלך.
כניסה של docker
- לאחר מכן, עדכן את השם של תמונת Docker שלך כך שתתאים לפורמט הזה:
/ . הפעל את הפקודה למטה כדי לבצע את השינוי הזה:
תג docker /
- לבסוף, דחוף את תמונת ה-Docker שלך.
לדחוף דוקר /< שם מאגר>
שימוש ב-Docker בפיתוח
מדריך זה נגע רק בחלק מהפוטנציאל ש-Docker יכול להציע. עם זאת, כעת אתה יכול להשתמש בטכנולוגיית הקונטיינריזציה של Docker כדי לארוז כל יישום וכל התלות שלה תמונות שניתן לפרוס בפיתוח שונה, כמו גם, סביבות ייצור כמו הענן ללא כל שיהוקים.