docker-compose - Docker - דוקר - הרצאה 4

פורסם: 1 בפברואר 2020

תקציר

Docker Compose ו-docker-compose.yml (YAML): version, services (image/build, replicas), networks, volumes, משתני סביבה, restart policy; docker-compose up לעלייה סינכרונית ולוגים משולבים; מגבלת host אחד מול פרודקשן — Kubernetes לפריסה רחבה.

האזנה ישירה

תמלול הפרק (לחצו לפתיחה)

Docker Compose - לנהל את כל החגיגה

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

למה זה חשוב? כי במיקרו-סרוויסים המוצר שלנו מורכב מהרבה חלקים. כדי להרים את המוצר אנחנו צריכים שתהיה לנו דרך להגדיר ש-10 או 20 אימג'ים יעלו יחד, יתקשרו ביניהם ברשת (Network) ויחלקו Volumes (שכבת Persistence משותפת).

איך משתמשים בזה?

כמו שיש לנו Dockerfile כדי ליצור אימג', עבור דוקר קומפוז אנחנו יוצרים קובץ שנקרא docker-compose.yml. הקובץ הזה נכתב בפורמט YAML (יאמל).

מה זה YAML?

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

מבנה הקובץ docker-compose.yml:

Version: השורה הראשונה מגדירה את הגרסה של דוקר קומפוז (למשל 3.7). זה עוזר ל-Docker Engine להבין אילו פקודות ויכולות זמינות לנו.

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

מה זה Service בהקשר הזה? זה למעשה הגדרה של אימג' וכמה עותקים (Replicas) נרצה ממנו. למשל, סרוויס MySQL שיריץ שני קונטיינרים (עותקים) של אותו אימג'.

אפשר להגדיר סרוויס על בסיס אימג' קיים (מ-Docker Hub) או להגיד לו לבנות (Build) את האימג' במקום מתוך Dockerfile מקומי.

Networks & Volumes: הגדרות של איך הסרוויסים ידברו ביניהם ואיפה יישמר המידע שלהם.

Environment Variables: משתני סביבה לכל סרוויס.

Restart Policy: הגדרת תנאים לביצוע Restart אוטומטי לקונטיינר אם הוא נופל או הופך ללא בריא.

הפקודה המנצחת:

ברגע שהקובץ מוכן, כל מה שצריך לעשות זה להריץ בטרמינל:

docker-compose up

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

מגבלה חשובה:

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

מקווה שנהניתם, נתראה בהרצאה הבאה!