בניית לולאה שתריץ docker image
-
יש לי המון פרויקטים שצריכים לרוץ שם בדוקרים נפרדים, (שרת vps של קונטאבו)
המטרה הסופית שלי בפוסט הזה שאם יקרה שהשרת מתכבה או משהו כזה הכל יחזור לעבוד מעצמו בלי שאני יצטרך לרוץ להפעיל את הכל ולזכור מה עבד ואיך.
חשבתי שהדרך הנוחה ביותר יהיה יישום מערכת שידלק אוטומטי , שהיישום מערכת יריץ את כל ה docker images ,
הצלחתי לעשות יישום מערכת שנדלק אוטומטי על ידי זה.
עכשיו אני רוצה :
לכתוב לו סקריפט פייתון שירוץ ויפעיל את כל ה docker images,הייתי כותב בסקריפט פשוט docker run הבעיה יהא שה id של הדוקר משתנה בכל bulid image, ואני לא יכול לסמוך על רשימה שאני יכין פעם אחת ואותה ישים בסקריפט שיפעיל.
חשבתי לעשות משהו כזה:1 ) תקייה אחת (projects) שבתוכה יהיה את כל הפרויקטים שלי, שעליה אני ירוץ בסריקה ויקבל אליי רשימה של התיקיות שיש שם.
2) בכל bulid image אני ירשום את ה id של הimage לתוך קובץ (למשל לקובץ dockerid שיהיה בתוך התיקיה של הפרויקט).
3 ) אחרי זה להריץ לולאה על כל התקיות ולקחת את קובץ בשם dockerid ואיתו לעשות את ה docker runהבעיות העומדות כרגע,
א איך אני יכול בסיום ה bulid image לקבל את הID שנוצר כדי לרשום אותו לקובץ שאחרי זה אני יוכל לשלוף אותו.
ב זה נראה לי דרך מידי מסובכת ואני בטוח שיש פתרונות נוחים לעניין הזה,עריכה:
אני עברתי על התיעוד של דוקר ונראה לי שאפשר להריץ <docker run <name ולא דווקא עם ה id ולכן כל הבאלגן מיותר לכאורה.
רק נשאר לדעת האם זה הדרך לשמור על פרויקטים עובדים, זה על ידי יצירת יישום מערכת שמפעיל את כולם.עריכה נוספת לאחר התשובה של צדיק תמים:
יכלתי לחסוך המון כאב ראש אם הייתי מסתכל בתיעוד הנורמלי והמסודר...
פעם הבאה תחסכו את זה מעצמכם ותסתכלו בתיעוד מראש. -
@צבי-ש כתב בבניית לולאה שתריץ docker image:
רק נשאר לדעת האם זה הדרך לשמור על פרויקטים עובדים, זה על ידי יצירת יישום מערכת שמפעיל את כולם.
אין לי נסיון בדוקר (️), אבל נראה שהאופציה המומלצת היא להשתמש במדיניות הפעלה מחדש בדוקר עצמו: https://docs.docker.com/config/containers/start-containers-automatically
Docker provides restart policies to control whether your containers start automatically when they exit, or when Docker restarts. Restart policies ensure that linked containers are started in the correct order. Docker recommends that you use restart policies, and avoid using process managers to start containers.
-
@צבי-ש כתב בבניית לולאה שתריץ docker image:
רק נשאר לדעת האם זה הדרך לשמור על פרויקטים עובדים, זה על ידי יצירת יישום מערכת שמפעיל את כולם.
בהמשך המסמך ש @צדיק-תמים הביא מובאת גם השיטה של יצירת שירות באמצעות systemd וכד',
Use a process manager
If restart policies don’t suit your needs, such as when processes outside Docker depend on Docker containers, you can use a process manager such as upstart, systemd, or supervisor instead.
To use a process manager, configure it to start your container or service using the same docker start or docker service command you would normally use to start the container manually. Consult the documentation for the specific process manager for more details.זה חשוב כשהשירות שלך תלוי בשירותים מחוץ לדוקר, וכן אפשר להגדיר ב systemd פעולות שיתבצעו כששירות נופל (התראות למייל וכד') ועוד עולם שלם של יכולות, כך שזו עדין דרך שימושית.
קצת מראי מקומות:
-
@upsilon01 כתב בבניית לולאה שתריץ docker image:
ממליץ לך להשתמש ב docker-compose
לדעתי זה פחות לעניין להשתמש ב compose שמדובר בשירותים נפרדים.
מקובל להשתמש ב compose כדי להריץ למשל שרת ולקוח, או שרת וDB, וכד', אבל לא לדברים שונים.
זו לפחות דעתי.בכל אופן, השאלה של השואל תקפה גם ל docker compose, גם בו צריך להגדיר מדיניות restart.