1 שלב הבסיס

למה Docker — מ-'רץ אצלי במחשב' ל-'רץ בכל מקום'

האפליקציה שה-AI בנה רצה לכם על הלפטופ עם npm run dev או python app.py, אבל ברגע שמנסים להריץ אותה במקום אחר — על מחשב של חבר, על VPS של ארבעה דולר, או דרך Coolify — היא מתפוצצת. גרסת שפה לא נכונה, dependency חסר, OS שונה, או סוד שנשרף לתוך הקוד. בפרק הזה נסגור את הפער הזה: נבין למה זה קורה, מה Docker בעצם פותר, ואיך הוא הופך "רץ אצלי" ל"רץ בכל מקום" — בלי להיכנס ל-Kubernetes, בלי Swarm, ובלי תיאוריית orchestration שלא צריך.

מה תוכלו לעשות אחרי הפרק הזה
לפני שמתחילים
הפרויקט שלכם

לאורך 6 הפרקים של הקורס, אתם הופכים את האפליקציה שה-AI בנה לכם — web app + מסד נתונים — ל-container שרץ זהה בכל מקום: על הלפטופ שלכם, על מחשב של חבר, על VPS, או דרך Coolify עם HTTPS. בפרק הזה: אתם סוגרים את הפער התפיסתי — מבינים למה "רץ אצלי" שבור, מה Docker בעצם עושה, ומה אתם צריכים ממנו (ומה לא). בלי הבסיס הזה, כל פקודה בפרקים הבאים תרגיש אקראית.

מה הלאה: בפרק 2 (התקנה והרצה ראשונה) נתקין את Docker Desktop, נריץ container ראשון מ-image קיים, ונחבר אותו ל-browser דרך port mapping. תוך 20 דקות תראו בעיניים את ההפרש בין "מורידים הוראות התקנה" לבין "מריצים container".

מתחיל 8 דקות קונספט הקדמה

'רץ אצלי במחשב' — הבעיה האמיתית

תרחיש שכל מי שעבד או עבדה עם AI על אפליקציה מכיר/ה: בלפטופ הקוד רץ. npm run dev עולה בשנייה, הדף ב-localhost:3000 נטען, ה-API מחזיר תשובות. הכל ירוק. עכשיו אתם רוצים להעלות את זה לאוויר — ל-VPS של ארבעה דולר בחודש, או לשלוח לחבר שיראה על מה עבדתם. ופתאום:

אלה לא תרחישים היפותטיים. זה המצב ברוב האפליקציות ש-AI בונה. והסיבה שזה קורה היא לא באג ב-AI — זה הפער המבני בין "הקוד רץ אצלי" לבין "הקוד רץ בכל מקום". Docker הוא הכלי שסוגר את הפער הזה — לא בכוח brute force של "תתקין את כל הגרסאות", אלא בכך שהוא אורז את האפליקציה כולה — קוד, גרסת שפה, dependencies, קונפיגורציה — ליחידה אחת ניידת.

ההבטחה של Docker בשפה פשוטה

אם הייתי צריך לסכם את Docker בשני משפטים: Docker לוקח את האפליקציה שלכם ואת כל מה שהיא צריכה כדי לרוץ, אורז את זה לקופסה אחת, ומבטיח שהקופסה הזו תרוץ באותה צורה בכל מקום — על הלפטופ שלכם, על מחשב של חבר, על שרת, או בענן. לא משנה מה ה-OS, מה הגרסה, מה הקונפיגורציה המקומית. אותה קופסה, אותה תוצאה.

זה הופך "works on my machine" — הבדיחה הכי ישנה בהנדסת תוכנה — ממשפט שמסתיר בעיה לעובדה מוגמרת: "works on every machine". וב-2026, עם הכמות של אפליקציות ש-AI בונה לבד, זה הפך מבדיחה לסטנדרט.

מתחיל 7 דקות מספרים מוטיבציה

שלושת הכשלים של אפליקציות AI במספרים

לפני שמדברים על פתרון, צריך להבין את הבעיה במספרים. כל אפליקציה ש-AI בונה סובלת מאותו סט של כשלים סביבתיים — והמספרים מפתיעים:

1. ~82% התנגשויות dependencies

מחקרים של קהילת vibe-coding ו-2026 practical reports (כולל vibe-to-docker style guides) מראים ש-82% מהאפליקציות ש-AI בונה סובלות מהתנגשויות dependencies — חבילה שדורשת גרסה X של ספרייה, בזמן שחבילה אחרת דורשת גרסה Y. על הלפטופ שלכם זה עובד כי ה-AI ניסה, ראה שזה עובד, ושמר את ה-package-lock.json עם הגרסאות הנכונות. אבל ברגע שמנסים להעתיק את הריפו למכונה אחרת — או לבנות image מה-Dockerfile שאותו AI יצר — הקסם נשבר.

2. 60-70% אי-התאמת סביבה

60-70% מהאפליקציות נופלות בגלל אי-התאמת סביבה — גרסת Node/Python שונה, משתנה סביבה חסר (DATABASE_URL שלא הועבר), או ספריית מערכת (system library) שלא קיימת ב-VPS. זה הכשל הכי שקט: על הלפטופ שלכם npm install עובד כי הספרייה כבר מותקנת, ואף אחד לא תיעד את זה ב-package.json. ב-VPS — node: cannot open shared object file או libpython not found.

3. 48% סודות מקובעים בקוד

והנתון המפתיע ביותר: 48% מהאפליקציות ש-AI בונה מכילות סודות מקובעים (hardcoded secrets) — API keys, passwords, connection strings — שנכתבו ישירות בקוד, הוכנסו ל-Git, ועכשיו גלויים לכל מי שיש לו גישה לריפו. זה הכשל הכי מסוכן מבין השלושה, כי הוא לא רק גורם לקריסה — הוא גורם לדליפה. ה-API key שלכם ל-OpenAI או ל-Stripe עלול להיחשף תוך שעות.

בדיוק מה ש-Docker סוגר

שלושת הכשלים האלה הם בדיוק מה ש-Docker נועד לפתור — כל אחד מהם בצורה שונה:

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

מתחיל 9 דקות השוואה ארכיטקטורה

container מול Virtual Machine — למה זה משנה לכם

הרבה אנשים שמתחילים עם Docker חושבים שהוא "Virtual Machine קל". זו אחת הטעויות הראשונות שמייצרות בלבול, ולכן חשוב לסגור אותה כאן.

מה זה Virtual Machine (VM)

