PracticU

הסבר על Docker Compose - חלק 2

בלי כתוביותעם כתוביות
PracticU › קורס Docker - עם Swarm Cluster › הסבר על Docker Compose - חלק 2
מילון מושגים:
Docker - פלטפורמה להרצת אפליקציות בתוך קונטיינרים מבודדים וקלים, כדי שירוצו באופן אחיד בכל סביבה.
משתנה סביבה - ערך בעל שם שמוגדר במערכת ההפעלה ומשמש תוכנות להגדרות, כמו נתיבים או מפתחות תצורה.
קונטיינר - חבילה קלה ומבודדת שאורזת אפליקציה עם כל תלויותיה, ורצה באופן אחיד בכל סביבה, למשל ב-Docker.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
פורט - מספר שמזהה שירות או תהליך מסוים בתוך מחשב, ומאפשר לכוון תעבורת רשת ליעד הנכון. למשל פורט 80 ל-HTTP.
שירות - תוכנה שרצה ברקע ומספקת פונקציונליות לרכיבים אחרים, לרוב ללא ממשק משתמש, ומופעלת אוטומטית עם המערכת.

הסבר על Docker Compose - חלק 2
בהרצאה הזאת מכירים משתני סביבה ב-Docker Compose, ואיך משתמשים בהם כדי לשנות הגדרות בלי לערוך את כל הקובץ. בהמשך מוצגת הדריסה של הגדרות לפי סביבה, וההבדל בין מצב רצוי לבין הרצה מחדש.
משתני סביבה
1. בדיקה בתוך הקונטיינר: מריצים את הפקודה docker exec עם -it ו-set, ורואים את משתני הסביבה שנכנסו לקונטיינר מתוך הקובץ.
2. קובץ env: אפשר להעביר את המשתנים לקובץ חיצוני בשם .env, שנטען אוטומטית מהתיקייה של הקובץ. בקובץ ה-Compose מציינים את המשתנה בתבנית ${שם}, ולכן שינוי אחד בקובץ ה-env משפיע על כל המקומות.
3. בדיקת התוצאה הסופית: הפקודה docker compose config מציגה את הקובץ אחרי שכל המשתנים הוחלפו, כדי לבדוק לפני ההרצה מה יקרה בפועל.
מצב רצוי ורשת
1. מצב רצוי: Docker Compose משווה את הקובץ למה שרץ עכשיו, ומשנה רק את הקונטיינרים שהשתנו. ההרצאה מדגימה שינוי פורט שמביא לבניית הקונטיינר מחדש בלבד.
2. תקשורת לפי שם שירות: קונטיינרים באותה רשת של Compose מתחברים זה לזה לפי שם השירות, בלי לחשוף פורטים החוצה.
3. Scale: הפקודה docker compose up --scale מגדילה את מספר הקונטיינרים של שירות אחד. ההרצאה מציינת שזה הבסיס לקלאסטרים.
דריסה של קבצים
כשיש קובץ בסיס וקובץ לסביבה מסוימת, docker compose -f מפעיל את שניהם, והקובץ השני דורס או מוסיף הגדרות לראשון. ערך פשוט נדרס, ורשימה כמו פורטים מתווספת. לכן ההרצאה מציגה שהפורט בקובץ השני נוסף לפורט שבקובץ הבסיס.
שימו לב
קובץ env צריך להיות באותה תיקייה שממנה מריצים את הפקודה. ההרצאה מציינת שכשהפקודה רצה מתיקייה אחרת, המשתנים לא נטענים והפקודה נכשלת.
השיעור הבא בקורס: הקמת אתר Wordpress עם Docker Compose

פרקי ההרצאה: הסבר על Docker Compose - חלק 2

  1. 00:00

    חזרה על שירותי Compose ומשתני סביבה

  2. 00:36

    בדיקת משתני הסביבה בתוך הקונטיינר

  3. 03:09

    רשת פנימית ופתרון שמות לפי שם השירות

  4. 04:14

    Desired State: הפעלה והורדה של Compose

  5. 05:04

    פרסום פורטים רק לשירות החיצוני

  6. 07:00

    הרחבת השירות לכמה קונטיינרים (scale)

  7. 09:31

    הוצאת הגדרות לקובץ .env חיצוני

  8. 13:20

    עדכון מצב הקונטיינרים רק לפי השינויים

תמלול ההרצאה: הסבר על Docker Compose - חלק 2

הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על Docker Compose - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    טוב חברים בהרצאה הקודמת אנחנו עצרנו בזה שעשינו docker compose בסיסי ראינו שיש לנו סרוויסים זה השמות שיהיו תכלס לקונטיינרים שירוצו אפשר לציין שהם במפורש עכשיו אני רוצה להראות לכם את המשתנה סביבה הזה איך רואים אותו בפנים שתבינו שזה בתוך הקונטיינר

  2. 00:25

    ואנחנו נתחיל לשדרג את זה וללמוד דברים חדשים ובואו נתחיל נראה קודם כל לגבי משתנה סביבה כי זה מאוד מאוד חשוב שתבינו, כי אנחנו הולכים להשתמש הרבה במשתנה סביבה בדוקר.

  3. 00:41

    אז ככה, קודם כל אני עושה פה right-click ו-open container folder in terminal, נכנס לטרמינל, אתם יודעים, ופה יש לי את הקובץ היחיד הזה, docker-compose, ואני יכול לעשות docker-compose-app-d שיעשה לי את זה מאחורי הקלעים.

  4. 01:03

    הוא בונה לי בעצם את הקונטיינרים לפי ההוראות פה שנתנו, ומה שאני רוצה להראות לכם שבתוך הקונטיינר איך רואים משתנה סביבה, למה זה כזה חשוב שתדעו איך הוא נקרא ואיך רואים אותו, אנחנו רואים שיש לנו פה גוי אחד שזה הגוי הזה ואנחנו רוצים לעשות פה docker exec,

  5. 01:33

    תריץ לי אינטראקטיבית בתוך הקונטיינר שנקרא myregistry.gui1 בתוך הקונטיינר הזה, תריץ לי את ה-bin h, יש לו? אין לו, יש, אני בתוך השל, אני בתוך השל, בפנים, בתוך הקונטיינר ואני עושה סט ואני רוצה להראות לכם שבתוך הסט, בואו נעשה את זה ככה, דורקר אקזק אינטראקטיבית

  6. 02:14

    בתוך האימג', לאן הוא נעלם לי, תראו איזה פשלה, לא יודע מה קרה לו, עוד פעם, נעשה קונטרול אסקייפ, נפעיל אותו בגדול, נעשה פה דורקר אקזק, הנה קונטרול R לחצי כדי לעשות היסטוריה, נעשה עוד פעם של, נעשה פה סט,

  7. 02:40

    והנה שני משתני הסביבה האלו, אוקיי? זאת אומרת, כל פרוצס שנפתח בתוך הקונטיינר רואה את שני משתני הסביבה האלו, ואתם רואים מה כתוב פה, רייג' שהוסט זה רייג', המאגר, שהממשק הגרפי מראה, הוא מתחבר לדאטאבס שנמצא בתוך רייג'יסטרי, אוקיי? זאת אומרת שבפורט 5000, אוקיי? הממשק הגרפי מתחבר לשמה.

  8. 03:09

    אם אנחנו נעשה פינג לרייג', אנחנו נראה שבאמת קיים ריזולווינג, השם הזה הופך ל-IP הזה. למה? כי יש להם רשת נפרדת. אני לוחץ קונטרול PQ ואם אנחנו נעשה docker network ls אנחנו נראה שהוא יצר לנו רשת נפרדת.

  9. 03:35

    על רשתות אנחנו נדבר בנפרד רק רציתי להסביר לכם את הנקודה של ריזולווינג לפי שם של סרוויס וזה דבר גדול בגלל שיש לו רשת נפרדת עם dns נפרד.

  10. 03:49

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

  11. 04:35

    אני עושה פה שנייה ככה קונטרול אסקייפ פותח יפה מאוד עכשיו אם בתוך גוי אני לא אגיד לו איזה פורט שיהיה בחוץ למה כי אני רוצה לעשות הרבה גויים אני רוצה להראות לכם איך אפשר לעשות הרבה גויים אז אני עושה פה סייב ואומר לו תפרסם פורט 80 במה שבא לך זה דבר ראשון דבר שני אני גם לא צריך לציין לו פורט 5000 כלפי חוץ למה לא צריך לציין פורט

  12. 05:09

    5000 כלפי חוץ כי הם נמצאים באותה רשת ולא צריך לפרסם ברג'יסט ריפורט החוצה כי הם באותו לאן אז מספיק לי שכלפי חוץ יהיה מפורסם רק הגוי אימפורט 80 גוי אימפורט 80 שיפורסם החוצה זה יגיע לזה באמצעות הלאן הפנימי גם ככה ושם כל הפורטים פתוחים ולא צריך לפתוח את הפורט הזה החוצה ואז אני עושה כזה דבר אז אנחנו רואים פה את

  13. 05:38

    התקשורת הפנימית אנחנו רואים אימג' ווליום למה דרך אגב ווליום כל פעם שאנחנו משמידים קונטיינר ובונים אותו מחדש האימג'ים לא נעלמים לנו ואומרים לו הIP תחפש דרך הריזולווינג הפנימי יפה מאוד בואו נשמור את הקובץ הזה ככה ונעשה רייט קליק קומפוז אפ הופה הוא כתב במקומי docker-compose-f

  14. 06:06

    את הקובץ up-d עכשיו docker-compose-ps לא רואה את התיקייה כי אני לא בתוך התיקייה שכחתי להיכנס לתיקי המייר רג'יסטרי docker-compose אתם רואים יש לו פה בעיה בממשק הגרפי הזה אני אעשה אחד חדש docker-compose-ps עוד פעם שכחתי להיכנס לתיקי המייר רג'יסטרי דוקר קומפוז פי אס אנחנו רואים שהוא תפס את

  15. 06:53

    הפורט הזה למה עשיתי לו לא פורט קבוע כי אני רוצה להראות לכם איך אפשר לעשות הרבה קונטיינרים עם אותו סרוויס שימו לב כרגע יש לנו אחד ואני מראה לכם גם שהוא עובד וגם כל האימג'ים נשמרים בפנים אתם רואים כל האימג'ים נשמרים בפנים עכשיו תראו מה אני עושה אני מריץ פקודה שאומרת

  16. 07:20

    לו תעשה לי סקייל תעלה לי את כמות הקומפוז אני רוצה להראות לכם את הפקודה הזאת של סקייל, היא מאוד מאוד חשובה, אתם רואים את הסקייל הזה?

  17. 07:41

    Set number of containers for a service, זאת אומרת שאני עושה פה docker compose app ==scale == שם של סרוויז גוי 3. מה זה הגוי הזה? אני מזכיר לכם, גוי זה זה.

  18. 07:56

    תעשה לי שלושה קונטיינרים של גוי, אני רוצה שיהיו שלושה, לא אחד, שלושה. ושימו לב, הוא עשה לי, אוי, שכחתי מינוס d לעשות, ועכשיו, דוקר פי-אס, גם דוקר פי-אס זה אותו דבר.

  19. 08:25

    שימו לב, יש לי פה גוי 3, 2 ו-1, ורק דאטה-בייס משותף לכולם. וכל אחד תפס פורט אחר. בגלל זה הורדתי את הפורטים, כי אחרת הם היו נוטים להודעת שגיאה, כי פורט היה תפוס.

  20. 08:45

    הנה, שימו לב, אני יכול ללכת גם קום 8 ל-9, והנה הוא עובד. אתם רואים, גם 9 עובד, גם 8 עובד. עכשיו, למה אני מראה לכם את זה? בקלאסטרים בדיוק משתמשים בפקודות האלו בגלל זה הן מאוד מאוד חשובות וזה גוי 123 עכשיו אני עושה right click down והכל נעלם מצוין טוב בואו נמשיך הלאה עכשיו אני רוצה להראות לכם מה זה משתנה סביבה נניח נניח אני רוצה את הדבר הזה להוציא

  21. 09:33

    כמשתנה חיצוני כמשתנה סביבה חיצוני למה שאני ארצה לעשות את זה כי נניח שהמספר הזה מופיע בכל מיני הגדרות בכל מיני מקומות אני רוצה לעשות קובץ חיצוני עם כל מיני הגדרות במקום לא לקרוא את כל הקוד הזה עוד פעם את כל ההגדרות לשנות עוד פעם חלק מהגדרות שמשתנות או יכולות להשתנות אני רוצה לשים בקובץ הגדרות חיצוני כדי לא לדפוק בטעות את האימג' טסקריפ שבונה לי

  22. 10:05

    את כל המערכת אתם תראו שיש כאלו דוקר קומפוז ענקיים ואם אני רוצה לשנות משהו אני מפחד שאני אני ארוס את הכל אז אני יכול לעשות קובץ הגדרות חיצוני בואו נעשה קובץ הגדרות חיצוני אני יכול לעשות כל קובץ שבא לי אבל new file אני אעשה קודם כל קובץ ברירת מחדל בואו נעשה ככה בואו נעשה environment.env.env.env זה קובץ הגדרות שבי דיפולט דוקר תופס אותו ואז

  23. 10:49

    אני יכול לשים לו שלדוגמה זה הולך ל-environment פה ואז אני אומר לו המשתנה הזה, זה המשתנה, בוא נקרא לו באיזשהו שם אחר.

  24. 11:12

    אפשר לקרוא לו בכל שם שבא לכם, כן? אני משאיר בדיוק אותו שם, כן? בוא נקרא לו MyEnvironmentVariableForDurkerRegistry. סתם שיניתי לו שם, שתראו שהשם הוא לא קריטי.

  25. 11:33

    ואז אני אומר לו ככה, המשתנה סביבה בשם כזה יקבל ערך מתוך המשתנה שהגדרתי ב-Environment. זאת אומרת יש לי קובץ environment שמגדיר את המשתנה הזה לדוקר ודוקר עם דולר וסוגריים הופך את זה למספר או לערך שיש שמה ומכניס את זה בתוך הקונטיינר לפה, אוקיי?

  26. 12:03

    עכשיו תשאלו אותי בשביל מה אתה עושה את זה? מה אכפת לך לרשום פה פשוט 5000? תחשבו שזה רשום 20 פעם בכל מיני מקומות, אני מפחד להתבלבל. ככה אני עושה שיש לי משתנה עזר בתוך דוקר עצמו, בתוך דוקר קומפוזי יש לי משתנה עזר, דרך אגב זה עובד גם בדוקר פייל, אני לא הראתי לכם אבל גם בדוקר פייל אפשר לעשות משתנים,

  27. 12:29

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

  28. 12:48

    בואו נראה שכל זה עובד באמת, אנחנו עושים פה right-click down, כל ב-down, נעשה right-click up, docker-compose, מינוס f, מינוס d, הכל עבד, ובואו, אה, באיזה פורט זה עבד, אנחנו לא יודעים.

  29. 13:07

    אני אעשה, אה, עכשיו אני רוצה להראות לכם. נניח אני משנה רק את הפורט. נניח אני עושה 80 ל-80, אוקיי? אני רוצה שיהיה 80% 80 בפנים. למה? כי אני לא רוצה את הסיפור הזה שזה פורט לא ידוע, 32,000. עכשיו, שימו לב מה יקרה אם אני אעשה דוקר, קומפוז, אפ, עוד פעם, כאשר הכל גם ככה עובד. עוד פעם,

  30. 13:33

    הכל עובד ואני עושה אפ. שהוא מספיק חכם לזהות את ההבדלים ולבצע רק את השינויים שימו לב הוא לא ייגע בקונטיינר שלא השתנה שינינו רק את הגוי נכון שימו לב רק את הגוי הוא עושה לו ריקריאטינג למה כי הוא זיהה שיש הבדל רק בהגדרות כאן זה נקרא desired state מצב רצוי אני רוצה שהכל יהיה לי כמו בדוקר קומפוז ימל וגם אם אני אשנה משהו הוא מביא אותי למצב הרצוי קונטרול F5 לא עובד למה בגלל הפורט כן עכשיו

  31. 14:15

    הכל עובד לנו מצוין זאת אומרת ראינו איך עובדים עם משתנים אוקיי ראינו שדולר ושם של משתנה איזה שבא לכם אני בכוונה עשיתי אותו שונה במציאות עושים אותם אותו דבר כדי שתבינו זה שם של המשתנה זה בעצם כאן זאת שיטה אחת לעשות environment variables

לקורס המלא: קורס Docker עם Swarm Cluster

ההרצאה הקודמת: הסבר על Docker Compose - חלק 1

ההרצאה הבאה: הקמת אתר Wordpress עם Docker Compose

הרצאות קשורות מקורסים אחרים

  • docker
  • קונטיינר בענן - Cloud Run - הסבר על Docker image

קורסים נוספים במסלול

  • קורס AWS - ניהול מכונה וירטואלית בענן
  • קורס Terraform - DevOps - Azure & AWS
  • קורס קוברנטיקס - Kubernetes
  • קורס DevOps - Ansible
  • קורס PowerShell
  • קורס Git ו-GitHub עם Visual Studio