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

למה צריך רשתות?

כאשר מדברים על Networking, מדברים בעצם על תקשורת בין תהליכים (Processes) במכונה. Networking ב-Docker בעיקרו משמש על מנת להגדיר תקשורת בין קונטיינרים ובין קונטיינרים ״לעולם החיצון״ 🛸 דרך המכונה עליה רץ דוקר.

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

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

בידוד קונטיינרים

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

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

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

ע״י הגדרה של Networking נכון נוכל להגיע למצב הזה ובעצם לאבטח את המערכת שלנו ולישון בראש שקט 😌.

צפייה ברשתות מוגדרות

על מנת לרשות את הרשתות המוגדרות לנו בדוקר, נוכל להריץ בטרמינל את הפקודה הבאה:

docker network ls

במידה והדיימון של דוקר רץ, אנו אמורים לראות פלט הדומה לפלט הבא:

צילום מסך של הפלט של הרצת הפקודה של Docker להצגת ה-Networking המוגדר

הגדרת רשת חדשה

אז אחרי שהבנו מה זה Networking ואיך הוא תורם לנו, הגיע הזמן שנגדיר רשת, ונעשה זאת עם קובץ Compose כמובן.

version: "3"

services:
  my-app:
    image: php:7.4-apache
    container_name: "WebApp"
    ports:
      - "80:80"
    volumes:
      - ./conf/webapp.apache.conf:/etc/apache2/sites-available/000-default.conf
      - ./api:/var/www/html
    networks:
      - my-network

networks:
  my-network:

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

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

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

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

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

סיכום

Netwoking ב-Docker הוא אחד מבין סט הכלים שדוקר נותן לנו על מנת לנהל את התשתית של המערכת שלנו.

במאמר הבא בסדרה נדבר על פרופילים וריבוי קבצי Compose.

    כתיבת תגובה

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

    שתפו