मेरे पास एक .NET माइक्रोसर्विस है जो डॉकटर कंटेनर के रूप में चल रहा है जो ग्राहकों को ईमेल भेजने के लिए जिम्मेदार है। इन ईमेल में अतिरिक्त बैनर है जो एक पीएनजी फ़ाइल है।

क्या उस फ़ाइल को निर्माण प्रक्रिया के दौरान मेरी डॉकर छवि में शामिल किया जाना चाहिए? क्या यह बिल्कुल अच्छा अभ्यास है?

क्या फ़ाइल को पहले से निर्मित कंटेनर में अपलोड करना या अलग-अलग जगहों पर संग्रहीत फ़ाइल को लिंक करना बेहतर तरीका है?

डॉकरफाइल

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base

WORKDIR /app

EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build

WORKDIR /src

COPY src/Email.Service/Email.Service.csproj .
COPY nuget.config .

RUN dotnet restore Email.Service.csproj --configfile nuget.config

COPY src/Email.Service .

RUN dotnet build Email.Service.csproj -c Release -o /app

FROM build AS publish

RUN dotnet publish Email.Service.csproj -c Release -o /app

FROM base AS final

WORKDIR /app

COPY --from=publish /app .

COPY src/Email.Service/Assets Assets

ENTRYPOINT [ "dotnet" ]
CMD [ "Email.Service.dll" ]

बैनर.पीएनजी परियोजना में संपत्ति निर्देशिका में रहता है।

0
Mikolaj 26 जिंदा 2022, 16:36

3 जवाब

सबसे बढ़िया उत्तर

क्या उस फ़ाइल को निर्माण प्रक्रिया के दौरान मेरी डॉकर छवि में शामिल किया जाना चाहिए?

हां। यह छवि को स्व-निहित बनाता है, और आप इसे केवल स्रोत पेड़ या किसी बाहरी कलाकृतियों की आवश्यकता के बिना चला सकते हैं।

(...लेकिन "एक अलग जगह में संग्रहीत फ़ाइल" विकल्प भी देखें।)

फ़ाइल को पहले से निर्मित कंटेनर में अपलोड करने का यह एक बेहतर तरीका है

नहीं, यह सर्वोत्तम अभ्यास नहीं है। कंटेनरों को हटाना और फिर से बनाना बहुत ही नियमित है (और कुबेरनेट्स जैसे वातावरण में कभी-कभी यह आपके नियंत्रण से बाहर होता है) और कंटेनर को कार्यात्मक जोखिम वाली चीजों को तोड़ने के लिए अतिरिक्त मैन्युअल सेटअप चरणों की आवश्यकता होती है क्योंकि आप चरण भूल गए हैं।

या अलग जगह में संग्रहीत फ़ाइल को लिंक किया है?

उत्पादन-उन्मुख परिनियोजन के लिए, यह वास्तव में एक अच्छी रणनीति हो सकती है। वेबपैक या इसी तरह के एक उपकरण के साथ निर्मित और स्थिर फाइलों के लिए संकलित एक जावास्क्रिप्ट एप्लिकेशन पर विचार करें। "सामान्य डॉकर तरीका" एक मल्टी-स्टेज बिल्ड का उपयोग करना होगा जिसने पहले एप्लिकेशन बनाया और फिर COPY उन फ़ाइलों को न्यूनतम Nginx छवि में बनाया। वेबपैक में कुछ विशेषताएं हैं जो किसी एप्लिकेशन के पुराने संस्करणों को प्रस्तुत करने की अनुमति देती हैं, इसलिए पिछला बिल्ड अभी भी काम करता है, भले ही अंतिम उपयोगकर्ता ने अपने पृष्ठ को नई संपत्तियों के लिंक के साथ पुनः लोड न किया हो; यह "सामान्य डॉकर तरीका" वास्तव में इसके साथ काम नहीं करता है।

