משך: 1.5 שעות אקדמיות (68 דקות).

מטרת השיעור: הסטודנטים יבינו את ההבדל בין Image ל-Container, ויריצו Containers ראשונים בעצמם.

בסוף השיעור הסטודנטים צריכים: להסביר Image מול Container באנלוגיה ל-Class/Object, להריץ Container עם מיפוי פורט, ולהסביר למה Docker פותר “אצלי זה עובד”.

דגש קריטי: פתחו עם “אצלי זה עובד” כתופעה שכל סטודנט כבר חווה או ישמע עליה — זו נקודת הכניסה הרגשית לכל הנושא.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותשאלו: “מי כבר שמע/חווה ‘אצלי זה עובד’?”
הבעיה: סביבות שונות10 דקותגרסאות .NET שונות, תלויות מתנגשות
הרעיון: Image מול Container20 דקותאנלוגיה ל-Class/Object מהיחידה הראשונה
הדגמה חיה: docker run15 דקותhello-world, ואז שרת אמיתי
מיפוי פורטים10 דקות-p host:container, גישה מהדפדפן
תרגול מודרך8 דקותתרגיל 1+2

דגשים להעברת השיעור

  • האנלוגיה ל-Class/Object (Image=Class, Container=Object) היא הגשר הכי מהיר להבנה עבור סטודנטים שכבר עברו את יחידת ה-OOP — נצלו אותה במפורש.
  • ודאו ש-Docker Desktop מותקן ורץ אצל כל הסטודנטים לפני תחילת השיעור — בעיות התקנה הן החסם הכי נפוץ ליחידה הזו.
  • הריצו לפחות Container אחד בשידור חי מהמחשב שלכם — לא להסתפק בתיאור פקודות על שקופית.

מושגים

Image — תבנית קפואה שממנה יוצרים Containers. Container — מופע רץ ומבודד של Image. Isolation — כל Container מבודד, לא מתנגש בתלויות אחרות.


תרגיל חשיבה

שאלת פתיחה: “יש לכם שני פרויקטים על אותו מחשב — אחד דורש .NET 6, השני .NET 8. בלי Docker, איך הייתם פותרים את זה?”

מהלך: תנו לסטודנטים להציע פתרונות — התקנת שתי גרסאות .NET במקביל (מסובך, לפעמים לא אפשרי), או VM נפרד לכל פרויקט (כבד מאוד). הובילו לתובנה: Docker נותן פתרון קליל בהרבה — כל Container מביא את גרסת ה-runtime שלו, בלי להתקין כלום גלובלית על המחשב המארח.

מה המרצה מראה בסוף: אם אפשר, הריצו שני Containers עם תגי גרסה שונים של אותו Image (למשל mcr.microsoft.com/dotnet/sdk:6.0 ו-mcr.microsoft.com/dotnet/sdk:8.0) בו-זמנית, והראו dotnet --version שונה בכל אחד — בלי שום התקנה גלובלית על המחשב המארח.