מכונה וירטואלית היא בעצם מחשב שלם שרץ בתוך המחשב שלכם — עם מערכת הפעלה אורחת משלה (guest OS): Ubuntu על Windows, או Red Hat על Mac. כדי להריץ VM צריך שכבה שנקראת hypervisor (כמו VirtualBox, VMware, או Hyper-V), שמדמה חומרה וירטואלית ל-OS האורח. ה-OS האורח לא יודע שהוא "בתוך" משהו; הוא חושב שהוא מחשב אמיתי. בגלל זה כל VM:

מה זה container

container, לעומת זאת, חולק את ה-kernel של מערכת ההפעלה המארחת. ה-kernel (הליבה של ה-OS — מה שמדבר עם החומרה) הוא של המכונה שעליה רץ ה-container. מה שבתוך ה-container זה רק שכבה דקה של מערכת הפעלה (root filesystem) + האפליקציה + ה-dependencies שלה. בגלל זה כל container:

ההשוואה בטבלה

הנה ההבדל במבט-על:

מאפיין Virtual Machine container
גודל GB (3-10 GB ומעלה) MB (10-500 MB)
זמן הרצה דקות (30 שנייה עד 5 דקות) שניות (אלפיות שנייה עד 2-3 שניות)
מערכת הפעלה OS אורח שלם (Ubuntu, Red Hat, Windows) שיתוף kernel של המארח; רק rootfs דק
ריצוץ (density) 10-15 VMs על שרת בינוני 100-200 containers על אותו שרת
שימוש טיפוסי הפרדה חזקה, legacy, סביבות מעורבות אפליקציות מודרניות, microservices, CI/CD
הרצה על לפטופ דורשת זיכרון רב ומעבד חזק רץ בקלות גם על מחשב ישן

למה זה משנה ל-Vibe Coder

המספר שכדאי לזכור: אותו שרת שמחזיק 10-15 VMs מחזיק 100-200 containers. זה לא תאוריה — זה המצב בפועל. ב-VPS של 4-6 דולר בחודש (Hetzner, DigitalOcean, Vultr, Contabo), אתם יכולים להריץ את האפליקציה שלכם + מסד נתונים + cache (Redis) + reverse proxy — הכל בתוך containers נפרדים, על אותה מכונה. אם הייתם צריכים VM לכל אחד מהם, הייתם צריכים 3 שרתים. זה ההבדל בין $4 לחודש לבין $20 לחודש — רק בגלל הארכיטקטורה.

בנוסף, containers זולים יותר בזיכרון. הם לא מריצים OS כפול, הם לא טוענים kernel נפרד, הם לא צריכים hypervisor. זה אומר שאתם יכולים לפתח ולבדוק את האפליקציה על הלפטופ שלכם, בלי לחימום המחשב ובלי לחכות דקה ל-boot של VM.

ברגע שההבחנה הזו ברורה, רוב הפחד מ-Docker נמוג: זה לא "מכונה וירטואלית שצריך להגדיר", זה תהליך שמקבל מעטפת קלה ומובטחת. בפרק 2 תראו את זה בעיניים: container של nginx (שרת web פשוט) עולה בפחות משתי שניות, ומגיש דף ב-browser תוך שלוש.

מתחיל 10 דקות ההבחנה המרכזית foundation

image מול container — ההבחנה שמסדרת את כל הקורס

אם הייתי צריך לבחור רק הבחנה אחת שתישאר איתכם לכל 6 הפרקים, זאת היא: image ≠ container. שני המושגים האלה נשמעים דומים, הם מופיעים באותו תחום, ורוב האנשים מערבבים ביניהם. ברגע שתנעלו את ההבחנה, כל פקודה בהמשך תהיה הגיונית.

image = המתכון הקפוא

image הוא קובץ קפוא, read-only (לקריאה בלבד), שמכיל את כל מה שצריך כדי להריץ את האפליקציה שלכם: מערכת הפעלה בסיסית (למשל Alpine Linux או Debian slim), גרסת שפה (Node 20, Python 3.11), dependencies מותקנים, קוד האפליקציה עצמו, והגדרות ברירת-מחדל. ה-image הוא בדיוק כמו קובץ התקנה של תוכנה (חושבים על .dmg במק או .exe בחלונות) — קובץ סטטי שאפשר לשמור, להעתיק, להעלות, להוריד.

הוא נוצר פעם אחת, מ-Dockerfile (קובץ טקסט של הוראות בנייה — נלמד בפרק 3), על-ידי הפקודה docker build. אחרי שהוא נוצר, הוא לא משתנה. אי אפשר "לערוך" image; אפשר רק לבנות גרסה חדשה ולשמור את הישנה.

container = התבשיל הרץ

container הוא מופע רץ של image. כשאתם כותבים docker run myapp:latest, Docker לוקח את ה-image של myapp, יוצר ממנו שכבת כתיבה דקה (writable layer) מעליו, ומריץ את התהליך הראשי שלו. זה ה-container.

מ-image אחד אפשר להריץ כמה containers שרוצים, במקביל. כל אחד מהם מקבל מקום משלו בזיכרון, ב-CPU, ברשת. הם לא רואים את הקבצים של השני (אלא אם כן מחברים ביניהם ב-volume או network — נלמד בפרק 4).

אפשר להריץ, לעצור, למחוק container בלי לפגוע ב-image. זה כמו להריץ תוכנה ולסגור אותה: התוכנה עדיין מותקנת, אבל המופע הספציפי שלה נעלם. אם תמחקו container, ה-image נשאר. אם תמחקו image, כל ה-containers שנוצרו ממנו מאבדים את הבסיס שלהם (אלא אם כן דחפתם את ה-image ל-registry קודם).

טבלת ההשוואה המסכמת

image container
קובץ קפוא, read-only מופע רץ, עם שכבת כתיבה
נוצר על-ידי docker build נוצר על-ידי docker run
אפשר לשמור, להעתיק, לדחוף ל-registry חי עד שמכבים או מוחקים
מכיל: OS + שפה + deps + קוד מריץ תהליך אחד (או יותר) מהקוד שב-image
אנלוגיה: מתכון בספר בישול אנלוגיה: התבשיל הרותח במחבת

למה ההבחנה הזו קריטית לקורס

בפרק 3 תלמדו docker build — זה יוצר image. בפרק 3 גם תלמדו docker run — זה יוצר container. בפרק 5 תכתבו compose.yaml שמגדיר כמה services (כלומר: כמה containers שרצים ביחד). בפרק 6 תדחפו image ל-registry ותמשכו אותו על שרת. אם תבלבלו בין המושגים, כל פקודה תרגיש כמו כישוף. אם ההבחנה ברורה, הכל מתיישר.

