יצירת API בתמונת דוקר
-
אני רואה מידי פעם תמונות דוקר שנותנות מענה לצורך מסוים (לדוגמא התמונה המצוינת Gotenberg למסמכי PDF), על ידי שליחת תוכן לפורט מסוים, והם מחזירים את התשובה הרצויה (בדוגמא של Gotenberg, שולחים מסמך וורד לדוגמא לכתובת עם הפורט של התמונת דוקר וזה מחזיר מסמך PDF).
יש לי צורך להכין כזה דבר ורציתי לשאול איך לגשת לזה.
יש יישום ווינדוס מסוים שרץ בשורת פקודה ומחזיר קובץ לפי הפרמטרים ששולחים לו.
הכנתי תמונה עם WINE (שנותן להריץ וינדוס בלינוקס) ויש לי פונקציה מוכנה שכשמריצים אותה זה נותן בדיוק את התוצאה הרצויה וברוך השם זה עובד נהדר.
עכשיו אני רוצה לעשות מזה API, שכשייגשו לפורט של התמונה וישלחו את הפרמטר, זה יחזיר את התוצאה.
אני יודע להתקין בתמונה APACHE וPHP, ולהכין סקריפט שמקבל את הנתונים שנשלחים בGET ומבצע EXEC ומייצר את הקובץ הרצוי ומחזיר אותו, אבל אני מניח שיש דרכים יותר נורמליות לעשות את זה, אני טועה?
עריכה: בעצם מספיק CGI עם סקריפט BASH או משהו כזה, אין שם דברים שצריכים תיכנות מסובך.הפקודה הסופית שאני משתמש היא
docker exec -it docker123 wine /path/to/software.exe /PARAMETER id=1 /EXPORT exported_file.txt
ומה שאני רוצה זה לשלוח את הפרמטר (1 בדוגמא) בGET, ושיחזיר כתגובה את הקובץ שהוא מייצא. יש כמובן עוד בעייה שצריך להתמודד איתה, זה שהיישום לא מחזיר ישירות תגובה אלא כותב אותה על הדיסק, וצריך אחרי זה לשלוף הקובץ הזה ולהגיש אותו כתגובה.
תודה -
@aaron למה אתה קורא לזה האק מטורף, זה נשמע לי דרך נכונה לתקשר עם היישום כשהוא מבודד בתוך תמונת דוקר.
אפשר לחילופין לוותר על ה HTTP ולהריץ docker run בכל פעם, כך שהקריאה לפקודה תהיה מחוץ למכונה, אבל אני לא משוכנע שזה נכון יותר, אני חושב שאני הייתי מעדיף את הצורה של בקשת HTTP@aaron אמר ביצירת API בתמונת דוקר:
(למשל מה יקרה אם יש 10 בקשות בו זמנית? כולם ידרסו את כולם?)
למה כולם ידרסו את כולם? מה זה שונה מכל שרת שמאזין לכמה בקשות יחד?
-
@יוסף-בן-שמעון לתומי חשבתי שיש דרך יותר "נקייה" לעשות את זה.
כל מי שמכין תמונות דוקר שמאזינות לפורט, משתמש בפטנט הנ"ל?
האמת צריך לפתוח קבצי DOCKERFILE ולבדוק איך הם עושים.. -
@שואף אמר ביצירת API בתמונת דוקר:
@יוסף-בן-שמעון לתומי חשבתי שיש דרך יותר "נקייה" לעשות את זה.
כל מי שמכין תמונות דוקר שמאזינות לפורט, משתמש בפטנט הנ"ל?
האמת צריך לפתוח קבצי DOCKERFILE ולבדוק איך הם עושים..אישית אף פעם לא פגשתי בתמונות כאלה, יתכן שיש דרך אחרת שאני לא מכיר, רק הגבתי לאהרן שמתוך ההיכרות המצומצמת שלי כך הייתי עושה כי זה נראה לי דרך נקיה
-
@יוסף-בן-שמעון אמר ביצירת API בתמונת דוקר:
@aaron אמר ביצירת API בתמונת דוקר:
(למשל מה יקרה אם יש 10 בקשות בו זמנית? כולם ידרסו את כולם?)
למה כולם ידרסו את כולם? מה זה שונה מכל שרת שמאזין לכמה בקשות יחד?
אם הוא שומר תמיד את התוצאה לקובץ בשם exported_file.txt ואז מגיש אותו מעל HTTP אז הבקשה השניה תדרוס את הראשונה תוך כדי שהראשון מוריד.
אפשר לעשות שהשם של הקובץ יהיה רנדומלי או משהו כזה -
@יוסף-בן-שמעון אמר ביצירת API בתמונת דוקר:
@aaron למה אתה קורא לזה האק מטורף, זה נשמע לי דרך נכונה לתקשר עם היישום כשהוא מבודד בתוך תמונת דוקר.
האק מטורף אני קורא ללהריץ אפליקצית ווינדוס על wine כבסיס לשירות כלשהו.
בטוח שאין תחליף שפוי יותר? -
@aaron אמר ביצירת API בתמונת דוקר:
@יוסף-בן-שמעון אמר ביצירת API בתמונת דוקר:
@aaron למה אתה קורא לזה האק מטורף, זה נשמע לי דרך נכונה לתקשר עם היישום כשהוא מבודד בתוך תמונת דוקר.
האק מטורף אני קורא ללהריץ אפליקצית ווינדוס על wine כבסיס לשירות כלשהו.
בטוח שאין תחליף שפוי יותר?אין תחליף על שרת לינוקס, ולא שווה להחזיק שרת וינדוס בשביל זה.
הפיתרון הנ"ל עובד מצוין ב"ה, לוקח פחות מעשר שניות לקמפל ולייצא את הקובץ.