
wsl --install ויוצרים בתיקיית הבית קובץ 1.txt. echo $$ מציג את מספר התהליך של ה-shell.unshare מפעיל bin/bash חדש עם בידוד של process ID, kill child, בידוד רשת, fork ו-mount proc. בפנים echo $$ מחזיר 1, ו-ps aux ריק. ip address מראה רק loopback, בלי כרטיס eth0 של המחשב.1.txt, כלומר הבידוד אינו כולל מערכת קבצים.my container עם root FS, מורידים image של Alpine (כ-3.5 מגה, כי הוא כולל רק קבצי user land ולא קרנל) ל-tar.gz, ופותחים אותו בתיקייה עם tar.unshare את chroot לתיקיית ה-root ומריצים bin/sh. עכשיו ls / מראה את מבנה Alpine, 1.txt לא קיים, ואי אפשר לצאת החוצה. זו הפצה אחרת על אותו קרנל.exit מחזיר ל-shell האב, שבו 1.txt נראה שוב.wsl --install, unshare, chroot, tar, echo $$, ps aux, ip address.הטקסט המלא של הדקות הראשונות בהרצאה «טכנולוגיה מאחורי קונטיינר Linux Namespaces» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם. היום אנחנו נראה איך עובדים קונטיינרים מאחורי הקלעים. איך אפשר ליצור קונטיינר בצורה ידנית. תראו תוכנה רגילה שרצה יש לה איזשהו מספר סידורי process ID.
בווינדוס אנחנו יכולים לראות process ID ב-Task Manager ב-Details. אתם רואים? יש פה process ID, מספר תהליך במערכת ההפעלה ואם עכשיו אני אפעיל מחשבון נניח calc פה ב-processes הוא קיבל מספר אלף חמש מאות ושתיים עשרה.
אם אני אהרוג את ה-process הזה end ואני אאשר end process תראו הופה המחשבון נעלם מאחורה. אז כל תוכנה שמורצת מקבלת איזשהו process ID.
אבל כשאנחנו מריצים קונטיינר בדומה למכונה וירטואלית בתוך הקונטיינר הוא חושב שהוא process ID אחד. הוא לא מודע לעולם החיצון. במציאות הוא process שלוש במחשב הפיזי, אבל מבחינתו כשהוא מסתכל ב-Task Manager שלו הוא חושב שהוא היחיד בעולם הזה.
הוא לא מסוגל לראות את מה שיש מחוץ ל-namespace שלו. זה feature במערכת ההפעלה שפשוט בונה עולם וירטואלי סביב process מסוים וככה בנו קונטיינר.
בואו נראה את כל זה בפעולה. אני נכנס ל-CMD ואני רוצה לעשות WSL מינוס מינוס install להתקין מכונה וירטואלית של Linux בתוך הווינדוס בעזרת WSL של Microsoft.
זה מובנה בווינדוס. כרגע הוא מתקין לי Ubuntu. אני כותב לו שה-username שלי זה יוני password אני שם ספרה אחת. בואו נראה באיזה מערכת הפעלה אני.
Cat OS release. אני בתוך Ubuntu גרסה עשרים וארבע. קודם כל אני יוצר פה קובץ אחד נקודה TXT ושם לתוכו AAA. עכשיו יש לי בלינוקס הפיזי שלי קובץ אחד נקודה טקסט.
PS aux זה כמו task manager שמראה לי את כל התוכנות שרצות ו-process ID שלהם. process ID מספר אחד זאת מערכת ההפעלה זה האינית. אני רוצה למצוא פה את השל שלנו.
האמת יש טריק יותר פשוט לעשות את זה. אפשר לכתוב Echo דולר דולר ואני רואה שהוא מראה לי שש מאות תשעים. זה שש מאות תשעים הזה זה הבא שלנו. עכשיו אני אראה לכם טריק איך לפתוח bin bash חדש אבל ה-bin bash החדש הזה יפתח על ידי unshare ואני אומר לה לבודד process ID kill child אני אומר לו שיסגר ה-bin bash הזה כל מה שהוא יפתח גם תהרוג אותם, גם תעשה namespace ל-network.
אם לא הייתי עושה את זה הוא היה רואה את כתובת ה-IP של המחשב הפיזי ומינוס מינוס fork אומר תייצר shell חדש ו-mount proc מחביא ממנו את הרשימה של כל ה-processes. זה עושה אותו process מספר אחד בעולם וירטואלי וזה מחביא ממנו את כל האחרים.
שימו לב אני מריץ את זה. זה נראה ששום דבר לא השתנה, אבל מאחורי הקלעים אני כבר בתוך ה-bin bash החדש ואם אני אעשה Echo דולר דולר אני אראה process ID מספר אחד.
יותר מזה ב-PS aux אני אראה שאין אף תוכנה