הסימן הראשון שמישהו מתבלבל: הוא אומר "הרצתי image של postgres" כשהוא בעצם הריץ container. או "מחקתי את ה-image הזה" כשהוא בעצם עצר container. שימו לב לעצמכם. תרגישו נוח לחזור לסעיף הזה בכל פעם שמשהו לא מסתדר.

מתחיל 4 דקות אנלוגיה עוגן מנטלי

האנלוגיה שתישאר לכם — class ו-instance

אם אתם מכירים תכנות, ההבחנה הזו דומה מאוד ל-class מול instance: ה-image הוא ה-class (ההגדרה, התוכנית), ה-container הוא ה-instance (האובייקט החי בזיכרון). אפשר ליצור מ-class אחד כמה instances. שינוי ב-instance לא משפיע על ה-class. מחיקת instance לא מוחקת את ה-class.

אם אתם לא מכירים תכנות, הנה אנלוגיה שעובדת לכולם: ה-image הוא כמו תבנית אפייה (קאקל). התבנית עצמה היא לא עוגה. היא קפואה, לא רואים אותה במקרר. אבל ברגע שלוקחים תבנית, שופכים בצק, ושולחים לתנור — יוצאת עוגה. זה ה-container: תהליך חי, רץ, שאפשר לאכול (או להפעיל). אפשר להשתמש באותה תבנית כמה פעמים — כל פעם עוגה אחרת. אם העוגה נשרפה, זורקים אותה — התבנית נשארת שלמה לעוגה הבאה.

או באנלוגיה קרובה יותר לעולם התוכנה: image = קובץ התקנה צרוב (.iso, .dmg), container = התוכנה שרצה אחרי שהתקנתם אותה. את קובץ ההתקנה אתם שומרים במחסן; את התוכנה אתם מריצים, סוגרים, ומריצים שוב. מחיקת התוכנה לא מוחקת את קובץ ההתקנה.

העוגן המנטלי הזה יעזור לכם בכל פעם שתתבלבלו: "אני בונה image? או מריץ container? מה אני עושה עכשיו?"

מתחיל 5 דקות פקודות hands-off preview

איזו פקודה עושה מה — היכרות בלי להריץ

בפרק 2 נריץ פקודות. בפרק 3 נריץ הרבה יותר. אבל כבר עכשיו שווה להכיר את שתי הפקודות הבסיסיות שתשתמשו בהן יותר מכל:

docker build — מייצר image

docker build לוקחת Dockerfile (קובץ טקסט שמכיל הוראות בנייה) ויוצרת ממנו image. ה-image נשמר במחסן המקומי של Docker על המכונה שלכם. בסוף הבנייה תקבלו image עם "tag" (תווית), למשל myapp:v1 או myapp:latest. ה-tag הוא בעצם השם שאתם נותנים ל-image, והוא מה שתצטטו אחר כך כשתריצו container.

בפרק 3 תכתבו Dockerfile בפעם הראשונה, ותראו איך docker build -t myapp:v1 . הופך 20 שורות של הוראות ל-image בגודל 200 MB שאפשר להריץ בכל מקום.

docker run — מתחיל container

docker run לוקחת image (או מושכת אותו מ-registry אם הוא לא מקומי) ויוצרת ממנו container רץ. ברירת המחדל: רץ ב-foreground, מדפיס את הפלט שלו לטרמינל שלכם, ונחסם עד שה-container יסתיים. אפשר להריץ ברקע (-d, מ-detach), לחבר פורטים (-p 8080:80), להעביר משתני סביבה (-e KEY=value), ועוד.

הדוגמה הכי קלאסית להראות את Docker עובד בפעם הראשונה: docker run -p 8080:80 nginx. זה אומר ל-Docker "תמשוך את ה-image של nginx מ-Docker Hub (אם עוד לא משכת), תיצור ממנו container, ותחבר את פורט 8080 במכונה שלי לפורט 80 בתוך ה-container". תוך שלוש שניות, אתם פותחים http://localhost:8080 בדפדפן ורואים את דף הברירת-מחדל של nginx. זה הרגע שבו "Docker" הופך ממילה מפחידה למשהו שרץ לכם מול העיניים. פרק 2 יוקדש כולו לרגע הזה.

הפקודות שתכירו בהמשך (לתזכורת)

רק כדי שתרגישו את ההיקף — בקורס הזה תפגשו את כל הפקודות האלה, ועוד:

בפרק 2 נלמד את הראשונות מתוכן. בפרק 5 את המרכזית של הקבוצה (compose). בפרק 6 את ההעלאה ל-registry. אין צורך לשנן עכשיו — רק לדעת שהפקודות האלה קיימות ושיש לכן סדר הגיוני.

מתחיל 4 דקות תקן portability

OCI — התקן הפתוח שהופך את ה-image לנייד

אחת השאלות הכי טבעיות אחרי "מה זה image" היא: "למה ה-image שלי ירוץ בכל מקום, ולא רק ב-Docker?" התשובה היא OCI — Open Container Initiative.

OCI הוא תקן פתוח (כמו HTML או PDF) שמגדיר איך image נראה ואיך runtime של container צריך להריץ אותו. הוא נוצר ב-2015 על-ידי Docker ושותפים (CoreOS, Red Hat, Google, Microsoft ועוד), ומאז הוא הסטנדרד של כל כלי ה-container המודרני: Docker, Podman, containerd, CRI-O, ועוד. זה אומר שכלי אחד יכול לבנות image, וכלי אחר לחלוטין יכול להריץ אותו.

ההשלכה המעשית: אתם לא נעולים על Docker. ה-image שלכם ירוץ גם על Podman (חלופה daemonless), גם על containerd (רכיב הליבה של Kubernetes), גם על כל ענן שתעלו אליו. זו לא טכנולוגיה קניינית של Docker; זה תקן בינלאומי.

ב-2026, אחרי שה-OCI התבסס, בנייה של multi-platform image (אותו image שרץ גם על Mac שלכם עם שבב M-series וגם על VPS עם מעבד amd64) היא פעולה סטנדרטית, לא תכנון מוקדם. תוצר הלוואי היחיד שכדאי להכיר: המונח OCI manifest list — רשימה של גרסאות ה-image לארכיטקטורות שונות, שה-registry שומר ושהמכונה המושכת בוחרת ממנה אוטומטית. זה מה שמאפשר לכם לדחוף image אחד שעובד בכל מקום. נחזור לזה לעומק בפרק 6.

מתחיל 5 דקות registry הגשר לשרת

registry — הגשר מהלפטופ לשרת

עד עכשיו דיברנו על המכונה המקומית שלכם. אבל ההבטחה האמיתית של Docker היא "רץ בכל מקום" — וה-"בכל מקום" הזה כולל גם שרתים. איך מעבירים image מהלפטופ לשרת? באמצעות registry — מחסן של images ברשת.

registry הוא בעצם GitHub של images: שרת מרכזי שאליו אתם דוחפים (docker push) וממנו אתם מושכים (docker pull). כל מכונה שיש לה Docker יכולה לדבר עם registry: לדחוף, למשוך, להריץ.

שני registries שתכירו

יש שני registries שכדאי להכיר כבר עכשיו, כי הם הרלוונטיים ביותר ל-Vibe Coder:

איך זה עובד בפועל

התהליך ייראה בערך כך בפרק 6:

  1. על הלפטופ: אתם בונים image מקומי: docker build -t myapp:v1 ..
  2. על הלפטופ: אתם נותנים ל-image tag נוסף שמצביע על registry: docker tag myapp:v1 ghcr.io/your-username/myapp:v1.
  3. על הלפטופ: אתם נכנסים ל-registry ודוחפים: docker push ghcr.io/your-username/myapp:v1. ה-image עכשיו בענן.
  4. על השרת: אתם נכנסים ב-SSH, מושכים את ה-image, ומריצים: docker pull ghcr.io/your-username/myapp:v1 && docker run -d -p 80:3000 ghcr.io/your-username/myapp:v1. האפליקציה רצה.

זה הכל. אין קסם, אין deploy מורכב. ה-image הוא האריזה; ה-registry הוא המעבורת; השרת הוא היעד. בפרק 6 נעבור את התהליך הזה צעד-צעד, כולל הבעיות הקלאסיות שעולות בדרך (image שלא רץ בגלל ארכיטקטורה שונה, למשל).

מתחיל 5 דקות scope גבולות

מה Vibe Coder צריך מ-Docker — ולמה זה מספיק

Docker הוא עולם גדול. אם תחפשו בגוגל, תמצאו 200 מאמרים על Kubernetes, 100 על Swarm, 50 על CI/CD, 30 על service mesh. כל זה לא בשבילכם — לפחות לא בקורס הזה.

ה-Vibe Coder צריך בדיוק ארבעה דברים מ-Docker, וכל הקורס מתמקד בהם:

  1. לארוז אפליקציה אחת (או שתיים, אם יש גם מסד נתונים) לתוך image שאפשר להריץ בכל מקום. זה מה שפרק 3 ילמד אתכם.
  2. לשמר נתונים שלא נעלמים כשה-container נכבה — במיוחד במסד נתונים. זה מה שפרק 4 (volumes) ילמד.
  3. להעביר config ו-API keys ב-runtime — בלי לאפות סודות לתוך ה-image. נלמד בפרק 4 גם כן (env vars ו---env-file).
  4. להריץ את ה-image על שרת אמיתי — ידנית עם SSH או דרך Coolify, עם HTTPS אוטומטי. זה מה שפרק 6 יסגור.

זה הכל. ארבע יכולות. שישה פרקים. בלי הרבה תיאוריה, בלי הרבה ארכיטקטורה, בלי microservices-32. אפליקציה אחת, ארוזה טוב, רצה בכל מקום.

למה ה-scope הצר הזה עובד

הרבה אנשים שמתחילים עם Docker נכנסים למלכודת של "ללמוד הכל". הם קוראים על Kubernetes, מנסים להבין איך replicas עובדים, מתקינים Helm, מסתבכים, ומוותרים. זה קורה כי הם פתרו בעיה שהם לא צריכים לפתור.

הגישה של הקורס הזה הפוכה: להתחיל מהבעיה האמיתית שלכם (אפליקציה אחת שצריכה לרוץ ביותר ממקום אחד), לבנות בדיוק מה שצריך, ולעצור. אם תרצו Kubernetes בעוד שנתיים כשיש לכם 50 services — מצוין, יש קורסים מצוינים לזה. אבל עכשיו, 4 היכולות למעלה הן מה שמשנה.

מתחיל 4 דקות anti-scope הפחתת רעש

מה מחוץ ל-scope — ולמה זה בסדר גמור

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

Kubernetes — לא בשלב הזה

Kubernetes הוא מערכת לניהול אלפי containers במקביל, עם auto-scaling, healing, rolling updates, ועוד עשרות יכולות. זה לא רלוונטי לאפליקציה אחת. אם יש לכם אפליקציה אחת שרצה על שרת אחד — Kubernetes הוא כמו להזמין משאית 18 גלגלים להסעת סלולרי. אפשר, אבל זה לא מה שעושים.

Docker Swarm — הוצא משימוש בפועל

Docker Swarm היה ניסיון של Docker לעשות תחליף קל ל-Kubernetes. ב-2026, הוא כמעט לא בשימוש. אם תראו מדריך ישן שמציע "לעבור ל-Swarm בשביל קנה-מידה" — תדעו שזה מדריך מ-2018. האלטרנטיבה המודרנית היא או Kubernetes (לקנה-מידה גדול) או פשוט docker compose (לקנה-מידה קטן). אנחנו בקטגוריה השנייה.

service mesh, sidecars, distributed tracing

אלה כלים למערכות מבוססות-microservices, שבהן עשרות services מדברים ביניהם וצריך לעקוב אחרי הזרימה. לא רלוונטי כשיש לכם service אחד או שניים. גם אם האפליקציה שלכם תגדל בעתיד, הקפיצה ל-service mesh תגיע אחרי שיש לכם לפחות 5-10 services נפרדים, ואתם סובלים מבעיות של מעקב ואבטחה. לא לפני.

CI/CD מתקדם

יש הבדל בין "להריץ image על שרת" (זה כן בקורס, פרק 6) לבין "בנייה אוטומטית בכל push, deploy אוטומטי, rollback אוטומטי" (זה לא בקורס). בקורס הזה תדחפו image ידנית לאחר בנייה, ותריצו deploy ידני או דרך Coolify שעושה חצי מהעבודה בשבילכם. CI/CD מלא (GitHub Actions + deploy אוטומטי + staging environments) הוא קורס נפרד, ומגיע אחרי שיש לכם את הבסיס.

הסיבה העמוקה: scope creep הורס קורסים

