On this page
מערך שיעור: Dockerfile
משך: 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+run | 15 דקות | הריצו על פרויקט ASP.NET Core אמיתי |
| הבעיה: Image שמן מדי | 10 דקות | הראו גודל Image עם SDK מלא |
| הרעיון: Multi-Stage Build | 25 דקות | שני שלבים, COPY –from |
| Cache וסדר COPY | 10 דקות | הדגימו 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). ההבדל בזמן בפועל הוא הלקח.