מה זה Docker? הניצוץ למהפכת המכולות

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

מהם מכולות?

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

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

דוקר

מה זה Docker?

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

קובץ Docker

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

ל- Paige Niedringhaus ב- ITNext יש פירוט טוב של התחביר של Dockerfile.

תמונת דוקר

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

ריצת דוקר

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

רכזת דוקר

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

מנוע דוקר

Docker Engine הוא הליבה של Docker, טכנולוגיית שרת הלקוחות הבסיסית היוצרת ומפעילה את המכולות. באופן כללי, כשמישהו אומר דוקר באופן כללי ולא מדבר על החברה או על הפרויקט הכללי, הוא מתכוון לדוקר מנוע. ישנן שתי גרסאות שונות של Docker Engine המוצעות: Docker Engine Enterprise ו- Docker Engine Community.

מהדורת הקהילה של דוקר

Docker הוציאה את המהדורה הארגונית שלה בשנת 2017, אך ההיצע המקורי שלה, ששמה שונה ל- Docker Community Edition, נותר בקוד פתוח וללא תשלום, ולא איבד שום תכונה בתהליך. במקום זאת, Enterprise Edition, שעולה 1,500 דולר לצומת לשנה, הוסיפה תכונות ניהול מתקדמות הכוללות בקרות לניהול אשכולות ותמונות וניטור פגיעות. בבלוג BoxBoat יש סקירה של ההבדלים בין המהדורות.

איך דוקר כבש את עולם המכולות

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

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

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

Docker Compose, Docker Swarm ו- Kubernetes

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

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

יתרונות Docker

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

מכולות Docker מאפשרות בידוד וחנק

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

מכולות Docker מאפשרות ניידות

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

לדוגמה, מיכל MySQL עבור Linux יפעל ברוב כל מערכות לינוקס התומכות במכולות. כל התלות באפליקציה מועברות בדרך כלל באותו מיכל.

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

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

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

מכולות Docker מאפשרות יצירת קומפוזיציה

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

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

מכולות Docker מקלות על תזמור וקנה המידה

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

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

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

אזהרות מדוקרן

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

מכולות Docker אינן מכונות וירטואליות

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

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

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

מיכלי Docker אינם מספקים מהירות מתכת חשופה