Docker למתחילים: מה זה Docker וכיצד ליצור מיכלי Docker

אם היית בקשר עם ההתפתחויות האחרונות בעולם התכנות בשנים האחרונות, היית שם לב לזמזום הרם סביב מכולות Docker ו- Docker. הפופולריות הזו של העגינה אינה בלי סיבה. ההקדמה של Docker שינתה במידה רבה את האופן שבו מפתחים ניגשים לפיתוח אפליקציות.

מי רוצה להישאר מאחור כשטכנולוגיה כה מהפכנית פוגעת בעולם התכנות? אז היום אנו מתחילים סדרת הדרכה חדשה שתוכל ללמוד כיצד להשתמש ב- Docker לפיתוח אפליקציות. אם אתה מתחיל מוחלט של Docker, סדרת הדרכה זו היא המקום הנכון עבורך להתחיל.

במאמר הראשון בסדרת ההדרכות שלנו, אנו מחפשים להבין מהו בדיוק דוקר ולמה מפתחים כל כך אוהבים את דוקר. אנו גם עוגן יישום פשוט של Node.js כדי להכיר את המושגים הבסיסיים של Docker.


למה לחכות עוד? בואו נתחיל!



מה זה דוקר

Docker הוא כלי המשמש לבניית יישומים; כלומר ליצור, לפרוס ולהריץ יישומים דרך מכולות.


עם מיכל, כל הספריות ותלות אחרות הנדרשות להפעלת יישום ארוזות כחבילה אחת לפריסה.

המטרה העיקרית של מיכל יישום היא בידודם מיישומים אחרים הפועלים באותה מערכת. גישה זו מבטיחה כי יישומים לא מפריעים לתפעול זה של זה והופכים את תחזוקת היישומים לקלה בהרבה.

אף על פי שמכולות הפועלות באותה מערכת מבודדות זו מזו בביצוע, הן חולקות את אותו ליבת מערכת הפעלה. לפיכך, מכולות קלות יותר בהשוואה לבחירה החלופית לבידוד ביצוע יישומים, מכונות וירטואליות.

יישום מיכל שמופעל במערכת ההפעלה של Windows מובטח שיפעל ללא בעיה במחשב Windows של משתמש אחר למרות שינוי הסביבה.


אף על פי שהמכולות היו בשימוש זמן רב לפני Docker, ההקדמה של Docker הפכה פופולארית באמצעות מכולות בקהילת המפתחים. ישנם שני רכיבים המשמשים לעגול יישום: קובץ Docker ו תמונת דוקר . בואו נגלה מה הם.

קובץ Docker

Dockerfile הוא קובץ טקסט המכיל קבוצת פקודות הנדרשת לבניית תמונת דוקר. Dockerfile מכיל בין היתר מידע על מערכת ההפעלה הבסיסית, השפה, מיקום הקובץ ויציאות הרשת.

תמונת דוקר

כאשר אתה מריץ את פקודת ה- build של דוקר עם קובץ docker במקום, נוצרת תמונת docker על בסיס קובץ ה- docker. הם משמשים כתבניות ליצירת מיכל העגינה הסופי. לאחר יצירתם, תמונות העגינה הן סטטיות. אתה יכול להפעיל את פקודת ההפעלה של Docker כדי ליצור את מיכל העגינה באמצעות תמונת העגינה.



עוגן ליישום Node.js

במדריך זה אנו הולכים לעגון יישום Node.js. אנו נעקוב אחר שלב אחר שלב כדי להפעיל את מיכל ה- Docker.


1 - צור את היישום Node.js 2 - צור את קובץ ה- docker 3 - בנה את התמונה של ה- docker 4 - צור את מיכל היישום

לפני שאתה צולל לעגן את האפליקציה שלנו, עליך לוודא ש- Docker ו- Node.js מותקנים במערכת שלך

  • התקן את Docker במערכת שלך - לא אסקור כיצד להתקין את Docker במדריך זה, אך תוכל לעקוב אחר תיעוד ה- Docker ולהתקין את Docker על שולחן העבודה שלך ב- Windows או ב- Ubuntu.
  • הורד והתקן את Node.js מהאתר הרשמי