הסיבה שהרבה קורסי Docker נכשלים: הם מנסים ללמד את הכל. הם מתחילים ב-"מה זה container", ותוך 3 פרקים מדברים על overlays, CNI plugins, ו-cgroup v2. באמצע הפרק 4 הלומד מרגיש אבוד, ובפרק 6 הוא כבר לא שם.

הקורס הזה נשבע לא ללכת לשם. אם תסיימו את 6 הפרקים ותרגישו שאתם יודעים לארוז אפליקציה אחת ולהריץ אותה בכל מקום — עשינו את שלנו. אם תרצו יותר, יש 6 קורסי-המשך טבעיים (production, scale, security, observability, CI/CD, multi-cloud). אבל זה אחר כך.

מתחיל 3 דקות מבט קדימה motivation

מבט קדימה — איך image הופך ל-cornerstone של deploy

ה-mental model של image-זה-האריזה, container-זה-הריצה, registry-זה-המעבורת — הוא לא רק "עוד דרך להריץ אפליקציה". זה הבסיס לכל מה שתעשו ב-2026 בעולם ה-deploy: ה-image הוא הנכס היחיד שעובר בין הלפטופ לשרת לענן.

כשתגיעו לפרק 6, התהליך ייראה כך: בונים image מקומי → דוחפים ל-registry → שרת מושך ומריץ. אם תרצו HTTPS — Coolify מוציא תעודה אוטומטית דרך Let's Encrypt. אם תרצו לעבור ספק ענן — מושכים את אותו image מאותו registry, בלי שינוי. אם תרצו rollback — מחזירים tag ישן (v0.9 במקום v1.0), בלי לבנות מחדש.

זה ה-cornerstone של קורס ה-production שיבוא אחרי זה. הרבה מהדברים שמסבירים בקורסי production (rolling updates, blue-green, canary) בנויים על ההנחה שיש לכם image שאפשר לתייג, לדחוף, ולהחליף. בלי הבסיס הזה, קורסי production הם אוויר. איתו — הם הגיוניים מאליהם.

ולכן השיעור של הפרק הזה הוא לא "תכיר את Docker" אלא "תבין שאתה בונה נכס שיחזיק לכם חודשים".

מתחיל 4 דקות anti-fear mindset

הפחד מול המציאות

הרבה אנשים שמתחילים עם Docker מתארים חוויה דומה: הם פותחים מדריך, רואים 200 עמודים, שומעים מושגים כמו "image layer", "cgroups", "namespace", "union filesystem", ומרגישים שזה מעבר להם. הפחד הזה הוא נורמלי — וברובו מוצדק רק אם אתם מנסים ללמוד הכל.

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

ב-Docker, המקבילה היא:

זה הבסיס. שאר ה-200 העמודים הם למי שרוצה להבין איך המנוע עובד — וזה מעולה, אבל זה לא דרישה. אם אתם יודעים לארוז אפליקציה אחת ולהריץ אותה בכל מקום, אתם כבר משתמשים ב-95% מהערך ש-Docker נותן. השאר הוא אופטימיזציה, שמגיעה כשצריך.

מה שמפחיד אתכם בעיקר בלבול מושגים

הפחד מ-Docker הוא לרוב בלבול בין מושגים, לא קושי אמיתי. ברגע שאתם יודעים:

הכל מסתדר. אין כאן קסם. יש רק אוצר מילים חדש, שברגע שהוא בראש — Docker הופך מסט של פקודות מפחידות לשפה טבעית.

Framework — 3-In / 3-Out: תחומו את Docker לפני שאתם מתחילים

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

3 דברים ש-Docker כן יעשה לכם ב-6 הפרקים:

3 דברים ש-Docker לא יעשה בקורס הזה (וזה בסדר):

איך להשתמש ב-Framework: בכל פעם שאתם רואים מדריך, סרטון, או פלט AI שמציע "פתרון" שלא ברשימת ה-3-In — עצרו. זה לא הבעיה שלכם. הוסיפו לרשימת ה-Out והמשיכו. ה-Vibe Coder שמתמקד הוא זה שמסיים קורסים.

Framework — Mental Model Map: 4 המושגים שצריך לזכור

אם הייתי צריך לבחור 4 מושגים שיחזיקו אתכם לכל 6 הפרקים, אלה הם. שימו אותם על פתק ליד המקלדת. בכל פעם שמשהו לא מסתדר — חזרו לפה ובדקו איזה מהם לא ברור.

החוק הפשוט: כל פעם שאתם רואים פקודה חדשה, שאלו "איזה מה-4 היא משנה?"

אם אתם יודעים איזה מה-4 הפקודה משנה — אתם יודעים מה היא עושה, גם בלי להבין את המנוע.

Do Now — 4 דקות (Mental Model Lock-In)

פתחו Notepad או Google Doc, וכתבו במשפט אחד: "האפליקציה שלי היום רצה רק על הלפטופ שלי בגלל [X], ואחרי הקורס היא תרוץ בכל מקום". ה-[X] הוא הגורם העיקרי שבגללו היא נשברת: גרסת שפה, dependency חסר, OS שונה, או סוד שנחשף. אל תנסחו יפה — תנסחו מדויק. תוצאה צפויה: יהיה לכם עוגן אישי שמחבר את הקורס לאפליקציה הספציפית שלכם. כל פעם שתרגישו אבודים, תחזרו למשפט הזה.

Do Now — 5 דקות (3-In / 3-Out Personal List)

באותו מסמך, הוסיפו שתי רשימות: "3 דברים שאני מצפה ש-Docker יפתור לי בקורס" ו-"3 דברים שאני לא מצפה ממנו". דוגמאות ל-In: "להריץ את האפליקציה על VPS", "לא לפחד מ-version mismatches", "לדחוס את ה-Env management". דוגמאות ל-Out: "לבנות לי CI/CD", "לנהל לי 50 services", "לפתור לי בעיות אבטחה ב-production". תוצאה צפויה: הגדרת scope אישית שתגן עליכם מפני סחף. בכל פעם שמשהו ירגיש "אולי זה מסובך מדי", תבדקו אם זה ב-In או ב-Out — ואם ב-Out, תזיזו הצדה.

Do Now — 3 דקות (Image/Container Test)

בלי להריץ שום דבר, ענו לעצמכם בקול רם: "אני עומד/ת לבנות image — מה אני עומד/ת להריץ? docker build או docker run? אני עומד/ת להריץ container — מה אני צריך/ה לפני כן, image או Dockerfile?". חזרו על השאלות עד שהתשובה מיידית. תוצאה צפויה: ההבחנה image-vs-container תהפוך מ"משהו שאני חושב/ת עליו" ל"משהו שאני יודע/ת אוטומטית". זה הצעד הראשון בפתיחת הפקודות בפרק 2 בלי חרדה.

