Docker – חלק ראשון

Docker הוא מוצר שכובש לאחרונה את סביבות השרתים ומערכות הענן השונות. אז מהו Docker ובמה הוא שונה מתחום ה- VM?

container_vs_vm

אסביר את האיור:

VM ‏ (Virtual Machine)

בצד שמאל מופיע תרשים של מערכת וירטואליזציה (VM) אופיינית: בשכבה התחתונה השרת עצמו ("הברזל"), בשכבה מעל רצה מערכת ההפעלה של מוצר הוירטואליזציה, שכבת ה- Hypervisor היא שכבה המדמה קושחה ומאפשרת בניה והרצה של מערכות הפעלה וירטואליות מעליה. שלוש שכבות אלו הן התשתית של מערכת ה- VM. מעל תשתית זאת ניתן להתקין מערכות הפעלה שונות (כל גרסה של חלונות, לינוקס ועוד…)

כל מערכת הפעלה כזאת מושגת ע"י התקנה מלאה שלה (ולכן, אם מדובר בלינוקס, תכיל ספריות bin/ ו- lib/ השייכים לה). בכל אחת ממערכות ההפעלה מתקינים את האפליקציה היעודית לה (השכבה העליונה). כפי שניתן להבין, במערך וירטואליזציה זה יש תקורה רבה של משאבים בשל העובדה שצריך להתקין מערכת הפעלה שלמה עבור כל אחת מהאפליקציות.

Docker:

נתבונן עכשיו בחלק הימני של השרטוט. השכבה התחתונה זהה ("הברזל"), בשכבה מעליה רצה מערכת ההפעלה שתריץ את שירות ה- Docker, מעליה מותקן מנוע לטיפול ב- "מיכלים" (Containers). שלוש שכבות אלו מהוות את תשתית המוצר.

בפתרון זה כל אפליקציה תרוץ במיכל יעודי משלה: יהיו שלושה מיכלים שיריצו כל אחד (באופן עצמאי ומבודד) בסיס נתונים, ועוד שלושה מיכלים שיריצו אפליקציות (כל אפליקציה במיכל מבודד משלה). בפתרון זה (להבדיל מפתרון הוירטואליזציה) אין צורך בהתקנה של מערכת הפעלה שלמה (על תקורותיה) בשביל להריץ בה את האפליקציה: יש מערכת הפעלה אחת (משותפת לכל המיכלים) קרנל אחד וכל אפליקציה תרוץ במיכל היעודי לה. חשוב להבין שהמיכלים עובדים מול הקרנל של מערכת ההפעלה הראשית של Docker. כלומר, גם אם אתה מריץ במיכל אחד Image של CentOS 6.5, במיכל שני Image של דביאן Wheezy, כל מיכל אכן יכיל ספריות usr/ ו- lib/ היעודיות למערכות הפעלה זאת, אך שניהם "יראו" את הקרנל של מוצר ה- Docker (נניח Ubuntu 14.04).

אז היתרון של Docker מובן: אתה "מתפטר" מ- 99.9% תקורה (זכרון, מעבד, דיסק ועוד…) הנובעים מהצורך להתקין ולהריץ מערכת הפעלה שלמה עבור האפליקציה שלך. בדיקות שונות העלו שעל אותה החומרה ניתן להתקין פי 4-6 אפליקציות מאשר יכולת להתקין בסביבת VM.

אסכם את היתרונות של Docker: הוא מאפשר להריץ יותר אפליקציות על אותה החומרה, הוא מאפשר למפתחים לארוז ולהפיץ את התוכנה שלהם בצורה ניידת (Portable) במהירות ובקלות, הוא מאפשר פריסה וניהול ישומים בצורה קלה (כשהישומים רצים בסביבה מבודדת), הוא קל מאוד לאימוץ והפצה, קיימת סטנדרניזציה לגבי מבנה ה- Image.

הדוגמא הבאה ממחישה את יכולות Docker: אתה יכול לטעון Image של מערכת הפעלה (המערכת תקבל IP בצורה אוטומטית), להריץ בה פקודה מסויימת, לאחריה לבצע Snapshot ל- Container ואז לסגור אותו, וכל זה בצורה אוטומטית לחלוטין!

באתר הבית של התוכנה סיכמו את יכולותיה כך: Build, Ship and Run Any App, Anywhere

docker_logo

הלוגו של Docker: הישומים מובלים במיכלים במהירות ובביטחה ליעדם

 

רעיון חדש וגאוני? לא כ"כ… המונח מיכל (Container) הוא מושג ותיק. כבר בשנת 2000 נעשה בו שימוש ב- FreeBSD. גם ב- Solaris המושג היה קיים ונקרא Zones, אבל הסטנדרטיזציה של ה- Containers, היכולת לבצע Snapshot, לחזור אחורה (לבטל פעולות שנעשו ב- Container) כל זה הופך את Docker למוצר מאוד מבטיח.

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

בחלק הבא: התנסות מעשית עם Docker

My Signature
פורסם בקטגוריה לינוקס ותוכנה חופשית. אפשר להגיע לכאן עם קישור ישיר.

2 תגובות בנושא Docker – חלק ראשון

  1. מאת פוסטר‏:

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

  2. מאת shimi810‏:

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

    טוב, בשבילי זה עדיין נראה מרתיע, כנראה שאני לא קהל היעד, מפעיל וירטואלבוקס ונגמר העניין 🙂

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *