יום חמישי, 31 בדצמבר 2015

Docker , Docker & Container Service





המאמר נכתב על ידי רותם אור, מומחה ויועץ בכיר בקבוצת סלע בתחום פתרונות ענן
rotemo@sela.co.il




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


קצת היסטוריה.
בשנת 2008 הוקמה עיי סולומון היקס חברה בשם DotCloud החברה נתנה שרותי Platform - PaaS as a service למפתחים וחברות שלא רצו להתעסק בתשתיות. בשנת 2012 החליטה החברה להוציא את אחד מרכיבי התשתית שלה והפכה אותו לפרויקט Open Source וקראה לו Docker
מהר מאוד הפך הפרויקט הצדדי לעסק המרכזי של החברה ולדבר החם הבא שכנראה הולך להפוך את העולם שהכרנו עד היום. בתוך שלוש שנות חייה גייסה החברה כ 180 מיליון דולר ב 5 סבבי גיוס.

אז מה זה Docker? Much more than VM on Steroids
Docker היא פלטפורמה שנותנת פתרונות לכל אחד משלבי החיים של תוכנה, פיתוח, בדיקה, פריסה של מערכות ממוחשבות. ניתן להשתמש ב Docker בכל תצורה, החל ממערכות פשוטות מאוד ועד למערכות מורכבות שמכילות ממאות ואלפי רכיבי תוכנה וכל זה נעשה עיי שימוש ב Container )אתם תשמעו את המילה הזאת הרבה(.



אז מה זה Container ?
הרבה פעמים נוהגים להשוות Containers ל VM . יש בניהם דמיון אבל הוא לא גדול.
שניהם מספקים תשתית שרת שעליה מריצים מערכת הפעלה אבל בזה פחות או יותר נגמר הקשר שלהם.
Container הוא מארז סגור של השרת שבו אתם מריצים את המערכת שלכם. הוא מגיע ארוז כקובץ וכל מה שצריך כדי להריץ את המערכת שלכם הוא פשוט להפעיל את ה Container בלי צורך להכיר את מה שקורה בפנים.


?Containers VS Virtual Machine
כדי להריץ VM אנחנו מחזיקים שרת פיזי, על גביו מתקינם מערכת הפעלה, מעליה שרת Hypervisor ומעליו בעבור כל VM צריך עוד מערכת הפעלה שצורכת משאבים ושוקלת כמה GB ורק מעליה את האפליקציה שלכם Libs ו Application ו DATA
Docker חוסך לנו את החלק של מערכת הפעלה עבור כל VM ואת תשתית ה Hypervisor מחליף Docker Engine שמשתף את ה Kernel של מערכת ההפעלה שעליה הוא רץ עם ה Containers שרצים מעליו )Kernel בגדול מספק תקשורת בין מערכת ההפעלה לרכיבי החומרה(, ה Container לא מכיל מערכת הפעלה מלאה, הוא רק מוסיף מעל ה Kernel את התוספות של מערכת ההפעלה שאותה הוא אורז.
התוצאה היא שבפועל יש לנו מערכת הפעלה מלאה החל מגודל של 10mb שעולה במהירות של Milliseconds ומגיעה ארוזה ומוכה להפעלה ללא צורך בשום קונפיגורציה נוספת.

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


כל Container מגיע ארוז עם הסביבה שעליה פותח ואין צורך לדעת איך להתקין את המערכת שרצה בתוכו ולא איזה גירסת Java, Node או Python ... צריכה לרוץ כדי להפעיל את המערכת, הוא פשוט רץ בדיוק כמו במכונה של המתכנת שפיתח את המוצר. מכירים את המשפט הידוע של המתכנתים כשמשהו לא עובד בשרת ״אצלי זה עובד״ אז ככה בדיוק זה עובד מהיום, מה שרץ ועובד בסביבת הפיתוח ירוץ ויעבוד בסביבת הפרודקשיין או הבדיקות בלי צורך בהגדרות נוספות.


Sharing - Open Source
כדי לאפשר גמישות מקסימלית. הקליינט של Docker שאיתו אנחנו מתקשרים עם ה Containers מחובר ישירות ל Docker Hub פורטל שיתוף של Containers - ויכול להריץ כל Container שתמצאו ב Hub ותוכלו גם להעלות לשם Containers משלכם.
אפשר למצוא ב Hub גרסאות רשמיות של כל פלטפורמות ה Open Source וגם Containers של משתמשי Docker אחרים ואפשר ללמוד הרבה על תהליך העבודה עם Containers דרך הפורטל.
למשל כדי להתקין שרת Ubuntu כל מה שצריך הוא פשוט להריץ את ה Container של Ubuntu והמערכת תוריד עבורכם את Container של Ubuntu ותריץ אותו עבורכם בלי שתצטרכו להתקין אותו בכלל אם הוא לא נמצא מקומית הקליינט ילך ויוריד אותו עבורכם ישירות מ Docker Hub
קובץ קצר ולא , Docker FIle מומלץ לנהל קובץ קונפיגורציה שנקרא Container בפועל כדי לבנות Container מסובך שיגדיר בדיוק את כל הרכיבים שמרכיבים את המערכת שלכם. ועל בסיסו יבנה ה שלכם
.Git ומאפשר חיבור ל DockerFIles מבצע גם בניה אוטומטית של DockerHub ביחד עם Docker מגיעים עוד כמה כלים

Docker Compose שמאפשר לנו להריץ מספר Containersבצורה מסונכרנת ולחבר ביניהם ולתחזק אותם דרך קובץ קונפיגורציה YML

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


Docker and Windows
אז כולנו כבר יודעים ש Microsoft אוהבת Linux ושעולמות ה Open Source כבר לא כל כך זרים ב Microsoft. בין השאר הוקמה ב Microsoft חטיבה שלמה שנקראת MS Opentech שכל תפקידה הוא לפתח פתרונות Open Source והם אחראים לפיתוחים רבים ב Azure.
Microsoft עובדת כבר שנתיים בצמוד עם צוות הפיתוח של Docker ועשתה שינוי יסודי בהתאמת ה .Containers כדי שיוכל לתמוך ב Windows Server 2016 של Kernel מגרסת ה 3 CTP ששוחררה לפני חצי שנה בערך, אפשר להריץ Hyper-V Containers ו Windows Containers גם בשרת מקומי וגם ב Azure, מה שאומר שאנחנו יכולים להריץ Container עם סביבת IIS להשתמש ב Linux שלא רצות על גבי שרתי Net. שעליו אנחנו יכולין לארוז אפליקציות Windows ובעצם בכל תשתיות Windows אחרות שאתם מכירים.

עננים - Docker in the cloud
כל זאת ועוד לא דיברנו על מה אפשר לעשות עם Docker בענן. כיום רוב פלטפורמות הענן תומכות ב Docker Containers ומאפשרות להריץ אותם ישירות מהענן. פלטפורמות הענן אמצו מהר מאוד את החבר החדש ואפשרו להריץ Docker Containers על גבי תשתיות הענן שלהם.
תוך זמן קצר מאוד כולם החלו לעבוד במרץ על שרות PaaS שיאפשר לנו להריץ קונטיינרים בלי לדאוג לתשתיות השרת ובעצם לפשט את קיום התשתית עבור מי שמריץ מספר רב של Containers על גבי
Cluster של מחשבים.
Google Cloud Platform


Google השיקה את Container Engine שמאפשר להריץ Containers על גבי הענן של Google ולנהל את ה Linux Containers שלכם מרחוק בשימוש ב Kubernetes שהוא כלי ניהול ה Containers של Cluster גם ב Containers שמאפשר לכם לנתר ולעקוב אחרי Google בנוסף השיקו בGoogle את Container Registry שהוא שרות מקביל ל DockerHub שמאפשר למשתמשים לאחסן Private Container Registry ובכך בעצם לפתוח Hub פרטי שיהיה זמין מכל מקום בכל זמן. Image


Amazon AWS

באמזון השיקו את שרות Amazon EC2 Container service שמאפשר לנו ליצור Cluster ולהריץ עליו Cluster לנתר אותם, לקבץ אותם בקבוצות לוגיות, ולבצע את כל הפעולות מול ה Linux Containers ישירות מה SDK של Amazon EC2 Container service.



Microsoft Azure

ב Azure הוציאה Microsoft את שרות Azure Container Service שנמצא כרגע ב Preview.
Azure Container Service מאפשר גם הוא להריץ מספר רב של Containers ללא צורך בניהול התשתיות או מערכות הניהול והניתור. אחד החוזקות של Microsoft הוא שהשרות תומך גם בקונטיינרים של Windows וגם בשל Linux
Swarm ו Docker, Mesos ומשתמש ב Open Source מבוסס על טכנולוגיות Azure Container Service כדי לנהל Containers ומאפשר למשתמשים לנהל ולנתר אלפי Containers שרצים במקביל. כל הכלים מגיעים כחלק מהשרות ולא צריך להקים אותם כדי לנהל את הסביבה.


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

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

Image
אז כנסו לאתר של דוקר /https://www.docker.com או ישירות לתרגול /https://training.docker.com