Do Now — 6 דקות (Container vs VM Comparison)

קחו נייר ועט (או המשיכו ב-Doc), והכינו טבלה עם 2 עמודות: "Container" ו-"Virtual Machine". מלאו 4 שורות: גודל, זמן הרצה, האם משתף kernel, וכמה נכנסים בשרת סטנדרטי. בלי להציץ. אחר כך השוו עם הטבלה בסעיף 3. תוצאה צפויה: תראו איפה הייתם צריכים חיזוק (אם בכלל). אם מילאתם 4/4 נכון — אתם מוכנים. אם לא — חזרו לסעיף 3 וקראו שוב. אין צורך להמשיך לפרק 2 בלי שזה ברור.

Do Now — 4 דקות (Pick Your Analogy)

בחרו אנלוגיה אישית שעובדת לכם להבחנה בין image ל-container. הצעות: (1) תבנית אפייה מול עוגה, (2) מתכון מול תבשיל, (3) קובץ התקנה מול תוכנה מותקנת, (4) שרטוט של בית מול בית שנבנה, (5) class מול instance. רשמו את הבחירה ב-Doc, וכתבו משפט אחד שמסביר את ההבדל באנלוגיה שלכם. תוצאה צפויה: עוגן אישי שיחזיק אתכם גם אם תשכחו את המונחים הטכניים. כל אימת שתתבלבלו, תחזרו לאנלוגיה.

Do Now — 5 דקות (Find the Wrong Verb)

הרשימה הבאה כוללת 5 משפטים. קראו כל אחד, וסמנו אם הוא נכון או שגוי (הפועל בו לא מתאים למושג):

  1. "הרצתי image של postgres מ-Docker Hub."
  2. "בניתי container חדש עם ה-Dockerfile שלי."
  3. "ה-image הזה שוקל 300 מגה, אז ה-container יהיה באותו גודל."
  4. "דחפתי image ל-ghcr.io."
  5. "מחקתי את ה-container, אבל ה-image עדיין פה."

תשובות: (1) שגוי — מושכים image, מריצים container; (2) שגוי — בונים image, מריצים container; (3) נכון — ה-container רץ מתוך ה-image, הוא לא מוסיף לגודל; (4) נכון — דוחפים image, לא container; (5) נכון — מחיקת container לא מוחקת image. תוצאה צפויה: תוכלו לזהות איפה אתם עדיין מערבבים את המושגים, ולחזק את ההבחנה לפני שנכנסים לפקודות אמיתיות.

Do Now — 7 דקות (3 Failure Modes Audit)

קחו את האפליקציה שלכם ובדקו אם היא נופלת לאחד משלושת הכשלים שתוארו בסעיף 2: (1) התנגשויות dependencies? האם יש package-lock.json או requirements.txt שמתעד כל חבילה, או שיש חבילות שהותקנו "פעם אחת בעבר" ולא תועדו? (2) אי-התאמת סביבה? האם יש משתני סביבה שמוגדרים רק על הלפטופ שלכם, או ספריות מערכת שאתם בטוחים שמותקנות? (3) סודות בקוד? חפשו בכל הקבצים שלכם (grep -r "API_KEY\|SECRET\|PASSWORD\|TOKEN") ובדקו אם משהו חשוף. תוצאה צפויה: תדעו בדיוק איפה האפליקציה שלכם כבר שבירה, ותוכלו לתעדף איפה Docker יעזור לכם הכי הרבה. גם אם תגלו שאין בעיות — עצם הבדיקה שווה את הזמן.

Do Now — 5 דקות (Mental Model Map — Personal Flash Cards)

קחו 6 כרטיסיות (פיסות נייר או sticky notes). על 4 מהן רשמו את המושגים המרכזיים: image, container, Dockerfile, registry. על 2 הנותרות רשמו: build, run. ערבבו, הוציאו אחת, ובמשפט אחד הסבירו מה היא עושה. אם הצלחתם — העיקרון של הקורס בראש. אם לא — חזרו לסעיף המתאים. תוצאה צפויה: תוך 6 הקלקות על הכרטיסיות, תהפוך את המושגים מ"ידע" ל"מיומנות" — וזה מה שיבדיל אתכם מהלומד שמסיים את הפרק עם תחושה ש"הבנתי, אבל אני לא בטוח אם אני יודע להשתמש בזה".

תרגיל 1 — סקיצה של המסע (15 דקות, בלי להריץ)

המטרה: להפוך את המסע "image מהלפטופ → registry → שרת" לתרשים ויזואלי שלכם. עד שתציירו אותו, הוא רק מילים.

מה תעשו:

  1. פתחו Google Drawing, Excalidraw, או אפילו נייר ועט.
  2. ציירו 4 ריבועים: "הלפטופ שלי", "image", "ghcr.io", "VPS".
  3. חברו אותם בחיצים, ועל כל חץ רשמו את הפקודה המתאימה: docker build, docker push, docker pull, docker run.
  4. הוסיפו הערה קטנה: "איזה חלק זה יקרה בפרק 3, איזה בפרק 6".

תוצאה צפויה: תרשים פשוט עם 4 ריבועים ו-4 חיצים מתויגים, שמראה את כל המסע של ה-image מהקוד שלכם ועד שהוא רץ על שרת אמיתי. התרשים לא חייב להיות יפה — הוא חייב להיות שלכם. תדפיסו אותו או שמרו אותו כ-PNG ליד המקלדת.

תרגיל 2 — דיאגרמת ה-mental model (10 דקות)

המטרה: לראות בעיניים ש-image ו-container הם שני דברים שונים שמתקשרים בפקודה אחת.

מה תעשו:

  1. ציירו שני ריבועים זה לצד זה. השמאלי = "image", הימני = "container".
  2. בתוך ריבוע "image" רשמו: "read-only, frozen, נוצר על-ידי docker build, שוקל MB-GB".
  3. בתוך ריבוע "container" רשמו: "writable layer, רץ, נוצר על-ידי docker run, חי עד stop/rm".
  4. חברו חץ מ-image ל-container. על החץ רשמו: docker run.
  5. מתחת לתרשים רשמו: "מ-image אחד אפשר להריץ הרבה containers; מחיקת container לא מוחקת image".

