מה זה docker ולמה זה מגניב לאללה

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

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

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

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

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

היתרונות שדוקר מביא הן:

כלי הגדרה פשוט לייצרת image של המערכת. קובץ ההגדרה של דוקר מאוד פשוט להגדרה. הגדרה של מערכת יכולה לכלול הורדה של כלי תצורה כגון capisrano או ansible, והגדרות ספציפיות לאפליקציה (באמצעות משתנה סביבה, למשל). לאחר שנוצר ה- image ניתן להעלות אותו אל מאגר (repoistory) ומשם להוריד אותו אל מערכות הייצור. אם בעבר, היינו צריכים לגשת לכל מכונה ולבצע את ההגדרות, הרי עכשיו מעלים את האפליקציה "הארוזה". כל מה שנשאר, זה להוריד את הקבצים העדכניים אל המכונות ולהפעיל אותם.

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

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

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

במכונות לינוקס, כאשר מעלים, לדוגמא, מספר מופעים של אפליקציית java, למשל tomcat, שכל אחד מהם לוקח 1gb של זכרון, הרי הצריכה הכללית לא תהיה 10Gb אלא עשויה להיות הרבה פחות, מה שמבטיח יעילות שימוש בחשמל וגם חסכון ניכר בעלויות השימוש בזכרון. אך במקרה של docker, מאחר שהמכונות לא שומרות מידע, מקבלים הלכה למעשה מספר מופעים של אותה אפליקציה, העושים שימוש באותו זכרון, אך מספקים שירות בנפרד.

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

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

ניתן לראות ב- docker מעין נגזרת של git אך במקום לאחסן קוד, מאחסנים אפליקציות, תהליכים. כאשר מבצעים שינוי ב- image, מה שעולה אל ה- repository הוא רק ההבדלים. כך שמובטחת יעילות גבוהה, ובנוסף, ניתן לחזור בקלות אל גירסה קודמת (rollback).

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

אך הבעיה העיקרית היא ניהול הרשתות. אנחנו מעוניניים לדעת בדיוק אילו docker הוזנקו ולהפנות אליהם תעבורה. המרוץ לבניית מערכת התשתית שתיתן פתרון מלא לניהול הנושא נמצא בעיצומו, אך נכון לרגע זה ועד כמה שיודע לי, אין עדיין אף מערכת הנותנת פתרון מלא, למרות שיש כנראה כמה פתרונות טובים מאוד. אני משער שזה עניין של זמן, ולא הרבה. (גוגל ואחרים לוקחים חלק במירוץ). חברות כמו google מדווחות על הזנקה של מאות אלפי dockers כל יום.

לא מדובר על מהלך צדדי של התקדמות טכנולוגית, אלא משהו הנוגע לבסיס התפיסה של האופן שבו מספקים שירות. המשמעות היא כה נרחבת, שנראה שזו אחת הסיבות שמיקרוסופט החליטה לפתוח את מערכות זמן הריצה של טכנולוגיית dotnet כך שהן יוכלו לרוץ תחת לינוקס בעזרת mono. אם בעבר, כדי להריץ אפליקציות dotnet היית צריך שרת חלונות, עם כל הסיבוכיות בניהול מערכות אלו, באמצעות docker ניתן יהיה להזניק בקלות ולנהל צביריים של dotnet הרצים תחת לינוקס. יש גם איזו טענה שטכנולוגיה דומה ל-docker תרוץ תחת חלונות. אך  נראה שבשל חוסר הגמישות של המערכת בנוסף למגבלות ניהול הזכרון (אין shared memory, רק shared library) זו טכנולוגיה שאם תתפתח, תהיה מוגבלת בביצועים וביכולות. יחד עם זה, נראה שמגבלות של מערכות חלונות לבצע עבודה בעומסים גבוהים היא כבר נתון שספק אם ישתנה אי פעם.

 

כיצד למצוא עבודה בהייטק?

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

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

לכן, כל כך הרבה רוצים לעבוד בהייטק, ולעיתים, זה לא כל כך פשוט להתקבל.

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

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

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

שאלת הטכנולוגיה היא קריטית. הטכנולוגיה הנבחרת, תקבע לעיתים קרובות את גבוהה השכר הממוצע בשוק. כי אין דין מפתח php למומחה c++, ואל יתהלל qa כמפתח.

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

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

כל המידע הזה מאוד חביב, אבל איך הוא עוזר למישהו למצוא עבודה?

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

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

ישנם מספר אתרים בהם תוכלו לבחון פרויקטם שכאלו:

http://freecode.com/

http://sourceforge.net/

https://github.com/

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

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

לא מצאתם? תתחילו אחת :) התבאסתם? לכו תבחרו אחרת.

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

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

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

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

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

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

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

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

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

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

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