क्या उपयोगकर्ताओं के लिए वेब साइटों को अलग करने के लिए डॉकर का उपयोग करना संभव है?

मैं उन सर्वरों का प्रबंधन करता हूं जहां उपयोगकर्ताओं की अपनी वेबसाइटें होती हैं जिन्हें एफ़टीपी (एक होस्टिंग कंपनी की तरह) द्वारा एक्सेस किया जा सकता है और लैंप स्टैक प्रक्रियाओं को अलग करने पर काम करने के बजाय, मैं सोच रहा था कि क्या डॉकर को लागू करना और प्रति वेबसाइट छवियों का उपयोग करना संभव है ।

जो मैं समझता हूं, उससे आप अपने बंदरगाहों के माध्यम से डॉकर इंस्टेंस को उजागर कर सकते हैं, इसलिए यदि आप एक ही सर्वर पर दो डॉकर इंस्टेंस चलाते हैं, तो आपको दो अलग-अलग बंदरगाहों को उजागर करना होगा ।

लेकिन क्या बंदरगाहों को निर्यात करना संभव नहीं है, लेकिन सर्वर नाम, जैसे :

  • www.somewebsite.com : डॉकर उदाहरण 1
  • www.otherwebsite.com : डॉकर उदाहरण 2
  • www.etc.com : डॉकर उदाहरण ।..

और वह, एक ही सर्वर में ।

मैंने सर्वर पर केवल अपाचे स्थापित करने के बारे में सोचा, जो सर्वर नाम के आधार पर समर्पित डॉकर उदाहरण के लिए अनुरोध को पुनर्निर्देशित करेगा, लेकिन फिर मुझे अपाचे (फिर से !) तथामाइएसक्यूएल किसी भी डॉकर उदाहरणों पर ।

क्या यह संभव है और इसके अलावा, क्या यह प्रदर्शन की अवधि में दिलचस्प है (या बिल्कुल नहीं)?

आपकी मदद के लिए धन्यवाद ।

हाँ, यह संभव है । आपको कई 80 पोर्ट प्रदान करने की आवश्यकता है । प्रत्येक यूआरएल के लिए एक । आप इसका उपयोग कर सकते हैं, उदाहरण के लिए अपाचे का वर्चुअल होस्ट डॉकर होस्ट सर्वर पर चल रहा है ।

  1. सेट DNS CNAME.
  2. डॉकर इंस्टेंस चलाएं और उनके पोर्ट 80 को पोर्ट पर मैप करें, कहें, डॉकर होस्ट के 12345~12347 ।
  3. डॉकर होस्ट पर अपाचे सर्वर चलाएं और प्रत्येक यूआरएल के लिए वर्चुअल होस्ट सेट करें और प्रॉक्सीपास और प्रॉक्सीपासरेवर्स को लोकलहोस्ट पर सेट करें:12345 जो आपके डॉकर उदाहरणों में से एक है ।

अपाचे कॉन्फ़िगरेशन फ़ाइल इस तरह दिखाई देगी:

<VirtualHost *:80>ServerName www.somewebsite.com  <Proxy *>    Allow from localhost  </Proxy>  ProxyPass        / http://local.hostname.ofDockerHost:12345/  ProxyPassReverse / http://local.hostname.ofDockerHost:12345/</VirtualHost>

मुझे पता है कि इसका उत्तर पहले ही दिया जा चुका है, हालांकि मैं इसे एक कदम आगे ले जाना चाहता था और आपको एक उदाहरण दिखाना चाहता था कि यह कैसे किया जा सकता है, ताकि अधिक संपूर्ण उत्तर प्रदान किया जा सके ।

कृपया इसका उपयोग करने के निर्देशों के साथ यहां मेरी डॉकर छवि देखें, यह आपको दिखाएगा कि दो साइटों को कैसे कॉन्फ़िगर किया जाएhttps://hub.docker.com/r/vect0r/httpd-proxy/

