האם אי פעם נדרשת לך לראות מה קורה בתוך תוך Docker? הקונטיינרים מיועדים להיות idempotent: אם יש בעיה, יש להשקיע מחדש קונטיינר חדש. לעתים קרובות החיים אינם כל כך פשוטים. עליך להריץ פקודות בקונטיינר כדי לזהות את הבעיה. זהו המקום שבו הפקודה docker exec
יכולה לעזור.
מאמר זה ילמד אותך איך להריץ פקודות על קונטיינר Docker פועל באמצעות הפקודה docker exec
.
דרישות מוקדמות
על מנת לעקוב אחר הדוגמאות במאמר זה, יש לך צורך להקפיד על הדרישות הבאות.
- כל גרסה אחרונה של Docker Desktop תפעל על Windows, Linux או macOS. מדריך זה משתמש ב-v3.1.0 הרצה על Windows 10.
התחלת קונטיינר NGINX
פקודת Docker exec
מריצה פקודות בקונטיינרים. אך, על מנת לעשות זאת, עליך להיות קיים קונטיינר לרוץ את הפקודות בו. בואו נתחיל בהורדת תמונת Docker ויצירת קונטיינר דמו.
- צור תיקייה חדשה, מדריך זה משתמש ב- C:\gitrepos\test, להכיל את הקבצים המשמשים לקונטיינר.
2. צור קובץ, שםו dockerfile (ללא סיומת), המכיל את הקוד הבא. ה-Dockerfile מגדיר את השלבים הנדרשים ליצירת מיכל.
3. לאחר מכן, צור קובץ, באותו ספרייה, בשם index.html שמכיל את הקוד הבא. זהו קובץ HTML שבעת התחלת המיכל, יציג הודעת Hello World.
4. עכשיו צור מיכל Docker של Nginx. מכיוון שה-Dockerfile נמצא בתיקייה הנוכחית, ציין .
כדי לעדכן את מנוע ה-Docker לחפש שם. וודא גם לתייג את המיכל עם my-ngnix
באמצעות הפרמטר t
כדי להבטיח הפניה קלה יותר בעתיד.

5. כעת שהמיכל נבנה, התחל את המיכל עם פקודת Docker run.

6. לבסוף, פתח את דפדפן האינטרנט שלך ונווט אל http://localhost/
כדי לראות את הבא.

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

יש להעתיק את ה־ID הייחודי, e17e4b6be01a
, או את השם שנוצר באופן אקראי mystifying_chandrasekhar
ללוח הגזירים שלך לשימוש מאוחר יותר.
הרצת פקודה לא אינטראקטיבית עם Docker Exec
כדי להדגים את הרצת פקודה לא אינטראקטיבית, יש להעתיק ולהריץ את הפקודה הבאה כדי להחזיר רשימת קבצים בתיקיית /var/log עם הפקודה ls -l
. יש להעביר את הכל לאחר שם הקונטיינר, mystifying_chandrasekhar
, לפקודה exec
של Docker.

מניעת פלט מהמסוף עם פקודות Docker
על ידי החזרת בקרת השל כולה מיידית למשתמש, פעולות גדולות מתעלמות מהקשירה של המסוף. עקוב אחרי פלט המסוף עם אפשרות הנפרדת d
. הפקודה למטה יוצרת את הקובץ /tmp/execWorks באמצעות הפקודה touch
בתוך התקן ולא מציגה שום פלט במסוף.
ביצוע פקודות אינטרקטיביות עם Docker Exec
עד כה, למדת כיצד להריץ פקודות לא אינטרקטיביות בתוך התקן Docker עם docker exec
. אך, יתכן שתתמודד בפעם מסוימת עם צורך לאתר בעיות בתוך התקן, לדוגמה, כאשר יש צורך להניח פקודות לתוך התקן באופן אינטרקטיבי. במקרה כזה, יש צורך להריץ פקודות באופן אינטרקטיבי.
הרצת פקודות באופן אינטרקטיבי עם docker exec
מחייבת שני אפשרויות, i
ו־t
. האפשרות i
משמרת את STDIN פתוח, מאפשרת שליחת פקודות לתוך התקן, והאפשרות t
מקצטה נתיב טקסט מוזמן, ערוץ תקשורת, להקלדת פקודות.
העתק והדבק את הפקודה הבאה כדי לפתוח שורת פקודה אינטרקטיבית להתקן Docker הפועל עם המפה (sh) shell, כפי שמצויין בשינוי התרשים ל־/ #
.

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

כדי לפתוח פניה אינטראקטיבית בספרייה מסוימת, עבר את הנתיב לאפשרות ה־
w
וספר ל־Docker להתחיל את המסלול בספרייה מסוימת.
עבר משתני סביבה לתוך התוכנה הרצה
הרבה תוכניות משתמשות במשתני סביבה כדי להגדיר הגדרות בעת התחלת הריצה. לדוגמה, רוב היישומים ב־Java דורשים מהמשתמש להגדיר את המשתנה הסביבתי JAVA_HOME
כדי לקבוע את נתיב ה־Java.
אפשר להעביר משתני סביבה למהלך הרצה באמצעות האפשרות e
. לדוגמה, אולי תרצה למלא משתנה סביבתי בשם MYVAR
לתוך תוכנית משתנה פועלת. כדי לעשות זאת, השתמש באפשרות e
וספק את זוג המפתח/ערך של MYVAR="<ערך מסוים>"
כפי שמוצג למטה.

עברת משתני סביבה עם קובץ
אם יש לך הרבה משתני סביבה או הגדרה משותפת, שמירת המשתנים האלה בקובץ עשוי להיות קלה יותר. עבור את הקובץ באמצעות נתיב יחסי או מוחלט ל־Docker עם האפשרות --env-file
. טכניקה זו נהוגה לספק פרטי הזדהות מאובטחים לתוך תוכנית משתנה. וודא שלעולם לא להכליל פרטי הזדהות בשליטת גרסאות!
צור קובץ טקסט בשם env-vars.txt
עם המשתנים הסביבתיים להעברה וערכיהם. ניתן לקרוא לקובץ כל שמך רוצה והוא אינו דורש את סיומת הקובץ .txt
.

עבור את משתני הסביבה ל־Docker עם האפשרות env-file
. וודא שהמשתנים זמינים בעזרת הפקודה echo
כפי שמוצג בתמונה מטה.

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

nginx
user.שלבים הבאים
למדת כיצד לבצע פקודות בתוך קונטיינר פועל באמצעות פקודת docker exec
. באמצעות הפקודה exec
להיכנס ולחקור קונטיינרים פועלים, יש לך כלי חזק בתיק הכלים שלך כדי לאתר תקלות בקונטיינרים של Docker.
כעת נסו לקחת את מה שלמדתם צעד קדימה ולהשתמש בשליטת גרסאות של Git כדי למשוך אתר אינטרנט סטטי לקונטיינר, במקום להעתיק קובץ יחיד. אם Git הוא מושג חדש עבורך, אז המאמר מדריך מתחילים ל־Visual Studio Code ו־Git הוא מקום נהדר להתחיל.