
docker build שולח את כל התיקייה הנוכחית לשירות Docker, שבונה את האימג'. לכן עדיף לעבוד בתיקייה ריקה שמכילה רק את הקבצים הנדרשים, ולא בשורש של כונן.-t נותנת לאימג' שם ותגית, ואפשר לתת כמה תגיות באותה בנייה, למשל latest ו-v2. לשיתוף במאגר משותף השם צריך להתאים לשם המאגר.cd בשורה אחת לא נשמר לשורה הבאה.-p.docker run מחליף אותו. בצורת מערך עם סוגריים מרובעים התוכנה רצה ישירות, בלי מעטפת cmd.--no-cache מכריחה בנייה מחדש מלאה.docker history --no-trunc מציג את הפקודות של כל שכבה, docker images -a מציג גם שכבות ביניים, ו-docker run -d -p 80:80 מפעיל את האתר, שנבדק מהדפדפן.docker build -t <שם>:latest . בונה אימג' מהתיקייה הנוכחית. docker ps מציג קונטיינרים רצים, docker stop עוצר קונטיינר, ו-docker rm מוחק אותו. docker exec -it <קונטיינר> cmd פותח מעטפת cmd בתוך קונטיינר רץ.docker run בלי הפרמטר --rm הקונטיינר נשאר במצב stopped, ועם --rm הוא נמחק מיד בעצירה.הטקסט המלא של הדקות הראשונות בהרצאה «DockerFile» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, אחרי שבהרצאה הקודמת יצרנו אימג' משלנו ואני מזכיר לכם לקחנו אימג' מוכן של מייקרוסופט איי-אס הרצנו אותו נכנסנו פנימה הוספנו כל מיני דברים משלנו לדוגמה קובץ אינדקס html שינינו ואחרי שסיימנו לעשות את זה עצרנו את הקונטיינר עשינו לו סטופ והפכנו את הקונטיינר
לאימג' נקרא לעשות קומיט ומאותו הרגע שהוא נהיה אימג' אפשר להפיץ אותו לאחרים ולהפעיל ממנו הרבה קונטיינרים אחרים. ההבדל בין אימג' לקונטיינר שמעל אימג' שמים שכבה של read-right וכל האימג' מתחת הוא ב-read-only ולמעשה קונטיינר זה אותו אימג' עם שכבה נוספת
למעלה של read-right וכשעושים קומיט אז את השכבה של read-right הופכים חזרה לשכבת read-only ומעליה שמים שכבה חדשה. אז כל השכבות האלו זה קבצים בעצם כמו קובץ VHD כזה שיש בפנים הרבה קבצים אחרים.
אז אימג' ממנו יוצרים קונטיינרים ומאותו אימג' אפשר ליצור המון קונטיינרים כמו מאיזו אחד אפשר ליצור הרבה מכונות וירטואליות. רק פה זה הרבה יותר חכם ומשוכלל.
אז ראינו שלקחנו את המיקרוסופט ה-S כאימג' בסיסי, יצרנו ממנו קונטיינר, אחרי זה כיסמנו את הקונטיינר לצרכים שלנו, עצרנו אותו ועשינו לו קומיט, וברגע שעשינו לו קומיט, הפכנו אותו לאימג' משלנו.
נהיה לנו אימג' של פרוג'קט אחד, מקף ה-S. וכך יש לנו אימג' משלנו. ועכשיו, אם אנחנו נריץ פקודה דוקר היסטורי על האימג' שלנו, אנחנו נראה שיש לנו פה שכבה עליונה חדשה שתופסת 25 מגה ואין בה היסטוריה, אי אפשר לדעת בדיוק מה קרה, אנחנו לא יודעים בדיוק איזה פקודה
עשינו ומה עשינו, וזה ממש ממש לא טוב, למה? כי אם יום אחד נרצה לעדכן לשנות משהו אנחנו לא יודעים מה היה, מי הריץ איזה פקודות ולכן אנחנו רוצים לעשות את התהליך הזה של התאמה אישית של קוסטומיזציה בעזרת סקריפט באופן אוטומטי ואז אותו סקריפט אפשר יהיה להריץ שוב ושוב ושוב זאת אומרת נוכל
לקחת את האימייג' הבסיסי של ווינדוס נניח 1809 זה גרסה של ווינדוס הבסיסית ולהריץ עליה עוד ועוד פקודות, בואו אני אראה לכם, בואו נעשה פה מינוס מינוס help, no trunk, no trunk זה אומר להראות את כל הפקודות ואנחנו יכולים לראות באימג'ים, אתם רואים דוקר היסטורי, איזה אימג' no
trunk, אנחנו רואים פה בדיוק מה עשו מייקרוסופט, הם בהתחלה לקחו את האימג' הבסיסי של ווינדוס, שלוש וחצי ג'יגה, אחרי זה עשו פקודה install update והתקינו את ה-update הזה, אחרי זה הם לקחו פקודה cmd/s והריצו cmd שמריץ powershell שמוסיף פיצ'ר של וב סרבר ומריץ
פקודת invoke web server אתם רואים פקודה ראשונה נקודה פסיק פקודה שנייה וinvoke web request לבקש משהו מהווב העבירו לו אותה לינק לservice monitor ורשמו את זה בservicemonitor.exe כך הם שמרו למעשה בתוך אימג' קובץ סרוויס מוניטורי XE שהורידו מאתר של מייקרוסופט של דוטנט.
מה התוכנה הזאת עושה? מה הקובץ XE הזה עושה? עוקב אחרי סרוויס ורק כשהוא עוצר הסרוויס הפרוצס הזה נעצר. למה צריך אותו? שמכונה וירטואלית שהקונטיינר לא יחשוב שאין שום תהליך שרץ, הוא חייב איזשהו תהליך שירוץ ולא ברקע אחרת הוא יוצא החוצה ונסגר.
אז עשו תוכנה שעוקבת אחרי סרוויס ונשארת כביכול תקועה, ה-XE נשאר במצב עובד כל עוד הסרוויס עובד. כי ביי דיפולט קונטיינר ייסגר אם אין לו שום תהליך שהוא אינטראקטיבי שרץ, שרץ בפרונט.
אחרי שהם הורידו את התוכנה הזאת, הם עשו פקודה של Xpose 80. Xpose 80 זה אומר להכריז שאנחנו צריכים לפתוח פורט 80, זה רק הכרזה. אנחנו עוד מעט נדבר על זה ונעשה את זה בעצמנו.
הלאה. אחרי זה הם קבעו entry point, entry point זה מה להריץ כשמישהו מפעיל את ה-image. אז הם מריצים פקודה c.2.servicemonitor.exe, את התוכנת ה-XE הזאת, שתעקוב אחרי סרוויס W3SVC, שזה למעשה תעקוב אחרי הסרוויס של ה-Web.
ואחרי זה שכבה הבאה, מה אנחנו רואים? כלום. למה כלום? כי אף אחד לא יודע מה עשינו. וזאת בדיוק הבעיה שאני רוצה לפתור איתכם. אני לא רוצה להשאיר את זה ככה, אני רוצה להמשיך את האסטרטגיה של לבנות אימייג' משלי בצורת סקריפט מסודר שגם כותב את ההיסטוריה בעמודת comment וגם אם נרצה פעם אחת לעדכן את הסקריפט בעתיד נוכל לעשות את זה בקלות אז
הרעיון שלי זה לא לעשות שכבה כמו שעשינו עד עכשיו שנכנסנו פנימה לתוך הקונטיינר עשינו מה שבא לנו ועשינו על זה קומיד בסוף אלא לעשות את זה על ידי סקריפט שהסקריפט יעשה את אותן הפעולות רק שירשום הכל בתוך הקומנט ותהיה לנו היסטוריה וסדר אז יופי איך אנחנו עושים את זה אז בואו ניכנס לתיקייה שנקראת אפ אחד נניח אתם יודעים מה שתקרא project 1
נעשה md project 1 נכון אז יש לנו תיקיית project 1 cd project 1 נכנסים md is 2 נקרא לו is 2 נכון מה יש לנו docker images יש לנו is, project1 is, עכשיו נקרא לזה is2, cd is2, דיר, אין לנו כלום, אנחנו עושים ככה, נעשה notepad עם שם של קובץ, text.html, סתם דוגמא,
אני סתם נותן לכם דוגמא, אין קובץ כזה ואני אכתוב בפנים 111, בסדר? או שבוא נעשה format h1, אתם יודעים מה, נעשה h1, לא עוד, dockerfile, בוא נעשה ככה, זה נקרא dockerfile דרך אגב,
מה שאנחנו עושים, dockerfile זה הקובץ של הסקריפט. שכחתי להגיד לכם שככה חייבים לקרוא לו dockerfile. אז אני עשיתי פה Hello World from PracticU dockerfile.
יפה מאוד, אז עשינו את זה, שומרים אותו. אתם יודעים מה? בואו נעשה, לא אינדקס נקרא לו, נקרא לו IS start html, נקרא לו ככה, כי זה הקובץ שיושב בפנים.
יופי. עכשיו אנחנו צריכים ליצור קובץ חדש, נקרא לקובץ הזה docker file ככה חייבים לקרוא לו ונעשה פה בנוטפד נכתוב לו פקודות מה זה docker file זה למעשה הסקריפט שבונה לנו את האימג' משלנו איך נתחיל אותו אנחנו חייבים להישמע לפקודות של docker file ובואו נראה איזה פקודות
נפתח דפן ונראה איזה פקודות אנחנו צריכים להכניס אני גם לא זוכר את כל הפקודות בעל פה נכון אז יש לנו פה docker file reference וכתוב פה כאלו הוראות docker can build image automatically by reading the instructions from docker file.
אתם רואים? הוא בונה אימג' באופן אוטומטי על ידי זה שהוא קורא פקודות מתוך docker, קובץ docker. אז זה למעשה סקריפט שבונה לנו אימג', כן?
איזה פקודות. אחרי זה אנחנו נריץ פקודת docker build ונבנה את ה-image. אומרים לו מאיזה תיקייה, התיקייה הנוכחית שלי.
בואו נקרא ביחד מה שכתוב פה, זריז. דוקר פייל, שימו לב, מה שכתוב פה, ש-the build, התהליך של בניית אימג' מתבצע על ידי סרוויס, דיימון, דיימון של דוקר, ולא על ידי CLI, לא הקליינט עושה את זה, עושה את זה השרת.
שימו לב, השרת עושה את זה, יש פה קליינט סרבר, כן? מה שקורה, שדבר ראשון, ששולחים את כל התיקייה הנוכחית, את כל הקונטקסט, כולל תתי תיקיות שלו, לסרוויס.
תיזהרו שאתם לא מפעילים את ה-Docker build בתיקייה M באיזה שורש של איזה R-Disk, שהוא לא ישלח את הכל דרך הרשת לסרוויס, מי שבונה את הכל זה סרוויס, את כל האימג' הזה.
ולכן הם ממליצים להתחיל ב-empty folder, בתיקייה ריקה. זה מה שעשינו איתכם, נכון? עשינו תיקייה ריקה ושמנו כל הקבצים שאנחנו צריכים לאימג' שהיא תהיה קונטקסט.
קונטקסט זה ההקשר של בניית אימג', וזה מאוד חשוב לדעת שהאימייג' נבנה בשרת, וקובץ דוקר עם ההוראות צריך להיות באותה תיקייה. הנה פה הם כותבים אזהרה, אל תשתמשו בתיקיית שורש או בקוננסי בשביל לעשות את זה אחרת, כל הארדיסק יישלח לסרוויס.
אפשר לבנות קובץ שנקרא docker ignore שיתעלם מקבצים מסוימים שיש בתיקייה הנוכחית, יש את זה פה בהמשך למטה, זה פחות חשוב. אני יכול לציין איפה נמצא קובץ docker, דוקר פייל נמצא בתיקייה אחרת זה תיקיות של לינוקס אבל לא משנה גם בווינדוס זה עובד להגיד לו איפה נמצא קובץ דוקר אם הוא לא נמצא בתיקייה נוכחית הלאה t זה tag איזה תגית אנחנו שמים
על האימג' החדש שנבנה שיהיה לו לא רק מספר שיהיה לו תגית יפה אם אני רוצה להעלות אותו לשרת משותף אני חייב לתת את זה לפי הרפוזיטורי שלי לפי השם שלי אתם זוכרים שיש לנו שרת ואנחנו חייבים לקרוא לתיקייה פרקטיקיו סלאש והשם של הריפוזיטורי שלי.
דוקר בילד, הנה בבקשה, t, איזה תגית הם שמים, כן, איזה תגית הם שמים, ועוד תגית, שימו לב, שתי תגיות הם שמים, גם תגית לייטסט וגם תגית ורשן, שתי תגיות באותו בילד, אין בעיה עם זה.
טוב, אנחנו הולכים לראות עכשיו את כל זה, האמת שיש פה הרבה הרבה דברים, איזה פקודות אפשר לעשות. בגדול, בדבר הזה אין כל כך הרבה פקודות. אני אספר לכם סוד, זה יחסית מאוד מאוד פשוט, כי אין בזה הרבה פקודות.
אני רוצה להראות לכם את כל הפקודות ש... הנה בבקשה, פקודת Add שמוסיפה קובץ לתוך ה-Image, שזה למעשה כמו קרופי, קרופי ו-Add אותו דבר, רק Add יודע לפתוח זיפ וקרופי לא יודע לפתוח זיפ.
Environment זה משתנה סביבה בתוך ה-Image, מכירים את זה שאתם כותבים Set, Enter? זה נקרא משתנה סביבה, אני יכול לקבע אותם בתוך אימג' אם נלך לפאורשל ונכתוב סט אנטר.
אוי, צריך בסים די לעשות את זה, סט אנטר. אנחנו רואים את כל משתני הסביבה, לדוגמה, All Users Profiles נמצאים פה, Home Fold נמצא כאן.
למה זה חשוב? כי ככה אני מעביר הוראות לתוכנה כלשהי. נניח יש תוכנה שרוצה לרוץ, אני יכול לשים משתנה סביבה והיא תקרא מתוך משתנה הסביבה הזה משהו שרציתי להעביר לה,