जैसा कि जिहुन ने कहा कि आपको यह सुनिश्चित करना होगा कि आपके पास अपना वीहोस्ट कॉन्फ़िगरेशन सेट है । मेरा उदाहरण परीक्षण साइट प्रदर्शित करने के लिए पोर्ट 80 का उपयोग करता है example.com और 81 परीक्षण साइट प्रदर्शित करने के लिए example2.com. यह भी ध्यान रखना महत्वपूर्ण है कि आपको अपनी सामग्री निर्दिष्ट करने और अपने डॉकरफाइल में आवश्यक बंदरगाहों को उजागर करने की आवश्यकता होगी, जैसे;

FROM centos:latestMaintainer vect0rLABEL Vendor="CentOS"RUN yum -y update && yum clean allRUN yum -y install httpd && yum clean allEXPOSE 80 81#Simple startup script to aviod some issues observed with container restartADD run-httpd.sh /run-httpd.shRUN chmod -v +x /run-httpd.sh#Copy config file acrossCOPY ./httpd.conf /etc/httpd/conf/httpd.confCOPY ./example.com /var/www/example.comCOPY ./example2.com /var/www/example2.comCOPY ./sites-available /etc/httpd/sites-availableCOPY ./sites-enabled /etc/httpd/sites-enabledCMD ["/run-httpd.sh"]

आशा है कि यह प्रक्रिया को थोड़ा और समझाने में मदद करता है । कृपया बेझिझक मुझसे इस पर कोई और सवाल पूछें, मदद करने में खुशी हुई ।

सादर,

V

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

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

मेरे मामले में मुझे जोड़ने की जरूरत थी SSLProxyEngine पर, ProxyPreserveHost पर और RequestHeader सेट फ्रंट-एंड-Https "पर" मेरी अपाचे 2.4 वीहोस्ट फ़ाइल के लिए, क्योंकि मैं डॉकर कंटेनर पर एसएसएल को सक्षम करना चाहता था । के बारे में स्थानीय।होस्टनाम।ofDockerHost, मेरे मामले में डॉकर कंटेनर चलाने वाले होस्ट सर्वर का नाम था लुकास, और डॉकर कंटेनर के पोर्ट 443 में मैप किया गया पोर्ट था 1443 (क्योंकि पोर्ट 443 पहले से ही होस्ट सर्वर में अपाचे द्वारा उपयोग में था), ताकि लाइन इस तरह समाप्त हो जाए https://lucas:1443/

यह अंतिम सेटअप है, और यह ठीक काम कर रहा है!

<VirtualHost *:443> # Change to *:80 if no https required    ServerName www.somewebsite.com    <Proxy *>        Allow from localhost    </Proxy>    SSLProxyEngine On # Comment this out if no https required    RequestHeader set Front-End-Https "On" # Comment this out if no https required    ProxyPreserveHost    On    ProxyPass        / http://local.hostname.ofDockerHost:12345/    ProxyPassReverse / http://local.hostname.ofDockerHost:12345/</VirtualHost>

अंत में, डॉकर कंटेनर में मुझे प्रॉक्सी एसएसएल हेडर सेटअप करना पड़ा । मेरे मामले में, कंटेनर नग्नेक्स चला रहा था और कुछ कहा जाता है सभी रूबी ऐप्स सेट करने के लिए । मुझे लगता है कि यह एक एनजीआईएनएक्स कॉन्फ़िगरेशन फ़ाइल में भी सेटअप हो सकता है । इसे लिखेंगे जैसा कि किसी को यह मददगार लगता है

nginx['redirect_http_to_https'] = truenginx['proxy_set_headers'] = {    "Host" => "$http_host",    "X-Real-IP" => "$remote_addr",    "X-Forwarded-For" => "$proxy_add_x_forwarded_for",    "X-Forwarded-Proto" => "https",    "X-Forwarded-Ssl" => "on"}nginx['real_ip_trusted_addresses'] = ['10.0.0.77'] # IP for lucas hostnginx['real_ip_header'] = 'X-Real-IP'nginx['real_ip_recursive'] = 'on'

अपाचे, आईएसपी कॉन्फ़िगरेशन, उबंटू सर्वर 16.04 के लिए पूरी गाइड यहां https://www.howtoforge.com/community/threads/subdomain-or-subfolder-route-requests-to-running-docker-image.73845/#post-347744