תוצאה צפויה: דיאגרמה פשוטה שמתעדת את הקשר image→container. תלו אותה ליד המסך. כל פעם שתקראו הוראה או תקבלו הודעת שגיאה, תסתכלו על הדיאגרמה ותשאלו "איפה אני בתרשים הזה? על ה-image? על ה-container?".

תרגיל 3 — כרטיסיית 5 הפעלים (8 דקות)

המטרה: להפוך את 5 הפקודות שתשתמשו בהן ביומיום לכרטיסייה ויזואלית אחת שתוכלו להדפיס ולשים ליד המקלדת.

מה תעשו:

  1. קחו פיסת נייר (או פתחו Mac Notes, Google Keep, Notion).
  2. רשמו 5 שורות, אחת לכל פועל:
  1. בצד השני של הכרטיסייה רשמו: "build = image, run = container, push/pull = registry, exec = live container".
  2. שימו ליד המקלדת. תסתכלו עליה בכל פעם שאתם לא זוכרים מה פקודה עושה.

תוצאה צפויה: כרטיסייה אחת פיזית (או דיגיטלית) שתחזיק אתכם לכל 6 הפרקים. כל אימת שתרגישו "רגע, מה הולך כאן", תסתכלו — וב-90% מהמקרים היא תספיק.

טעות נפוצה: לבלבל בין image ל-container ולהשתמש במילים לסירוגין

זו הטעות הראשונה שכמעט כל מי שמתחיל עושה, והיא המזיקה ביותר. הסימפטום: אתם אומרים "הרצתי image של postgres" כשאתם בעצם הרצתם container. או "מחקתי את ה-image הזה" כשאתם בעצם עצרתם container. ההשלכה: כל פקודה אחר כך מרגישה אקראית, כי אתם לא יודעים אם docker rm מוחק image או container (תשובה: רק container — docker rmi מוחק image), אם docker push שולח image או container (תשובה: רק image), וכו'.

התיקון: בפעם הראשונה שאתם כותבים "image" או "container" באפליקציית ההערות — עצרו לרגע. שאלו את עצמכם: "אני מדבר על הקובץ הקפוא, או על המופע הרץ?" אם אתם לא בטוחים — חזרו לסעיף 4 וקראו שוב. נעילת ההבחנה כאן חוסכת שעות תסכול בפרקים הבאים — זו לא הגזמה, זו עובדה שרוב הקורסים מדלגים עליה ומשלמים מאוחר יותר.

טעות נפוצה: לחשוב ש-Docker = Kubernetes ולברוח מפחד מ-orchestration מסובך

תופעה נפוצה: מישהו שמע על "Kubernetes" (או "K8s", או "Helm", או "operators") והחליט ש-Docker זה "אותו דבר, רק יותר קל". הוא פותח קורס Docker, רואה את המילה "container", ומיד מדמיין 200 pods, 50 deployments, ו-cluster עם 3 masters. הוא סוגר את הקורס ועובר לוויזואל בלוגרים (או, גרוע יותר, מוותר על deploy לגמרי).

המציאות: Docker ו-Kubernetes הם שני דברים שונים לחלוטין. Docker עוטף אפליקציה אחת ומריץ אותה. Kubernetes מנהל אלפי אפליקציות כאלו במקביל. לארוז אפליקציה אחת ולהריץ אותה על VPS לא דורש שום orchestration. זה כמו להפחד מללמוד נהיגה כי "מכוניות מירוץ מסובכות". אתם לא נוהגים במכונית מירוץ. אתם נוהגים במכונית משפחתית. אותו עיקרון, פחות features, מתאים בדיוק למה שאתם צריכים.

התיקון: אם אתם רואים את המילים pod, replica, deployment, service mesh, או sidecar — סגרו את המדריך הזה. זה לא בשבילכם עכשיו. חזרו לקורס הזה, שמלמד את הדבר המצומצם שאתם כן צריכים.

טעות נפוצה: להניח ש-Docker הוא Virtual Machine 'קל' ולצפות לזמני הרצה ולגדלים של VM

טעות שמייצרת תסכול מיותר בפעמים הראשונות: מי שמכיר VM רק רואה את המילה "container" וחושב שזה "VM קל". הוא מצפה שהריצה תיקח 30 שניות, שה-image ישקול 3-5 GB, ושתהיה הפרדה ברמת מערכת הפעלה בין ה-container למארח. כל אלה לא נכונים.

ההפתעות: container עולה בשנייה, לא בדקה. image שוקל 200 MB, לא 3 GB. ה-container לא מבודד ברמת מערכת הפעלה — הוא משתף kernel עם המארח. אם אתם רוצים בידוד של VM, תצטרכו לרוץ בתוך VM (למשל, Colima על Mac, או WSL2 על Windows). זה לגיטימי, אבל זה שכבה נוספת.

התיקון: קבלו ש-container זה container, לא "VM קל". זה קטגוריה אחרת לגמרי. זה מהיר, זה קל, זה זול — אבל הוא לא מציע את אותו סוג של בידוד. ברוב המקרים של Vibe Coder, זה יותר מספיק — ואם יום אחד תצטרכו VM, תדעו את זה.

Work Routine — שגרת Foundation Phase

יומי (10 דקות, 14 ימים ראשונים):

שבועי (30 דקות, יום ראשון בערב): חזרה על 3 הרשימות (3-In, 3-Out, Mental Model Map). האם הן עדיין משקפות את הבנתכם? עדכנו אם צריך. קראו את ה-mental model map בקול רם — אם מילה כלשהי לא זורמת, זה הסימן שצריך לחזור לסעיף המתאים לפני פרק 2.

לפני פרק 2 (סוף שבוע שני): ודאו שיש לכם 4 דברים מוכנים: (1) Mac או Windows עם WSL2; (2) חיבור אינטרנט יציב (image של nginx הוא ~50 MB, לא נורא, אבל docker desktop הוא כבר GB בודדים); (3) ה-Doc שלכם עם התרשים מתרגיל 1 פתוח לצד; (4) סקרנות. אין צורך בשום דבר אחר.

ברגע שתסיימו את הפרק הזה ותרגישו שה-mental model ברור — אתם מוכנים לפרק 2. אם משהו עדיין מרגיש ערפילי, עצרו וחזרו. אין בושה; רוב האנשים צריכים 2-3 קריאות של ההבחנה image/Container עד שזה נכנס.

