# מערך שיעור: מה זה Docker📋 מערך מרצה

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

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

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

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

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | שאלו: "מי כבר שמע/חווה 'אצלי זה עובד'?" |
| הבעיה: סביבות שונות | 10 דקות | גרסאות .NET שונות, תלויות מתנגשות |
| הרעיון: Image מול Container | 20 דקות | אנלוגיה ל-Class/Object מהיחידה הראשונה |
| הדגמה חיה: docker run | 15 דקות | 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` שונה בכל אחד — בלי שום התקנה גלובלית על המחשב המארח.
