הבנת Docker

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

מה זה דוקר?

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

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

פלטפורמת הווירטואליזציה והכלים של מיכל יכולים להיות שימושיים במקרים הבאים:

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

בשביל מה אני יכול להשתמש ב-docer?

פרסם במהירות את היישומים שלך

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

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

קל יותר לפרוס ולהתפתח

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

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

עומסים גבוהים יותר ויותר מטענים

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

רכיבי Docker ראשיים

Docker מורכב משני מרכיבים עיקריים:

  • Docker: פלטפורמת וירטואליזציה בקוד פתוח;
  • Docker Hub: הפלטפורמה-כשירות שלנו להפצה וניהול של מכולות Docker.

הערה! Docker מופץ תחת רישיון Apache 2.0.

ארכיטקטורת דוקר

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

הבנת Docker

דמון הדוקר

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

לקוח Docker

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

בתוך דוקר

כדי להבין ממה מורכב docker, אתה צריך לדעת על שלושה מרכיבים:

  • תמונות
  • הרישום
  • מכולות

תמונות

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

להירשם

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

מיכלים

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

אז איך דוקר עובד?

עד כה אנחנו יודעים ש:

  • אנחנו יכולים ליצור תמונות שבהן היישומים שלנו נמצאים;
  • אנו יכולים ליצור מיכלים מתמונות להפעלת יישומים;
  • אנחנו יכולים להפיץ תמונות דרך Docker Hub או רישום תמונות אחר.

בואו נראה איך הרכיבים האלה משתלבים זה בזה.

איך עובדת התמונה?

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

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

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

הערה! Docker בדרך כלל שואב תמונות מהרישום של Docker Hub.

ניתן ליצור תמונות Docker מתמונות הבסיס הללו; אנו קוראים לשלבים ליצירת תמונות אלה הוראות. כל הוראה יוצרת תמונה או רמה חדשה. ההנחיות יהיו כדלקמן:

  • הפעל פקודה
  • הוספת קובץ או ספרייה
  • יצירת משתנה סביבה
  • הוראות לגבי מה להפעיל כאשר המיכל של תמונה זו מופעל

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

כיצד פועל הרישום של docker?

הרישום הוא מאגר לתמונות docker. לאחר יצירת התמונה, תוכל לפרסם אותה ברישום הציבורי של Docker Hub או ברישום האישי שלך.

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

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

איך עובד מיכל?

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

מה קורה כשהמכולה מתחילה?

או באמצעות התוכנית docker, או באמצעות RESTful API, לקוח docker אומר לדימון docker להפעיל את המיכל.

$ sudo docker run -i -t ubuntu /bin/bash

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

  • באיזו תמונה להשתמש כדי ליצור את המיכל. במקרה שלנו ubuntu
  • הפקודה שברצונך להפעיל כאשר המיכל מופעל. במקרה שלנו /bin/bash

מה קורה מתחת למכסה המנוע כשאנחנו מפעילים את הפקודה הזו?

Docker, לפי הסדר, עושה את הפעולות הבאות:

  • מוריד את תמונת האובונטו: docker בודק זמינות תמונה ubuntu במחשב המקומי, ואם הוא לא שם, הורד אותו מ רכזת דוקר. אם יש תמונה, היא משתמשת בה כדי ליצור מיכל;
  • יוצר מיכל: כאשר התמונה מתקבלת, docker משתמש בה כדי ליצור מיכל;
  • מאתחל את מערכת הקבצים ומעלה את רמת הקריאה בלבד: המיכל נוצר במערכת הקבצים והתמונה מתווספת לרמת הקריאה בלבד;
  • מאתחל את הרשת/הגשר: יוצר ממשק רשת המאפשר ל-Docker לתקשר עם המחשב המארח;
  • הגדרת כתובת ה-IP: מוצא וקובע את הכתובת;
  • מתחיל את התהליך שצוין: מפעיל את האפליקציה שלך;
  • מעבד ומפיק פלט מהאפליקציה שלך: מחבר ומתעד את זרם הקלט, הפלט והשגיאות הסטנדרטיים של היישום שלך כדי שתוכל לעקוב אחר ביצועי היישום שלך.

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

טכנולוגיות בשימוש

Docker כתוב ב-Go ומשתמש בכמה תכונות של ליבת לינוקס כדי ליישם את הפונקציונליות שלעיל.

מרחבי שמות

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

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

רשימה של כמה מרחבי שמות שבהם Docker משתמש:

  • pid: לבודד את התהליך;
  • נטו you לניהול ממשקי רשת;
  • ipc: לניהול משאבי IPC. (ICP: InterProccess Communication);
  • mnt: לניהול נקודות הרכבה;
  • utc: לבודד את הליבה ויצירת גרסאות שליטה (UTC: מערכת שיתוף זמן של Unix).

קבוצות בקרה

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

מערכת קבצים של איחוד

Union File Sysem או UnionFS היא מערכת קבצים הפועלת על ידי יצירת שכבות, מה שהופך אותה לקלת משקל ומהירה מאוד. Docker משתמש ב-UnionFS כדי ליצור את הבלוקים שמהם בנויה הקונטיינר. Docker יכול להשתמש במספר גרסאות של UnionFS כולל: AUFS, btrfs, vfs ו-DeviceMapper.

פורמטים של מיכל

Docker משלב את הרכיבים הללו למעטפת שאנו מכנים פורמט המכולה. פורמט ברירת המחדל נקרא libcontainer. Docker תומך גם בפורמט המכולה המסורתי ב-Linux באמצעות LXC. בעתיד, Docker עשוי לתמוך בפורמטים אחרים של מכולה. לדוגמה, שילוב עם BSD Jails או Solaris Zones.

מקור: www.habr.com

הוספת תגובה