סיכום הפרק — 7 לקחים שייקחו אתכם הלאה
  1. "רץ אצלי במחשב" הוא לא באג; זה פער מבני. האפליקציה שלכם נשברת במקום אחר בגלל גרסאות שפה, dependencies חסרים, או OS שונה. 82% מהכשלים הם dependencies, 60-70% סביבה, 48% סודות. Docker סוגר את כל השלושה.
  2. container ≠ VM. container חולק את ה-kernel של המארח, שוקל MB, ועולה בשניות. VM מריץ OS אורח שלם, שוקל GB, ועולה בדקות. אותו שרת מחזיק 100-200 containers או 10-15 VMs. ל-Vibe Coder, container הוא הברירה.
  3. image ≠ container. image = המתכון הקפוא. container = התבשיל הרץ. docker build עושה image. docker run עושה container. מ-image אחד מריצים הרבה containers. מחיקת container לא מוחקת image.
  4. build ו-run הן הפקודות הבסיסיות. docker build -t myapp:v1 . הופך Dockerfile ל-image. docker run -p 8080:80 nginx הופך image ל-container שמגיש דף ב-browser. זה הבסיס לכל השאר.
  5. OCI הופך את ה-image לנייד. תקן פתוח שמבטיח שה-image ירוץ באותה צורה ב-Docker, ב-Podman, ב-Kubernetes, בענן. אתם לא נעולים על Docker.
  6. registry = הגשר מהלפטופ לשרת. Docker Hub ו-ghcr.io הם שני הרלוונטיים. docker push מעלה, docker pull מוריד. בפרק 6 תדחפו image ל-ghcr.io ותמשכו אותו על VPS.
  7. ה-Vibe Coder צריך בדיוק 4 דברים: לארוז אפליקציה, לשמר נתונים, להעביר config ב-runtime, ולהריץ על שרת. לא Kubernetes, לא Swarm, לא CI/CD מלא. ב-6 פרקים תסגרו את כל ה-4, וזה הבסיס לקורס ה-production.
Just One Thing — אם תזכרו רק דבר אחד מהפרק הזה

אם תצאו מהפרק הזה עם דבר אחד בראש, שיהיה זה: image הוא המתכון הקפוא, container הוא התבשיל הרץ. docker build עושה image. docker run עושה container. כל פקודה אחרת בקורס — push, pull, exec, logs, stop, rm — משנה אחת מהשתיים. אם אתם יודעים איזו מהשתיים אתם משנים, אתם יודעים מה הפקודה עושה. זה ההבדל בין מי שמסיים את הקורס ומרגיש "אני יודע" לבין מי שמסיים ומרגיש "אני רק חוזר על מה שהמדריך אמר לי". בלי ההבחנה הזו, כל פקודה תרגיש אקראית. איתה — הכל הגיוני.

Check Yourself — 5 שאלות הבנה
  1. שאלה: האפליקציה שלכם רצה על הלפטופ עם npm run dev, אבל כשאתם שולחים את הריפו לחבר, הוא מקבל "Module not found" על חבילה שעובדת אצלכם. איזה משלושת הכשלים המתוארים בסעיף 2 זה, ולמה Docker פותר את זה?
    תשובה: זה כשל של dependencies: החבילה מותקנת אצלכם ב-node_modules המקומי, אבל לא תועדה ב-package.json או לא נכללה ב-lockfile. Docker פותר את זה כי ה-image הקפוא כולל בדיוק את ה-dependencies שעבדו (כולל גרסאות מדויקות), בלי תלות במה שמותקן על המכונה המקומית.
  2. שאלה: מה ההבדל הקריטי בין container ל-Virtual Machine, ולמה הוא חשוב ל-Vibe Coder שרוצה להריץ את האפליקציה על VPS של 4$?
    תשובה: container חולק את ה-kernel של המארח (MB, עולה בשניות, 100-200 נכנסים בשרת); VM מריץ OS אורח שלם (GB, עולה בדקות, 10-15 בשרת). ל-VPS של 4$, container מאפשר להריץ את האפליקציה + מסד + cache על אותו שרת; VM היה דורש 3 שרתים.
  3. שאלה: אתם מריצים docker run nginx, ואז מוחקים את ה-container עם docker rm <id>. האם ה-image של nginx עדיין קיים? האם תוכלו להריץ docker run nginx שוב בלי להוריד שוב?
    תשובה: כן. docker rm מוחק רק את ה-container (המופע הרץ), לא את ה-image (המתכון הקפוא). docker run nginx בלי --pull ישתמש ב-image המקומי בלי להוריד מחדש. docker rmi nginx היא הפקודה שמוחקת image.
  4. שאלה: למה OCI חשוב, ואיזו השלכה יש לזה על הבחירה שלכם ב-Docker?
    תשובה: OCI הוא תקן פתוח שמבטיח שה-image ו-container runtime מתנהגים באותה צורה בכל כלי תואם (Docker, Podman, containerd, Kubernetes). ההשלכה: אתם לא נעולים על Docker. אם מחר תרצו לעבור ל-Podman, או להעלות image ל-Kubernetes בענן — אותו image יעבוד. Docker הוא הכלי הנוח ביותר היום, לא כלא טכנולוגי.
  5. שאלה: רשמו 3 דברים ש-Docker כן יעשה לכם בקורס הזה, ו-3 שהוא לא. איזה פריט ברשימת ה-Out הכי מפתה אתכם ללמוד עכשיו, ולמה לא כדאי?
    תשובה: דוגמה לתשובה: In — לארוז אפליקציה, לשמר נתונים, להעלות לשרת. Out — Kubernetes, CI/CD, monitoring. הפריט הכי מפתה הוא כנראה CI/CD (לראות איך "דוחפים ל-GitHub והכל מתעדכן אוטומטית"). הסיבה שלא כדאי: בלי שיש לכם image שרץ ובלי שאתם מבינים deploy ידני, CI/CD אוטומטי רק יסתיר תקלות. קודם הבסיס, אחר כך האוטומציה.
Checklist — 12 פריטים לסיום הפרק
מה תפיקו בסוף הפרק
מה הלאה — פרק 2

בפרק 2 (התקנה והרצה ראשונה — Desktop, ה-CLI, וה-container הראשון שלך) נעבור מהתיאוריה לעשייה: נתקין את Docker Desktop על Windows (עם WSL2) או על Mac, נוודא שהוא עובד עם docker run hello-world, ואז נריץ container אמיתיdocker run -p 8080:80 nginx — ונפתח אותו ב-browser. תוך 20 דקות תראו בעיניים את ההבדל בין "לקרוא על Docker" לבין "להריץ container". ה-mental model מהפרק הזה הוא הבסיס; פרק 2 הוא הרגע שבו הוא הופך לפקודות.