التطبيق يحتوي على فب-التيار الوطني الحر على المنفذ 9000 ورمز التطبيق الخاص بي.الويب هو إنجن إكس مع عدد قليل من أجزاء التكوين.
هذه الوظائف كيف أتوقع أن ولكن من أجل ربط نجينكس إلى فب-التيار الوطني الحر لدي هذا الخط:
fastcgi_pass app:9000;
كيف يمكنني توسيع نطاق هذا بشكل فعال? إذا أردت، على سبيل المثال ، أن يكون واحد حاوية نجينكس تشغيل ولكن ثلاث حاويات التطبيق تشغيل ثم أنا ذاهب بالتأكيد ثلاث حالات فب-التيار الوطني الحر كل محاولة للاستماع على المنفذ 9000.
كيف يمكنني الحصول على كل مثيل فب-التيار الوطني الحر على منفذ مختلف ولكن لا تزال تعرف أين هم في بلدي التكوين إنجن إكس في أي وقت من الأوقات?
upstream php { #If there's no directive here, then use round_robin. #least_conn; server dockernginxphpfpm_php1_1:9000; server dockernginxphpfpm_php2_1:9000; server dockernginxphpfpm_php3_1:9000;}
هذه ليست مثالية حقا لأنها سوف تتطلب تغيير التكوين نجينكس وعامل الميناء يؤلف.يمل عندما تريد توسيع نطاق أعلى أو لأسفل.
لاحظ أن منفذ 9000 داخلي للحاوية وليس المضيف الفعلي ، لذلك لا يهم أن لديك عدة حاويات فب-التيار الوطني الحر على المنفذ 9000.
تحديث 2017/03/06: لقد استخدمت مشروعا يسمى الانترلوك الذي يعمل مع عامل الميناء لتحديث التكوين إنجن إكس تلقائيا وإعادة تشغيله. انظر أيضا @إيواسايتنبياغرو الإجابة التي لديها نهج إضافية.
على الرغم من أن هذا المنشور من 2015 وأشعر أنني نخر (مجتمع آسف) ، أشعر أنه من المفيد إضافته في هذا الوقت:
في الوقت الحاضر (ومنذ ذكر كوبرنيتس) عندما كنت تعمل مع عامل الميناء يمكنك استخدام كوبرنيتس أو سرب عامل الميناء بسهولة جدا لحل هذه المشكلة. سيأخذ كل من المنسقين عقد عامل الإرساء الخاص بك (عقدة واحدة = خادم واحد مع عامل الإرساء عليه) ويمكنك نشر الخدمات لهم وسيديرون تحديات المنفذ لك باستخدام شبكات التراكب.
نظرا لأنني أكثر دراية بسرب عامل الميناء، فهذه هي الطريقة التي ستفعل بها للتعامل مع هذه المشكلة (على افتراض أن لديك عقدة عامل ميناء واحدة):
تهيئة سرب:
docker swarm init
القرص المضغوط في جذر المشروع الخاص بك
cd some/project/root
إنشاء كومة سرب من عامل الميناء الخاص بك-يؤلف.يمل (بدلا من استخدام عامل الميناء-يؤلف):
docker stack deploy -c docker-compose.yml myApp
سيؤدي هذا إلى إنشاء كومة خدمة سرب عامل الميناء تسمى" مياب " وسوف تدير المنافذ بالنسبة لك. وهذا يعني: لديك فقط لإضافة واحد" ميناء: 9000:9000 " تعريف لخدمة فب-التيار الوطني الحر في ملف عامل الميناء الخاص بك ومن ثم يمكنك توسيع نطاق خدمة فب-التيار الوطني الحر ، ويقول إلى 3 حالات ، في حين أن سرب سوف لصناعة السيارات في سحرية تحميل التوازن بين الطلبات بين الحالات الثلاث دون أي مزيد من العمل اللازم.
في الحالة التي تكون فيها حاويات نجينكس و فب-التيار الوطني الحر على نفس المضيف ، يمكنك تكوين صغيرة دنسماسك على المضيف لاستخدامها من قبل حاوية إنجن إكس ، وتشغيل برنامج نصي لتحديث سجل دنس تلقائيا عند تغيير عنوان إب للحاوية.
لقد كتبت نص صغير للقيام بذلك (لصق أدناه) ، والتي تقوم تلقائيا بتحديث سجل دنس الذي له نفس اسم اسم الحاويات وتوجيهها إلى عناوين إب الحاويات:
#!/bin/bash# 10 seconds interval time by defaultINTERVAL=${INTERVAL:-10}# dnsmasq config directoryDNSMASQ_CONFIG=${DNSMASQ_CONFIG:-.}# commands used in this scriptDOCKER=${DOCKER:-docker}SLEEP=${SLEEP:-sleep}TAIL=${TAIL:-tail}declare -A service_mapwhile truedo changed=false while read line do name=${line##* } ip=$(${DOCKER} inspect --format '{{.NetworkSettings.IPAddress}}' $name) if [ -z ${service_map[$name]} ] || [ ${service_map[$name]} != $ip ] # IP addr changed then service_map[$name]=$ip # write to file echo $name has a new IP Address $ip >&2 echo "host-record=$name,$ip" > "${DNSMASQ_CONFIG}/docker-$name" changed=true fi done < <(${DOCKER} ps | ${TAIL} -n +2) # a change of IP address occured, restart dnsmasq if [ $changed = true ] then systemctl restart dnsmasq fi ${SLEEP} $INTERVALdone
ثم ، بدء حاوية إنجن إكس الخاص بك مع --dns host-ip-address، حيث host-ip-address هو عنوان إب للمضيف على الواجهة docker0.
قد يكون نهج آخر للنظر في شيء من هذا القبيل القنصل-قالب.
وبطبيعة الحال ، في مرحلة ما, كوبرنيتس قد تحتاج إلى ذكر.
ومع ذلك ، هل يمكن النظر في أكثر قليلا 'بت من سلسلة وشريط لاصق' النهج من خلال النظر في ما تستهلك الأحداث عامل الميناء يمكن أن نفعل لك (تشغيل docker events --since 0 للحصول على عينة سريعة).
سيكون من تافهة إلى حد معقول أن يكون السيناريو يبحث في هذه الأحداث (مع الأخذ في الاعتبار أن هناك العديد من حزم العميل المتاحة ، بما في ذلك لبيثون ، غو ، الخ) ، وتعديل ملف التكوين ، وإعادة إنجن إكس (أي باستخدام نهج القنصل قالب ، ولكن من دون الحاجة إلى القنصل).
للعودة إلى الفرضية الأصلية الخاصة بك ، على الرغم من: طالما يتم تشغيل حاويات فب-فم مع الشبكة الخاصة بهم (أي عدم تقاسم ذلك من حاوية أخرى ، مثل نجينكس واحد) ، ثم هل يمكن أن يكون العديد من الحاويات الاستماع على المنفذ 9000 كما تريد - كما لديهم لكل حاوية إيبس ، لا توجد مشكلة مع الموانئ 'اشتباك'.
كيف يمكنك قياس هذا من المرجح أن تعتمد على ما هدفك النهائي/حالة الاستخدام هو ، ولكن شيء واحد قد تنظر هو وضع هابروكسي بين نجينكس والعقد فب-التيار الوطني الحر الخاص بك.شيء واحد هذا يمكن أن يسمح لك القيام به هو ببساطة ترشيح مجموعة (وربما إنشاء docker network) لخوادم فب-فم (أي 172.18.0.0 / 24) ، ولها هابروكسي تكوين لمحاولة استخدام أي إب ضمن هذا النطاق كخلفية. منذ هابروكسي ديه الشيكات الصحية ، فإنه يمكن تحديد بسرعة العناوين التي هي حية ، والاستفادة منها.