מדריך מלא ל-Docker Compose

הפסיקו להריץ פקודות Docker ידניות עבור כל שירות.

אם אתם מריצים אפליקציה מודרנית, סביר להניח שיש לכם frontend, backend, מסד נתונים (database) ו-cache. הרצה של כל אלו אחד אחד היא איטית וחשופה לשגיאות.

Docker Compose פותר את זה. אתם מגדירים את כל ה-stack שלכם בקובץ YAML אחד ומפעילים הכל בפקודה אחת.

היסודות

  • ללא Compose: אתם מריצים ארבע פקודות נפרדות עבור ארבעה קונטיינרים.
  • עם Compose: אתם מריצים "docker compose up" והכל מתחיל לעבוד.

מושגים חשובים

• Services: כל service מייצג קונטיינר. ניתן להשתמש ב-"build" עבור הקוד שלכם או ב-"image" עבור כלים מוכנים מראש כמו PostgreSQL או Redis. • Port Mapping: השתמשו בפורמט HOST:CONTAINER. זה ממפה את הפורט של המחשב שלכם לפורט של הקונטיינר. • Environment Variables: השתמשו ב-"environment" עבור ערכים פשוטים או ב-"env_file" כדי לשמור סודות (secrets) בקובץ .env נפרד. • Volumes: השתמשו ב-volumes כדי לשמור על הנתונים שלכם בטוחים. ללא volumes, נתוני מסד הנתונים שלכם ייעלמו כשהקונטיינר עוצר. • Networks: Compose יוצר רשת באופן אוטומטי. קונטיינרים מתקשרים זה עם זה באמצעות שמות ה-service שלהם במקום localhost. • Depends_on: זה קובע את סדר ההפעלה. זה אומר ל-Docker להתחיל את מסד הנתונים לפני ה-backend. שימו לב שזה לא מחכה עד שמסד הנתונים יהיה מוכן לחלוטין.

טיפים לראיונות עבודה

  • מתי להשתמש ב-build לעומת image? השתמשו ב-"build" עבור האפליקציה המותאמת אישית שלכם. השתמשו ב-"image" עבור כלים קיימים מ-Docker Hub.
  • איך קונטיינרים מתקשרים? הם משתמשים בשמות ה-service כשמות מארחים (hostnames) בתוך רשת ה-Docker.
  • איך להימנע מאובדן נתונים? תמיד השתמשו ב-named volumes עבור מסדי נתונים.
  • איך לנהל סודות (secrets)? לעולם אל תכתבו אותם ישירות בקוד (hardcode). השתמשו בקובץ .env.

טעויות נפוצות שכדאי להימנע מהן

  • שימוש בתגית "latest": זה גורם לעדכונים בלתי צפויים. השתמשו בגרסאות ספציפיות כמו "postgres:16".
  • שימוש ב-localhost: קונטיינרים לא יכולים לראות אחד את השני דרך localhost. השתמשו בשם ה-service.
  • חוסר ב-healthchecks: השתמשו ב-healthchecks כדי לנטר אם ה-service שלכם באמת מוכן לעבודה.

מקור: https://dev.to/adityaguptareal/docker-compose-complete-guide-1gac