צור את היישום Node.js

נווט לספריית הפרויקט החדשה משורת הפקודה והפעל את הפקודה הבאה ליצירת קובץ package.json המכיל מידע על תלות היישום ותסריט ההתחלה.

npm init -y


לאחר מכן, התקן והוסף אקספרס כתלות ליישום שלך על ידי הפעלת פקודה זו בשורת הפקודה. אנו נשתמש באקספרס כדי ליצור את האפליקציה.

npm install express --save

זה יוסיף את הביטוי כתלות ב- package.json שלנו קוֹבֶץ.

כעת אנו יכולים ליצור יישום צומת בעזרת אקספרס.


צור קובץ בשם app.js בספריית הפרויקט והוסף את הקוד הבא לקובץ.

const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(3000, () => {
console.log('Node server has started running') })

הקוד שלעיל יוצר שרת Node שמאזין לבקשות נכנסות ביציאה 3000. ניתן להפעיל פקודה זו בשורת הפקודה כדי להפעיל את שרת הצומת.

node app.js

עכשיו עבור לדפדפן שלך ובצע את כתובת האתר http://localhost:3000 ותראה את הטקסט Hello World! על הדף.

בנינו אפליקציית צומת פשוטה לפרויקט שלנו. עכשיו נעבור ליצירת קובץ ה- dockerfile.

צור את ה- Dockerfile

בקובץ ה- dockerfile אנו מספקים מידע הנדרש לבניית ולהפעלת אפליקציית הצומת שלנו בסביבת Docker.

זה כולל ציון השפה והגרסה שלה המשמשת ביישום, הגדרת ספריית הפרויקטים שלנו כספריית העבודה, העתקת כל הקבצים בספריית העבודה, הגדרת יציאת הרשת, וציין איזה קובץ הוא נקודת הכניסה ליישום. ביישומים מורכבים יותר יהיה עליך להגדיר משתני סביבה ואת כתובת ה- URL של מסד הנתונים גם בקובץ ה- dockerfile.

FROM node:latest WORKDIR /dockerTutorial COPY . . RUN npm install EXPOSE 3000 ENTRYPOINT ['node', 'app.js']
  • מ פקודה מאחזרת תמונת מערכת הפעלה להפעלת היישום שלנו במערכת הפעלה ספציפית, מ- Docker Hub. Docker Hub הוא מאגר של תמונות העגינה שנוכל למשוך לסביבה המקומית. אנו מאחזרים תמונה מבוססת אובונטו שהתקינה את Node.js. השימוש ב'אחרון 'כגרסת ה- Node מושך תמונה שמותקנת בה גרסת ה- Node האחרונה.
  • WORKDIR פקודה מגדירה את ספריית העבודה של היישום.
  • עותק הפקודה מעתיקה קבצים מהספריה הנוכחית (בשורת הפקודה) לספריית העבודה שהוגדרה בשלב הקודם. באפשרותך לציין שם קובץ להעתקה או להשתמש בנקודות נקודה כפולות כדי להעתיק את כל הקבצים בספרייה הנוכחית לספריית העבודה.
  • לָרוּץ הפקודה מתקינה את כל התלות הנדרשת לבניית היישום. זה כולל את כל התלות שצוינה ב- package.json קוֹבֶץ.
  • לַחשׂוֹף פקודה פותחת יציאה ממיכל ה- Docker לעולם החיצון. יציאה זו מקבלת את כל הבקשות שאנו שולחים למכולה של דוקר. יציאה מוגדרת באופן ספציפי ל -3000 מכיוון שהיא היציאה שאפליקציית הצומת שלנו בתוך מיכל הדוקר משתמש בה כדי להאזין לבקשות.
  • נקודת כניסה מציין כיצד להפעיל את היישום. Docker מצטרף למערך שאנו מספקים לפקודה אחת להפעלת היישום. במקרה זה, node app.js.

בניית תמונת הדוקר

