(1) सेटअप बंदरगाहों सीधे डोकर साथ vhosts, या (2) का उपयोग करें और प्रॉक्सी के Nginx / अपाचे का उपयोग करें: यहाँ दो संभव जवाब हैं Dokku आप के लिए बंदरगाहों और vhosts प्रबंधन करने के लिए (जो मैं कैसे विधि 1 करने के लिए सीखा)।
विधि 1a (सीधे docker के साथ पोर्ट असाइन करें)
चरण 1: वांछित पोर्ट नंबर असाइनमेंट के साथ होस्ट पर nginx.conf या Apache सेटअप करें। होस्ट पर चल रहा यह वेब सर्वर, vhost proxying करेगा। डॉकर के संबंध में इसके बारे में कुछ विशेष नहीं है - यह सामान्य vhost होस्टिंग है। अगला भाग आता है, स्टेप 2 में, डॉकर को सही होस्ट पोर्ट नंबर का उपयोग करने के लिए।
चरण 2: डॉकर के पोर्ट मैपिंग सेट करने के लिए "-पी" के साथ डॉकर में फोर्स पोर्ट नंबर असाइनमेंट, और "-ई" डॉकर के भीतर कस्टम पर्यावरण चर सेट करने के लिए, निम्नानुसार है:
port=12345
IMAGE=myapps/container-1
id=$(docker run -d -p :$port -e PORT=$port $IMAGE)
echo $id
echo $id > /app/files/CONTAINER
docker ps
docker logs $id
docker kill $id
विधि 1 बी हार्ड-कोडित एप्लिकेशन पोर्ट
... यदि आप अनुप्रयोग हार्डकॉस्ट पोर्ट का उपयोग करते हैं, उदाहरण के लिए पोर्ट 5000 (अर्थात PORT पर्यावरण चर के माध्यम से कॉन्फ़िगर नहीं किया जा सकता है, जैसा कि विधि 1a में है), तो इसे इस तरह डॉकर के माध्यम से हार्डकोड किया जा सकता है:
publicPort=12345
id=$(docker run -d -p $publicPort:5000 $IMAGE)
विधि 2 (Dokku बंदरगाहों का पता लगाने दें)
फिलहाल, डोकर vhosts के प्रबंधन के लिए एक बहुत अच्छा विकल्प है Dokku । एक आगामी विकल्प फ्लिन का उपयोग करना हो सकता है , लेकिन अभी के रूप में फ्लिन अभी शुरू हो रहा है और काफी तैयार नहीं है। इसलिए हम अभी के लिए Dokku के साथ चलते हैं: Dokku स्थापित निर्देशों का पालन करने के बाद, एक ही डोमेन के लिए, "VHOST" फ़ाइल बनाकर vhosts को सक्षम करें:
echo yourdomain.com > /home/git/VHOST
अब, जब कोई ऐप SSH के माध्यम से Dokku (यह करने के लिए Dokku डॉक्स देखें) के माध्यम से धकेल दिया जाता है, तो Dokku VHOST फ़ाइल को देखेगा और विशेष एप्लिकेशन के लिए धकेल दिया जाएगा (मान लें कि आपने "कंटेनर -1" धक्का दिया), यह उत्पन्न करेगा निम्न फ़ाइल:
/home/git/container-1/nginx.conf
और इसमें निम्नलिखित सामग्री होगी:
upstream container-1 { server 127.0.0.1:49162; }
server {
listen 80;
server_name container-1.yourdomain.com;
location / {
proxy_pass http://container-1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
जब सर्वर को रिबूट किया जाता है, तो डोकू यह सुनिश्चित करेगा कि डॉकर अपने आरंभिक रूप से तैनात पोर्ट (49162) में मैप किए गए पोर्ट के साथ एप्लिकेशन शुरू करता है, बजाय यादृच्छिक रूप से दूसरे पोर्ट को असाइन किए। इस नियतात्मक असाइनमेंट को प्राप्त करने के लिए, Dokku शुरू में असाइन किए गए पोर्ट को सहेजता है /home/git/container-1/PORT
और अगले लॉन्च पर यह PORT
पर्यावरण को इस मूल्य पर सेट करता है, और होस्ट-साइड और ऐप-साइड दोनों पर इस पोर्ट होने के लिए डॉकर के पोर्ट असाइनमेंट को मैप करता है। यह पहले लॉन्च के विरोध में है, जब डॉक्यू सेट करेगाPORT=5000
और फिर वीपीएस की तरफ जो भी रैंडम पोर्ट डोकु मैप्स होंगे, उन्हें ऐप साइड में 5000 तक कर देगा। यह दौर है (और भविष्य में भी बदल सकता है), लेकिन यह काम करता है!
वीएचएसटी, हुड के तहत काम करता है, यह है: एसएसएच के माध्यम से ऐप का एक जोरदार धक्का करने पर, डोकू उन हुक को निष्पादित करेगा जो अंदर रहते हैं /var/lib/dokku/plugins/nginx-vhosts
। ये हुक भी यहां डॉक्यू सोर्स कोड में स्थित हैं और nginx.conf
सही vhost सेटिंग्स के साथ फाइल लिखने के लिए जिम्मेदार हैं। यदि आपके पास यह निर्देशिका नहीं है /var/lib/dokku
, तो चलाने का प्रयास करें dokku plugins-install
।