למה ללמוד בכלל מה זה Docker?

אם יצא לכם לעבור במשרדים של חברת הייטק (בכוונה או בטעות) בשנים האחרונות, כנראה שנתקלתם במושג Docker לא מעט.

Docker היא אחת מהבאזוורד היותר נפוצות בשנים האחרונות, דוגמה לזה אפשר לראות בסקר של Stackoverflow לשנת 2021. שם Docker הוא הכלי השני בפופלריות שלו, אחרי Git.

ואם זה לא מספיק, חברות כמו Google, Netflix, Spotify ועוד הרבה, עושות שימוש בDocker או בכלים מקבילים אחרים.

מה זה Docker?

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

Docker הוא פרויקט קוד פתוח של תוכנה המספקת שכבת הפשטה ואוטומציה להתקנת והרצת יישומים בתוך קונטיינרים (מכולות) המנוהלים על ידי וירטואליזציה ברמת מערכת ההפעלה על גבי Windows, macOS ו-Linux. מקור

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

Docker הוא כלי לניהול פשוט ויעיל של Containers.

כדי להבין מה זה Docker ולמה הוא משמש, אנחנו צריכים קודם להבין מה זה Containers.

מה זה Containers?

שיעור היסטוריה קצר על מכולות (כאלו של אוניות):

מכולות (של אוניות)

בעבר אם הייתם רוצים לשנע סחורה דרך אוניות, תהליך השינוע היה נראה כך:

  1. להעמיס את הסחורה על המשאית.
  2. לשנע את הסחורה לנמל הרלוונטי.
  3. לפרוק את הסחורה מהמשאית.
  4. להעמיס את הסחורה על האוניה.

וכנראה שהתהליך בנמל היעד היה זהה, רק בסדר הפוך.

יום אחד, בחור בשם מלקום מקלין חיכה עם המשאית שלו בנמל הוברקון בניו ג׳רסי בתור כדי שיעמיסו את הסחורה מהמשאית שלו לאוניה. מלקום השקיע לא מעט זמן בלהעמיס את המשאית שלו, ועכשיו הוא מחכה שהסוורים (עובדי הנמל) יפרקו את אותה משאית וישחזרו את אותה עבודה שהוא עשה קודם לכן. הוא חשב לעצמו ״זה היה נהדר אם הייתי יכול פשוט להעמיס את המשאית על האוניה״. מלקום לקח את הרעיון הזה ובשנת 1956 חנך את אונית המכולות הראשונה.

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

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

מכולות (Containers) במחשב מנסים לעשות את אותו דבר רק בעולם התוכנה.

Containers (של מחשבים):

שניה לפני שנצלול על מה זה Container, נבין מה הבעיות שאנחנו מנסים לפתור.

סביבת פיתוח לא אחידה
  • סביבת הפיתוח וסביבת המוצר לא זהות.
  • סביבת הפיתוח לא אחידה בין המפתחים.

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

ניהול שרתים

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

את הבעיות הנ״ל אפשר לפתור באמצעות וירטאליזציה.

אז מה זה בעצם Container?

בפשטות אפשר לחשוב על Container כמכונה וירטואלית ״קלה״, המאפשרת לנו להריץ תוכנה בסביבה מבודדת במערכת ההפעלה שלנו. את הסביבה הזאת אנחנו יוצרים עם כל מה שנדרש על מנת להריץ את התוכנה, אם נשתף את התוכנה שלנו ביחד עם הסביבה אנחנו מבטיחים שהתוכנה שלנו תרוץ באותה סביבה תמיד.

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

ההבדלים בין Virtual Machine לContainer

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

  • Container - בניגוד למכונה וירטואלית, Container מדמה לנו את מערכת ההפעלה, בפועל זה אומר שהמכונה הוירטואלית שלנו משתמשת במערכת ההפעלה הקיימת. בעקבות זאת Container קל יותר במשקל וגם מהיר הרבה יותר להפעלה.

בגלל שמכונה וירטואלית מכילה בתוכה מערכת הפעלה, אנחנו יכולים לדוגמה להריץ תוכנה שמותאמת לWindows על מחשבים עם מערכות הפעלה שונות. עבור Containers המצב שונה, תוכנה בתוך Container חייבת להיות תואמת למערכת ההפעלה שעליה יושב הContainer.

הבדלים בין קונטיינר למכונה וירטואלית

חשוב לציין שבעולם האמיתי זה לא או מכונה וירטואלית או קונטיינר, אלא שילוב של השניים. מחשב יכול להריץ כמה מכונות וירטואליות וכל מכונה תריץ כמה קונטיינרים, לכל אחד יש את השימושים שלו.

אז שוב, מה זה Docker?

עכשיו כשיש לנו קצת מושג מה זה Containers אנחנו יכולים לחזור להגדרה של Docker.

Docker הוא כלי לניהול פשוט ויעיל של Containers.

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

ממה Docker מורכב?

Docker Architecture

Docker Daemon

הלב של המערכת, התוכנה שמנהלת את הקונטיינרים במחשב שלנו.

Docker CLi - Command line interface

כלי שמאפשר לנו לשלוח בקשות לDaemon (באמצעות rest API).

Docker image

קובץ לקריאה בלבד, שהDocker Daemon הופך לContainer בתוך המחשב שלנו ומריץ אותו. בסוף, את הקובץ הזה נשתף בין מחשבים.

Docker file

קובץ רשימת הוראות התאר איך לייצר את הdocker image. שם הקובץ הוא Dockerfile ללא סיומת. דוגמה לקובץ:

1
2
3
4
5
6
7
FROM alpine

COPY run.sh .

RUN chmod +x ./run.sh

CMD sh ./run.sh

כשנריץ:

docker build .

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

Docker image layers

Docker registry

כלי לניהול תמונות.

Docker hub הוא כלי כזה שבנוסף מאפשר שיתוף של תמונות בצורה נוחה.

תרגול

אם אתם מעוניינים לתרגל קצת את הפקודות של Docker, תתקינו דרך הקישור הזה ותריצו את הפקודה הבאה בטרמינל:

docker run -it iyeshaya/workshop:run