השתמש בפקודה הבאה כדי ליצור את תמונת ה- Docker מקובץ ה- docker.

docker build -t docker-tutorial .

Docker-tutorial הוא שם תמונת ה- Docker. הנקודה מציינת את נתיב הקובץ לספריית הפרויקט, שם אנו נמצאים כעת בשורת הפקודה.

אם תמונת מערכת ההפעלה שצוינה עם מ פקודה, צומת: אחרון , כרגע אינו נמצא במכשיר שלך, הוא יושך מ- Docker Hub כאשר תריץ את הפקודה הנ'ל.

לאחר משיכת התמונה, כל פקודה בקובץ ה- dockerfile תבוצע אחת אחת.

בסוף הביצוע, אם אתה רואה את ההודעה נבנה בהצלחה , תמונת העגינה של היישום נבנתה בהצלחה. הפעל פקודה זו כדי לראות את תמונת העגינה הבנויה במאגר התמונות המקומי.

docker images

הפלט נראה כך

יצירת המיכל

כעת אנו יכולים להשתמש בתמונה הבנויה ליצירת מיכל ה- Docker שלנו. השתמש בפקודת ההפעלה של העגינה כדי ליצור את המיכל.

docker run -p 8080:3000 docker-tutorial

כאן, המספרים 8080 ו 3000 מציינים את החיצוני והפנימי של המכולה. יציאה חיצונית, 8080, היא היציאה בה אנו משתמשים כדי להתחבר ליישום דרך הדפדפן שלנו. יציאה פנימית, 3000, היא היציאה שהאפליקציה שלנו מקשיבה לבקשות נכנסות. מיכל Docker ממפה את היציאה החיצונית הנתונה ליציאה הפנימית.

בקר בכתובת האתר http://localhost:8080 בדפדפן ובדוק אם אתה מקבל את הדף עם Hello World! הודעה שקיבלת בעת ביקור http://localhost:3000 לפני. אם כן, מיכל ה- Docker שלך פועל.

אתה יכול להשתמש בפקודה זו כדי להציג את כל מכולות Docker הפועלות במכשיר שלך.

docker ps

הפקודה תיתן לך פלט כזה. אנו יכולים למצוא את CONTAINER_ID ו- NAME של המכולה הפועלת כאן.

הוספת משתנים סביבתיים ליישום שלך

זכור איך הזכרתי יישום עם משתנים סביבתיים דורש הוראות נוספות בקובץ ה- dockerfile? הערך של המשתנה הסביבתי משתנה עם הסביבה בה הם רצים.

שימו לב כיצד הזכרנו במפורש את היציאה שאפליקציית הצומת שלנו מקשיבה לה כאשר השרת פועל. גישה זו אינה גמישה ומועדת לטעויות. במקרה שאנחנו מריצים את היישום שלנו בסביבה שלא פותחת את יציאת 3000 עבור שרת הצומת, היישום שלנו מפסיק לפעול.

היישום המתאים ביותר הוא הוצאת מספר היציאה מהיישום. במקום זאת אנו משתמשים בשם משתנה במקום מספר היציאה וקובעים ערך למשתנה זה בסביבת הריצה. במקרה שלנו, סביבת הריצה היא מיכל ה- Docker. לכן עלינו להוסיף את מספר היציאה לקובץ ה- docker כמשתנה סביבה.

בואו נראה איך אנחנו יכולים לעשות את זה.

ראשית, הוסף את המשתנה הסביבתי לקובץ ה- docker שלנו עם הערך שלו. עלינו להוסיף פקודה חדשה ל- dockerfile כדי להשיג זאת.

FROM node:latest WORKDIR /dockerTutorial COPY . . ENV PORT=3000 RUN npm install EXPOSE $PORT ENTRYPOINT ['node', 'app.js']

