במאמר הקודם הסברתי על וירטואליזציה, היום אסביר על containerization. מי שלא קרא את המאמר על וירטואליזציה – כדאי לקרוא אותו לפני המאמר הנוכחי.
מה זה Containerization?
בעוד ש-virtualization מביא אבסטרקציה לחומרה, containerization מביא אבסטרקציה למערכת ההפעלה (בכך שיש kernel + רכיבים אחרים שמשותפים לכולם). containerization זו אסטרטגיה חכמה של הבאת הקונספט של וירטואליזציה למערכת ההפעלה עצמה.
ב-containerization אין את החלק של guest os, לכן הם חולקים משאבים וספריות רלוונטיים כשיש צורך בכך.
Container זה צורה של וירטואליזציה. זה יחידה סטנדרטית שניתן ליצור לכל מיני שימושים: מ-container שמריץ עליו מערכת הפעלה כלשהי, עד לשימושים מתקדמים יותר שניגע בהם בהמשך. בתוך container יש את כל הבינאריים, ספריות וקבצי קונפיגורציה דרושים.
אפשר להסתכל על container כמו מכולה שמגיעה לנמל: אפשר להעביר אותה ממקום למקום, היא בסביבה מבודדת ואפשר לשים בה מה שנרצה.

בעזרת container-ים, תהליך ההקמה והניהול של אפליקציות הופך ליעיל, מהיר וגמיש יותר. מאפיין ייחודי שלהם הוא שיתוף ה-kernel (הגשר שמחבר בין תוכנות המחשב לעיבוד הנתונים עצמו שמתבצע ברמת החומרה) של ה-host os עם containerים אחרים. כך אפשר ליצור container-ים במהירות. בנוסף,הם קלי משקל ביחס ל-VMs. ברוב המקרים, תהליך העלאה של container לוקח שניות בעוד שהרמת VM לוקחת מספר דקות (עם קינפוגים נוספים אחרי ההקמה).
לסיכום, היתרונות העיקריים של container-ים:
- חולקים את ה-kernel של ה-host os ולכן הם “קלים יותר”.
- ניהול משאבים טוב יותר מ VMs
- תהליך יצירת container לוקח שניות
דוגמא לתצורת אפליקציה עם container-ים:

רק אם container יצטרך ספריות או קובץ והוא לא ימצא אותו ב-kernel, הוא ידאג להוריד אותו.
כל ה-containerים מנוהלים על ידי ה-container engine, שכבת תוכנה נוספת שמאפשרת ליצור ולהריץ container-ים על גבי מערכת ההפעלה.
בעצם, כל הרעיון הוא לארוז את כל מה שהאפליקציה צריכה מראש, כדי למנוע באגים. כשמעבירים אפליקציה ל-VM יש יותר מקרים בהם מפספסים תלויות של האפליקציה.
השוואה בין vm ל-container כשרוצים להריץ כמה אפליקציות בנפרד(או כמה מרכיבים של אותה אפליקציה בנפרד):

בצד הימני, כל ה-container-ים חולקים את אותו ה-kernel של ה-host os, בניגוד לצד השמאלי שבו לכל VM יש מערכת הפעלה ו-kernel משלו. השיתופיות של container-ים היא אחת מהיתרונות הבולטים שלהם (פחות overhead). כמו שאתם רואים בדוגמא הימנית, כתוב המושג Docker. ניגע בזה בהמשך, אבל במשפט אחד, זה פלטפורמה עבור containerization שבעזרתה ניתן לארוז ולנהל את האפליקציה שלנו בצורה נוחה (שמשלבת בתוכה את כל היתרונות של container-ים).
container-ים אמנם שיפרו מאוד את יכולות הניהול של אפליקציות, ניהול המשאבים והתקנת התלויות מראש, אך יש להם גם כמה חסרונות:
- כיוון ש-container-ים חולקים kernel, חולשת אבטחה ב-kernel עלולות להוות איום כיוון שהבידוד ממערכת ההפעלה חלש יותר בהשוואה ל-vm.
- לעיתים יש בעיות עם containerים, במיוחד במערכת ההפעלה windows. זאת כיוון שהרצת container-ים עם windows לא קיימת זמן רב. ישנם עוד ליטושים שצריכים לקרות כדי שזה יעבוד באופן חלק. בנוסף, התמיכה היא רק לחלק קטן ממערכות ההפעלה של windows.
- כיוון שזאת טכנולוגיה חדשה יותר, מי שמשתמש בה צריך ללמוד אותה. לפעמים חברות מעדיפות לא “לבזבז זמן” בשינוי דברים שכבר עובדים (במיוחד כשמדובר בדברים גדולים ומורכבים).
אישית, אני חושב שהיתרונות עולים על החסרונות בפער גדול. אחרי שלומדים ומתנסים בזה, לא רוצים לחזור להשתמש ב-vms ? .