2015-06-17 13 views
5

पर MySQL डीबी से कनेक्ट डॉकराइज्ड वेब ऐप डॉकर/डॉकर हब का उपयोग करने के लिए मैं अपने एप्लिकेशन परिनियोजन को माइग्रेट करना चाहता हूं। वर्तमान उत्पादन सेट अप अपाचे, टोमकैट और माईएसक्यूएल चलाने वाले 2 लिनक्स सर्वरों में बैलेंस ट्रैफिक लोड करना है। जावा वेब एप्लिकेशन जेडीबीसी के माध्यम से एक मास्टर + गुलाम MySQL डीबी से जुड़ता है।मेजबान

इस परिवर्तन के प्रभाव को कम करने के लिए, पहले चरण के रूप में मैं टोमकैट और वेब एप्लिकेशन को कंटेनरराइज करना चाहता हूं। अपाचे और MySQL को मेजबान (ओं) पर चल रहा है जैसा कि अब करता है।

समस्या जो मैं सामना कर रहा हूं वह मेजबान पर चल रहे MySQL डीबी के साथ, डॉकर कंटेनर में चल रहा है, एप्लिकेशन को कनेक्ट कर रहा है।

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

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

किसी ने ऐसा कुछ किया है? इस समस्या से सबसे अच्छी तरह से संपर्क करने के तरीके के बारे में किसी को भी कोई सुझाव मिला है।

संपादित यह सुझाव दिया है किया गया है कि "From inside of a Docker container, how do I connect to the localhost of the machine?" इस का डुप्लिकेट है - लेकिन मूल समस्या अभी भी मौजूद है। हर बार जब मैं किसी छवि से डॉकर कंटेनर बनाता हूं तो मुझे संभावित रूप से कंटेनर के लिए एक नया आईपी पता मिलता है जिसे डीबी तक पहुंच प्रदान करने की आवश्यकता होती है। मैं कोशिश करना चाहता था और ऐसा करने से बचाना चाहता था।

बहुत धन्यवाद

+0

क्या इस प्रक्रिया को आपके लिए एक विकल्प स्वचालित कर रहा है? मैं शायद उस प्रभाव का समाधान प्रदान कर सकता हूं। –

+0

@ जेम्स मिल्स यह दिखने लग रहा है कि यह आगे बढ़ने वाला है - मुझे लगता है कि मुझे इसे स्वचालित करने के लिए एक स्क्रिप्ट का पता लगाने में सक्षम होना चाहिए, धन्यवाद। – YanisTheYak

+0

मनमाने ढंग से खोल स्क्रिप्ट सहायता चलाने के लिए एक स्वचालित तरीका होगा? –

उत्तर

4

आप MySQL सर्वर और डोकर के link आदेश जो दो कंटेनरों जोड़ता है dockerized उपयोग करना चाहिए।

सबसे पहले अपने MySQL चलाएँ:

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

फिर link के साथ अपने अनुप्रयोग चलाने:

docker run --name some-app --link some-mysql:mysql -d app-that-uses-mysql

अब आप वातावरण चर से डेटाबेस के पते और पोर्ट प्राप्त कर सकते हैं:

docker exec -it some-app printenv

कुछ ऐसा ढूंढें: MYSQL_PORT_3306_TCP_PORT। अब आपको बस अपने ऐप में इन चरों का उपयोग करने की आवश्यकता है।

Docker MySQL Repo और Docker docs पर अधिक जानकारी।

+3

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

3

SQL GRANT कंटेनर से विशिष्ट आईपी के बजाय docker0 इंटरफेस से आईपी का उपयोग करना चाहिए।

इसका इस्तेमाल ढूंढने के लिए:

ifconfig | grep -A 1 docker0 

और आईपी inet addr: (संभवत: यह 172.17.42.1 हो जाएगा)

यह सभी कंटेनर डोकर इंटरफ़ेस से आने वाले की अनुमति देगा के बाद।