באמצעות הפקודה ENV ואחריו שם המשתנה והקצאת הערך, אנו יכולים להוסיף משתנה סביבתי חדש לקובץ ה- docker שלנו. שמת לב כיצד שונתה הפקודה EXPOSE 3000 כך שלא הוזכר במפורש מספר היציאה? במקום זאת, הכוונה היא למשתנה PORT שנוצר כדי לקבל את מספר היציאה המדויק. בגישה זו, אם עלינו לשנות את מספר היציאה, עלינו לשנות רק מקום אחד בקוד שלנו, מה שמקל על היישום שלנו.

כעת שינינו את קובץ ה- dockerfile, השלב הבא הוא שינוי app.js כדי להתייחס למשתנה הסביבה שנוצר. לשם כך אנו מחליפים את מספר היציאה 3000 המשמש בשיטת ההאזנה ב- process.env.PORT.

const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(process.env.PORT, () => {
console.log('Node server has started running') })

מכיוון שביצענו שינויים בקבצי היישום וב- dockerfile שלנו, עלינו לבנות תמונה חדשה עבור מיכל חדש. אך ראשית, עלינו לעצור את מיכל ה- Docker הפועל כעת כדי להשיג זאת.

אנו יכולים להשתמש בפקודה לעצור את העגינה כדי לעצור את המכולה.

docker stop f10

הערך, f10, המשמש בפקודה זו הוא שלוש הספרות הראשונות של מזהה המיכל.

אנו יכולים להשתמש בפקודה, kill docker, כדי לעצור את המכולה הפועלת.

docker kill f10

ההבדל בין הריגת דוקר לתחנת העגינה הוא שעצירת העגינה עוצרת את המכולה בצורה חיננית יותר על ידי שחרור באמצעות משאבים ושמירת המדינה. docker kill, לעומת זאת, עוצר את המכולה בצורה פתאומית יותר מבלי לשחרר כראוי משאבים או להציל את המדינה. עבור מכולה הפועלת בסביבת ייצור, השימוש בבחנת העגינה כדי לעצור את המכולה הוא הבחירה הטובה יותר.

לאחר הפסקת מיכל פועל, הקפד לנקות את השאריות שהשאיר המכולה מסביבת המארח באמצעות הפקודה הבאה.

הפעלת המיכל במצב Daemon

כאשר אתה מנסה להפעיל את הפקודות לעיל כדי לעצור את המכולה, היית שם לב כי לא ניתן להשתמש בכרטיסייה המסוף בה השתמשנו ליצירת המכולה להפעלת פקודות נוספות אלא אם נהרוג את המכולה. אנו יכולים למצוא פיתרון לכך באמצעות כרטיסייה נפרדת להפעלת פקודות חדשות.

אבל יש גישה טובה יותר. אנחנו יכולים להריץ את המיכל במצב הדמון. במצב הדמון, המכולה פועלת ברקע מבלי להשתמש בכרטיסייה הנוכחית כדי להציג יציאות.

כדי להפעיל מיכל במצב הדמון, עליך פשוט להוסיף דגל -d נוסף לפקודת ההפעלה של העגינה.

docker run -d -p 8080:3000 docker-tutorial

הפעלת המיכל במצב אינטראקטיבי

כדי להפעיל מיכל במצב אינטראקטיבי, המכולה כבר אמור לפעול. ברגע שאתה נמצא במצב אינטראקטיבי, אתה יכול להפעיל פקודות כדי להוסיף או להסיר קבצים למיכל, לרשום קבצים או להפעיל פקודות bash אחרות שאנו משתמשים בדרך כלל.

השתמש בפקודה הבאה כדי להפעיל את המיכל במצב אינטראקטיבי.

docker exec -it e37 bash

כאן, e37 הוא מזהה המכולה. שחק עם המצב האינטראקטיבי באמצעות פקודות bash.



סיכום

בהדרכה הראשונה של סדרת ההדרכה של Docker למדת כיצד ליצור מיכל Docker ליישום פשוט של Node.js. אבל אפשר לעשות עוד דברים עם Docker ומכולות. במדריכים הקרובים שלנו, נראה כיצד לעבוד עם מסדי נתונים, אמצעי אחסון ולעבוד עם מיכלים מרובים המשמשים יישום שנבנה עם מיקרו-שירותים.