הדרכת Docker: התחל בעבודה עם רשת Docker

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

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

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

רשת Docker: רשתות גשר

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

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

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

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

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

רשת דוקר: רשתות כיסוי

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

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

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

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

רשת דוקר: רשת מארחת

hostהנהג ברשת מאפשר מכולות יש ערימות הרשת שלהם לרוץ לצד הערימה על המארח. שרת אינטרנט ביציאה 80 hostבמיכל-רשת זמין מיציאה 80 במארח עצמו.

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

רשת Docker: רשת Macvlan

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

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

רשת דוקר: יצירה וניהול רשתות

כל ניהול הרשת ב- Docker מתבצע באמצעות docker networkהפקודה. רבות מתת-הפקודות שלה דומות לפקודות Docker אחרות; לדוגמה, docker network lsמציג את כל הרשתות שהוגדרו במופע Docker הנוכחי:

$ docker network ls NETWORK ID NAME DRIVER SCOPE 2e0adaa0ce4a bridge bridge local 0de3da43b973 מארח מארח מקומי 724a28c6d86d none null local

כדי ליצור רשת, השתמש createבפקודת המשנה יחד עם --driverהדגל כדי לציין באיזה מנהל התקן להשתמש ( bridge, overlay, macvlan):

$ docker network create --driver bridge my-bridge 

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

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

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

תוכל גם להתאים מיכל פועל לרשת:

$ docker רשת חיבור גשר my_container

זה מתחבר  my_containerאל bridgeהרשת, תוך שמירה כל חיבורי הרשת הקיימת יש לו כבר.

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

רשת Docker ורשתות Kubernetes

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

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

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