שימוש ב- Dockerfile לחשיפת יציאות

Using Dockerfile Expose Ports



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

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







ראשית, עלינו ליצור ספריית פרויקטים. בספרייה זו, עליך לשמור את כל קבצי הפרויקט ו- Dockerfile .



הפעל את הפקודה הבאה ליצירת ספריית פרוייקטים myapp/ בספריית HOME של המשתמשים שלך ונווט אליה:



$mkdir~/myapp&& CD~/myapp

הכנת אפליקציית האינטרנט:

כעת צור ספרייה src/ בתוך ה ~/myapp/ ספרייה עם הפקודה הבאה:

$mkdirsrc

בתוך ה src/ הספרייה, כל קוד המקור של יישום NodeJS שלי יישמר.

אני פשוט אצור פשוט app.js הקובץ ב src/ ספרייה והפעל שרת אינטרנט פשוט ביציאה 8080 רק להפגנה.

ה src/app.js הקובץ מכיל את שורות הקודים הבאות:

כתיבת Dockerfile וחשיפת יציאות:

כעת צור א Dockerfile בתוך ה ~/myapp ספרייה עם הפקודה הבאה:

$לגעתDockerfile

כעת הקלד את השורות הבאות אל Dockerfile ושמור אותו. אדון במשמעות השורות הללו בהמשך.

פה, מתוך אלפיני: 3.8 פירושו, השתמש ב אלפיני: 3.8 תמונת Docker כבסיס לתמונה החדשה שנבנה מזה Dockerfile .

עדכון apk של RUN פירושו, הפעל את עדכון apk הפקודה בתמונת Docker הבסיסית אלפיני: 3.8 .

RUN apk add –no-cache nodejs פירושו, הפעל את apk להוסיף הפקודה להתקין את שפת התכנות NodeJS ב אלפיני: 3.8 תמונת בסיס Docker.

COPY ./src /app כלומר, העתק את כל הקבצים מה- ~/myapp/src ספרייה אל /אפליקציה ספריית תמונת ה- Docker החדשה שנבנה באמצעות Dockerfile .

CMD [/usr/bin/node, /app/app.js] פירושו, הפעל את /app/app.js הקובץ מהמיכל החדש באמצעות צוֹמֶת בינארי הממוקם ב /usr/bin/node .

לבסוף, ל EXPOSE 8080/tcp פירושו, לחשוף או לפתוח את יציאת TCP 8080 למחשב המארח.

יצירת תמונת Docker מותאמת אישית באמצעות Dockerfile:

עכשיו בואו נעשה תמונת Docker מותאמת אישית צומת אלפיני: v1 משתמש ב Dockerfile שזה עתה יצרנו.

ראשית ודא שאתה נמצא ב ~/myapp/ ולאחר מכן הפעל את הפקודה הבאה ליצירת תמונת Docker מותאמת אישית שלך צומת אלפיני: v1 :

$בניית עגינהצומת אלפיני: v1.

כפי שאתה יכול לראות, תמונת Docker המותאמת אישית צומת אלפיני: v1 נוצר. תמונת הבסיס וחבילות הבסיס הדרושות נשלפות מהאינטרנט.

כפי שאתה יכול לראות, תמונת Docker המותאמת אישית צומת אלפיני: v1 נוצר בהצלחה.

בדיקת תמונת Docker מותאמת אישית:

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

הפעל את הפקודה הבאה ליצירת מיכל Docker www מ ה צומת אלפיני: v1 תמונת Docker:

$לרוץ docker-d -זה --שֵׁםwww alpine-node: v1

המיכל www נוצר.

כעת בואו לברר את כתובת ה- IP של www מיכל Docker עם הפקודה הבאה:

$docker לבדוק www| אחיזהכתובת

כפי שאתה יכול לראות, במקרה שלי, כתובת ה- IP היא 172.17.0.3 . אז אפליקציית NodeJS שכתבתי צריכה להיות נגישה מדפדפן האינטרנט ביציאה 8080 של כתובת ה- IP הזו.

