עזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode
-
כשהתחלתי לשחק עם הnode הכל היה מצויין, אבל כשניסיתי להשתמש בספריה לתקשורת עם ימות בנוד שמתי לב שגירסת הנוד שלי ישנה, ולא ניתן לשדרג באופן רשמי כי אני באובנטו 18.04, וזה כבר לא נתמך. בינתיים לקחתי שרת אחר מעודכן ועליו אני עובד, אבל זה לא פיתרון קבוע מכל מיני סיבות.
הבנתי שבעזרת דוקר אני יכול לפתור את הבעיה הזו, וכן בעיות רבות נוספות (החלפת שרת בהמשך וכו'), ולכן אני מנסה לעבוד עם דוקר
התקנתי דוקר על השרת והרצה של
docker run hello-world
מציגה Hello from Docker!, היינו שדוקר עובד.אבל כעת הסתבכתי ביצירת תמונה שתתאים לפרויקט, לא הבנתי בדיוק איך
כתבתי את הDockerfile הלז
FROM node:latest WORKDIR /app COPY package.json . RUN npm install COPY . . EXPOSE 8080 CMD ["node", "app.js"]
והרצתי
docker build -t my-node-app
וזה התחיל להוריד כל מיני דברים,עד שקיבלתי שגיאה
Sending build context to Docker daemon 2.048kB Step 1/7 : FROM node:latest latest: Pulling from library/node b66b4ecd3ecf: Pull complete 6c641d36985b: Pull complete ddd8544b6e15: Pull complete ae58c7c06d64: Pull complete 5d0523b85d8e: Pull complete c3c98e94c35b: Pull complete 927781e1b0ca: Pull complete b715c27f2c58: Pull complete Digest: sha256:73a9c498369c6e6f864359979c8f4895f28323c07411605e6c870d696a0143fa Status: Downloaded newer image for node:latest ---> fc9a8ab9999e Step 2/7 : WORKDIR /app ---> Running in e3c1cbcc4be8 Removing intermediate container e3c1cbcc4be8 ---> de03e0aebd8b Step 3/7 : COPY package.json . COPY failed: file not found in build context or excluded by .dockerignore: stat package.json: file does not exist
ואז הבנתי, שבעצם אין לי מושג מה אני צריך לכלול בDockerfile כדי שהוא יתאים לי, האם אני צריך להתקין מראש את האקספרס ושאר מודולי הנוד שארצה להשתמש בהם? איך אני מוסיף ועורך את הקבצי js בתמונת הדוקר?
-
@מוטי-מן כתב בעזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode:
ולא ניתן לשדרג באופן רשמי כי אני באובנטו 18.04
נוד תמיד מתקינים חיצונית ולא ממנהל החבילות (זה כדאי גם למשל לmysql, שהמנהל חבילות תקוע עשר שנים אחורה).
ממילא למיטב זכרוני הבעיה הזאת לא קיימת.וזה התחיל להוריד כל מיני דברים,עד שקיבלתי שגיאה
השורות הרלוונטיות הם אלו:
Step 3/7 : COPY package.json . COPY failed: file not found in build context or excluded by .dockerignore: stat package.json: file does not exist
בדוקר שלך כתוב פקודה להעתיק את הקובץ package.json שנמצא באותה תיקיה של הdockerfile אולם הוא לא קיים שמה.
-
@dovid כתב בעזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode:
נוד תמיד מתקינים חיצונית ולא ממנהל החבילות (זה כדאי גם למשל לmysql, שהמנהל חבילות תקוע עשר שנים אחורה).
כמדומני שהשתנו ההוראות בזמן האחרון
כבר לא כךcurl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs
אלא כך
sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg sudo mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg NODE_MAJOR=20 echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list sudo apt-get update sudo apt-get install nodejs -y
כבר לא סקריפט מתקין את זה
או שכוונתך לדרך שלישית?כי בחיפוש מהיר נראה שאמנם יש פתרונות
אבל NODE הרשמי לא נתמך -
@A0533057932 אני טעיתי זה אכן נראה לא נתמך.
כוונתי הייתה שבשתי הדרכים שהראית זה חבילה ממקור חיצוני ולא ממנהל החבילות של אובנטו,
הnodejs של מנהל החבילות הרשמי הוא זה
https://packages.ubuntu.com/focal/nodejs
וזה נדמה לי נוד 10. -
@dovid כעת הצלחתי להתקין נוד נוסף ממנהל חבילות אחר, והוא גירסה 14,שכן תומכת בECMA6, וכעת אני מצליח להריץ את הקוד.
עדיין, אני מעוניין לדעת איך להריץ את זה בדוקר, כי הבנתי שיש לזה עוד כמה מעלות מלבד פיתרון לבעיה המקורית.
הדוקר מותקן ועובד
ubuntu@moti-16-12:/var/www/node$ docker -v Docker version 20.10.21, build 20.10.21-0ubuntu1~18.04.3
המקום שבו הסתבכתי זה בהפעלה/יצירת התמונת דוקר שאותה אני אוכל להריץ, והאם או כיצד היא צריכה להכיל את קבצי הפרויקט, ומה אני עושה אם יש קבצים שמשתנים תוך כדי ריצה, כיצד השינויים נשמרים גם לאחר כיבוי המיכל.
-
@מוטי-מן כתב בעזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode:
המקום שבו הסתבכתי זה בהפעלה/יצירת התמונת דוקר שאותה אני אוכל להריץ,
מה הסתבכת?
והאם או כיצד היא צריכה להכיל את קבצי הפרויקט,
תלוי בצורך, לרוב אתה עושה פשוט copy לבפנים,
כמו פה בשורה 3 שזה מעביר את כל התיקייה
או כמו בשורה 4 אתה מעתיק רק את קובץ app.js,FROM node:18-alpine WORKDIR /app COPY . . COPY app.js app.js RUN yarn install --production CMD ["node", "src/index.js"] EXPOSE 3000
ומה אני עושה אם יש קבצים שמשתנים תוך כדי ריצה, כיצד השינויים נשמרים גם לאחר כיבוי המיכל.
אתה צריך להגדיר Volume תיעוד שבעצם גורם לשיתוף בין תיקייה לוקאלית אצלך, לבין תיקייה בקונטיינר, ואז אם תשמור שם קבצים, זה יישמר לאחרי זה.
-
@צבי-ש כתב בעזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode:
המקום שבו הסתבכתי זה בהפעלה/יצירת התמונת דוקר שאותה אני אוכל להריץ,
מה הסתבכת?
אם אני רוצה להפעיל nodejs שמשתמש במודול כמו אקספרס והספריה לימות המשיח ועוד כמה, איך אני בוחר/יוצר את האימאג' שממנו אריץ את הקונטיינר? זה צריך לכלול רק נוד, או שגם את המודולים שאני רוצה להשתמש בהם?
-
@מוטי-מן כתב בעזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode:
@צבי-ש כתב בעזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode:
המקום שבו הסתבכתי זה בהפעלה/יצירת התמונת דוקר שאותה אני אוכל להריץ,
מה הסתבכת?
אם אני רוצה להפעיל nodejs שמשתמש במודול כמו אקספרס והספריה לימות המשיח ועוד כמה, איך אני בוחר/יוצר את האימאג' שממנו אריץ את הקונטיינר? זה צריך לכלול רק נוד, או שגם את המודולים שאני רוצה להשתמש בהם?
dockerfile הוא הקובץ שאחראי על היצירה.
אתה יכול לציין מפורש בתוכו להתקין מספר ספריות, או להכין מראש קובץ package.json עם הספריות, ואז להכין קובץ כזה למשלFROM node:18 WORKDIR /app COPY package.json /app RUN npm install
אתה נותן לו פקודת COPY
ואחרי שהקובץ בפנים, אתה עושה npm install והוא מתקין את הכל.תוכל גם לעשות ככה למשל
RUN npm install express
בשביל להתקין את express