2016-11-29 15 views
8

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

मैं क्या मतलब है, का कहना है कि मैं एक microservice जो बाहर से पहुँचा जा सकता है, उदाहरण के लिए: users.mycompany.com, इसके माध्यम से microservice कंटेनर जो उपयोगकर्ताओं एपीआई से निपटने है करने के लिए

फिर जब मैं जाना होगा customer-list.mycompany.com तक पहुँचने का प्रयास, यह microservice कंटेनर जो ग्राहक सूचियों

बेशक

से निपटने है के माध्यम से जाना होगा डोकर DNS मैं उन तक पहुँचने और उन्हें एक डोकर नेटवर्क में लिंक कर सकते हैं का उपयोग कर, लेकिन इस कंटेनर में कंटेनर तक पहुंचने के लिए केवल वास्तव में काम करता है, लेकिन कंटेनर के लिए इंटरनेट नहीं।

क्या कोई जानता है कि मुझे यह कैसे करना चाहिए? या इसे स्थापित करने का सबसे अच्छा तरीका है।

उत्तर

9

तो, आपको पोर्ट प्रकाशन की अवधारणा का उपयोग करने की आवश्यकता है, ताकि आपके कंटेनर से एक पोर्ट आपके होस्ट से पोर्ट के माध्यम से पहुंच योग्य हो। इस सेटअप एक nginx कि users.mycompany.com myhost पर रीडायरेक्ट करेगा से एक सरल proxy_pass उपयोग करके, आप कर सकते हैं: (यह मानते हुए कि आप 1337 करने के लिए अपने बंदरगाह प्रकाशित ) 1337

तो, यदि आप ऐसा करना चाहते हैं, कंटेनर का उपयोग करने के लिए 5000: आप का उपयोग कर एक निश्चित बंदरगाह का पर्दाफाश करने के अपने कंटेनर सेटअप करना होगा:

docker run -d -p 5000:5000 training/webapp # publish image port 5000 to host port 5000 

तब आप अपने मेजबान से अपने स्थानीय होस्ट कर्ल कर सकते हैं।

curl -X GET localhost:5000 

आप सेटअप करने के लिए सामने एक डोमेन नाम चाहते हैं, आप एक वेबसर्वर उदाहरण है कि आप proxy_pass आपके कंटेनर में आपके होस्टनाम के लिए अनुमति देता है की आवश्यकता होगी।

nginx में

अर्थात:

server { 
    listen 80; 
    server_name users.mycompany.com; 
    location/{ 
    proxy_pass http://localhost:5000; 
    } 
} 

मैं तुम्हें this tutorial का पालन करने की सलाह देंगे, और शायद docker run reference

0

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

  1. डोकर अवगत DNS समाधान के कुछ तैनात (मैं तुम्हें SkyDNSv1/SkyDock उपयोग करने के लिए सुझाव है);

  2. अपने होस्ट को इस DNS के साथ काम करने के लिए कॉन्फ़िगर करें (डिफ़ॉल्ट रूप से SkyDNS कंटेनरों को नाम से एक-दूसरे को जानता है, लेकिन होस्ट को इसके बारे में पता नहीं है);

  3. स्पष्ट --hostname के साथ अपने कंटेनर चलाएं (आप शायद योजना container_name.image_name.dev.skydns.local का उपयोग करेगा)

आप चरण # 2 छोड़ सकते हैं और भी कंटेनर के अंदर आपके ब्राउज़र चला सकते हैं: यह मेजबाननाम द्वारा वेब एप्लिकेशन कंटेनर की खोज करेगा।