מה ההבדל בין `docker compose` ל `docker-compose` ?
פוסט זה כולל טיפ קצר על Docker. אם אתם רוצים ללמוד יותר לעומק על פיתוח עם Docker, Docker Compose או Kubernetes תשמחו לשמוע שבניתי קורס וידאו מקיף בנושא זה.
למידע נוסף והצטרפות לקורס בקרו בדף קורס Docker כאן באתר.
שנים חשבתי ששתי הפקודות זה פשוט שתי דרכים לכתוב את אותה פקודה. לקח לי זמן לשים לב להתנהגויות מוזרות של הכלי ולקשר אותן לפקודה הספציפית אבל כמו הרבה דברים בחיים ברגע שרואים את זה כבר אי אפשר להחזיר את הגלגל לאחור.
הסיפור הרשמי של שתי הפקודות הוא פשוט - הכלי docker-compose
הוא סקריפט פייתון, הוא היה שם קודם וקוד המקור שלו (אם מצאתי נכון) הוא כאן: https://github.com/docker/compose.
לעומתו docker compose
מסומן בתור compose גירסה 2, כתוב ב go וקוד המקור שלו (בהנחה שמצאתי נכון) הוא כאן: https://github.com/docker/compose-cli.
למרות שהיינו מצפים שאחת הגירסאות תהיה עדיפה על השניה בכל המצבים (כנראה גירסה 2), ולמרות שלפי התיעוד גירסה 2 אמורה לעשות את כל מה שגירסה 1 יודעת לעשות, בפועל ההבדלים בין הגירסאות קיימים ואני עדיין לא מרגיש מוכן לוותר על קומפוז גירסה 1. אלה הדברים המרכזיים שאני שמתי לב אליהם:
גירסה 2, כלומר
docker compose
תומכת ביצירת קונטיינרים בעננים של מייקרוסופט ואמזון באמצעות אינטגרציה מובנית. מספיק ליצור context, לכתובdocker compose up
ויש לכם קונטיינרים באוויר ב ECS או ACI.על הלינוקס שלי, בגירסה 2 כשאני מעלה מכונות עם
docker compose up
ואז לוחץCtrl+C
אני נשאר תקוע על איזה הודעת "המכונות עצרו". בגירסתdocker-compose up
לחיצה על Ctrl+C עוצרת את המכונות אבל גם מחזירה אותי למסוף.גירסה 1 כלומר
docker-compose
תומכת בכתיבת הלוג ל syslog ונראה שגירסה 2 לא. במילים אחרות קובץ קומפוז כזה:
version: '3'
services:
worker:
image: // image
logging:
driver: syslog
options:
syslog-address: "udp://XXX.papertrailapp.com:XXXX"
tag: "{{.Name}}/{{.ID}}"
שמצאתי כאן בסטאק אוברפלו ובמקומות נוספים יעבוד עם docker-compose up
אבל לא יעבוד עם docker compose up
.
- קומפוז גירסה 2 (הגירסה בלי המקף) תומך ב Apple Silicon.
אם אתם מכירים או מצאתם הבדלים נוספים בין הכלים ורוצים לשתף אני אשמח לשמוע בתגובות.