משך: 2 שעות אקדמיות (90 דקות).

מטרת השיעור: הסטודנטים יכתבו Dockerfile ל-ASP.NET Core API משלהם, כולל Multi-Stage Build.

בסוף השיעור הסטודנטים צריכים: לכתוב Dockerfile בסיסי עם FROM/COPY/RUN, להסביר Multi-Stage Build ולמה הוא מקטין Image, ולנצל נכון את מנגנון ה-Cache.

דגש קריטי: הראו את גודל ה-Image לפני ואחרי Multi-Stage בפועל (docker images) — ההבדל המספרי הוא ההוכחה, לא רק הסבר תיאורטי.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותהזכירו: השתמשנו ב-Images מוכנים, איך בונים משלנו?
הרעיון: Dockerfile בסיסי20 דקותFROM/COPY/RUN, בנייה עם docker build
הדגמה חיה: build+run15 דקותהריצו על פרויקט ASP.NET Core אמיתי
הבעיה: Image שמן מדי10 דקותהראו גודל Image עם SDK מלא
הרעיון: Multi-Stage Build25 דקותשני שלבים, COPY –from
Cache וסדר COPY10 דקותהדגימו build שני מהיר יותר
תרגול מודרך5 דקותתרגיל 1

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

  • ההדגמה החיה של גודל Image (docker images) לפני ואחרי Multi-Stage היא הרגע החשוב ביותר — מספר קונקרטי (למשל “1.2GB → 220MB”) משכנע הרבה יותר מהסבר.
  • סדר ה-COPY (csproj לפני קוד מלא) הוא נקודה עדינה שקל לפספס — הדגימו build שני עם שינוי קוד קטן, והראו שהוא מהיר יותר בזכות ה-Cache.
  • אל תעמיקו מדי בפרטי כל instruction ב-Dockerfile (יש עוד רבים) — התמקדו ב-4 שכבר הוצגו (FROM/COPY/RUN/ENTRYPOINT) ובעיקרון ה-Multi-Stage.

מושגים

Dockerfile — הוראות שלב-אחר-שלב לבניית Image. FROM/COPY/RUN — Base Image, העתקת קבצים, הרצת פקודת בנייה. Multi-Stage Build — הפרדת שלב-בנייה משלב-ריצה, Image קטן יותר.


תרגיל חשיבה

שאלת פתיחה: “אם תעתיקו את כל קוד הפרויקט (COPY . .) לפני dotnet restore — מה קורה לזמן ה-Build בכל פעם ששורת קוד אחת משתנה?”

מהלך: הובילו לתובנה: Docker בונה כל שכבה (instruction) מחדש אם משהו בה או לפניה השתנה. אם COPY . . (שכולל את קוד המקור המשתנה תדיר) מגיע לפני restore, כל שינוי קוד קטן “מפיל” את ה-Cache של restore גם כן — מוריד NuGet מחדש כל פעם, גם כשהתלויות לא השתנו כלל.

מה המרצה מראה בסוף: בנו את אותו Dockerfile פעמיים ברצף עם שינוי קוד קטן ביניהן — פעם עם COPY . . לפני restore (Build שני איטי, מוריד הכל מחדש), ופעם עם הסדר הנכון (Build שני מהיר, restore מגיע מה-Cache). ההבדל בזמן בפועל הוא הלקח.