तो वास्तव में इस तरह की स्थिर संपत्ति लेने और उन्हें सामान्य HTTP फ़ाइल-सेवारत सेवा पर अपलोड करने का एक बहुत ही वैध पथ है। (मैं अमेज़ॅन के प्रसाद के लिए अभ्यस्त हूं और मैं इसके लिए एडब्ल्यूएस एस 3 का उपयोग करता हूं, लेकिन मेरा मानना ​​​​है कि अन्य सार्वजनिक बादलों के समान प्रसाद हैं, और वास्तव में कुछ भी जहां आप फाइलें अपलोड कर सकते हैं और एचटीटीपी जीईटी उन्हें काम करेगा।) आप पूरी तरह से सामान्य का उपयोग करेंगे नॉट-जरूरी-डॉकर फ्रंटएंड इसके लिए पाइपलाइन का निर्माण करता है। अपने एप्लिकेशन कोड में, आप या तो स्वयं फ़ाइल-सर्विंग सेवा के लिए प्रॉक्सी करेंगे या सीधे उसे एक URL भेजेंगे।

जैसा कि मैं कहता हूं, यह थोड़ा अधिक उत्पादन-उन्मुख है, जहां आप चिंताओं के बारे में सोच रहे हैं जैसे "कल के निर्माण से स्क्रिप्ट यूआरएल आज भी मान्य है"; विकास के माहौल में काम करना कठिन है। यदि आपके पास पहले से ही एक वेब एप्लिकेशन प्रकाशन पाइपलाइन है और बैकएंड को डॉकर के अनुकूल बनाने का प्रयास कर रहे हैं, तो यह एक अच्छा तरीका हो सकता है। चाहे वह "बेहतर" हो, यह इस बात पर निर्भर करता है कि आपके लिए URL स्थिरता कितनी महत्वपूर्ण है, इसमें कितनी सामग्री शामिल है, यह कितनी बार बदलती है, और यह कितना महत्वपूर्ण है कि डेवलपर सेटअप अधिक स्व-निहित हो।

1
David Maze 26 जिंदा 2022, 17:49

सामान्य तौर पर, माइक्रोसर्विसेज का प्राथमिक लक्ष्य स्वतंत्रता है। माइक्रोसर्विसेज को एक दूसरे से स्वतंत्र होना चाहिए।

यदि आप छवि को किसी अन्य कंटेनर में संग्रहीत करते हैं, तो आप युग्मन का परिचय देते हैं। अन्य कंटेनर उपलब्ध होने पर ही आप मेल भेज सकते हैं।

तो सामान्य तौर पर, सबसे अच्छा तरीका, एक माइक्रोसर्विस आर्किटेक्चर में, छवि को अपनी मेलिंग छवि में शामिल करना है।

1
Hans Kilian 26 जिंदा 2022, 16:43

सीधे आपके उपयोगकेस से संबंधित नहीं बल्कि प्रश्न के शीर्षक से संबंधित है:

मान लें कि एक वेबसर्वर (httpd) के साथ एक छवि है। क्या एचटीडॉक्स में स्थिर फाइलें कंटेनर छवि का हिस्सा होनी चाहिए या उन्हें फाइल सिस्टम माउंट के माध्यम से आना चाहिए?

इस तरह के प्रश्न का मेरा उत्तर वेबसर्वर स्थापना/पैचिंग की जिम्मेदारी और जीवनचक्र और सामग्री बनाने वाले दस्तावेजों पर निर्भर करेगा। यदि आप किसी अन्य टीम को सामग्री पर जिम्मेदारी सौंपना चाहते हैं, तो आप संभवतः वॉल्यूम माउंट का उपयोग करना चाहते हैं और उस वॉल्यूम को संशोधित करने के लिए दूसरी टीम को एक्सेस देना चाहते हैं।

यह हंस द्वारा दिए गए उत्तर का कोई विरोधाभास नहीं है। एक पीएनजी के लिए जो आपके कंटेनर चलाने से अधिक समय तक रहता है, मुझे इसे छवि में पकाने पर कोई समस्या नहीं दिखती है।

1
Hiran Chaudhuri 26 जिंदा 2022, 17:21