וואלה! אני יכול לגשת לנמל 8080 שלי www מיכל Docker.

כך בעצם אתה חושף יציאות מסוימות בתמונות Docker המותאמות אישית שלך בהן תבנה Dockerfile .

חשיפת יציאות TCP ו- UDP באמצעות Dockerfile:

בחלק הקודם של מאמר זה, הראיתי לך כיצד לחשוף יציאת TCP באמצעות Dockerfile .

אתה יכול לחשוף בקלות יציאת TCP (נניח יציאת TCP 53 ) ב שלך Dockerfile עם השורה הבאה:

לַחשׂוֹף53/tcp

תוכל גם לחשוף יציאת UDP (נניח יציאת UDP 53 ) עם השורה הבאה שלך Dockerfile :

לַחשׂוֹף53/udp

אתה יכול לחשוף את יציאת TCP ו- UDP במקביל עם השורות הבאות שלך Dockerfile :

לַחשׂוֹף53/tcp
לַחשׂוֹף53/udp

אם אינך מציין באיזה פרוטוקול (TCP או UDP) להשתמש, TCP משמש כברירת מחדל. לדוגמה, אם אתה כותב את השורה הבאה ב- Dockerfile :

לַחשׂוֹף53

אז Docker יניח שאתה רוצה להשתמש ביציאת TCP 53.

חשיפת מספר יציאות באמצעות Dockerfile:

נניח שאתה רוצה ליצור תמונת Docker מחסנית MEAN מותאמת אישית. במקרה זה, תפעיל שרת HTTP ביציאה כלשהי (נניח TCP יציאת 80 או 8080), שרת FTP הפועל ביציאת TCP 21, שרת מסד נתונים של SQL (נניח MySQL) הפועל ביציאת TCP 3306, או שרת מסד נתונים NoSQL (נניח MongoDB) הפועל ביציאת TCP 27017 או 27018, שרת SSH הפועל ביציאת TCP 22. זה הרבה יציאות!

החדשות הטובות הן; תוכל לחשוף כמה יציאות לפי הצורך בתמונת Docker המותאמת אישית שלך שנוצרה באמצעות Dockerfile .

היציאות בדוגמה למעלה יכולות להיחשף עם השורות הבאות ב- שלך Dockerfile :

לַחשׂוֹף80/tcp
לַחשׂוֹף8080/tcp
לַחשׂוֹףעשרים ואחת/tcp
לַחשׂוֹף22/tcp
לַחשׂוֹף3306/tcp
לַחשׂוֹף27017/tcp
לַחשׂוֹף27018/tcp

אם תרצה, תוכל להשאיר את מפרט הפרוטוקול מכיוון ש- Docker משתמש ב- TCP כברירת מחדל ולעשות את אותו הדבר עם השורות הבאות ב- Dockerfile :

לַחשׂוֹף80
לַחשׂוֹף8080
לַחשׂוֹףעשרים ואחת
לַחשׂוֹף22
לַחשׂוֹף3306
לַחשׂוֹף27017
לַחשׂוֹף27018

אם אתה צריך, אתה יכול לערבב יציאות TCP ו- UDP ב Dockerfile . לדוגמה, אם אתה מפעיל שרת DNS (הפועל ביציאת UDP 53), יחד עם הדוגמא לעיל, היית מוסיף את השורות הבאות ל Dockerfile .

לַחשׂוֹף80
לַחשׂוֹף8080
לַחשׂוֹףעשרים ואחת
לַחשׂוֹף22
לַחשׂוֹף53/udp
לַחשׂוֹף3306
לַחשׂוֹף27017
לַחשׂוֹף27018

אז ככה אתה חושף יציאות באמצעות Dockerfile . ללמוד עוד על Dockerfile וחשיפת יציאות באמצעות Dockerfile , קרא את ה Dockerfile מדריך עזר ב https://docs.docker.com/engine/reference/builder/#expose

תודה שקראת מאמר זה.