सबसे आसान तरीका है --link का उपयोग करना, हालाँकि docker के नए संस्करण उससे दूर जा रहे हैं और वास्तव में स्विच को जल्द ही हटा दिया जाएगा।
नीचे दिए गए लिंक दो कंटेनरों को जोड़ने पर एक अच्छा भी प्रदान करता है। आप संलग्न भाग को छोड़ सकते हैं, क्योंकि यह सिर्फ एक उपयोगी है कि छवियों में आइटम कैसे जोड़ें।
https://deis.com/blog/2016/connecting-docker-containers-1/
जिस हिस्से में आप रुचि रखते हैं, वह दो कंटेनरों के बीच का संचार है। सबसे आसान तरीका है, वेबसर्वर कंटेनर से नाम से DB कंटेनर को देखें।
उदाहरण:
आपने डीबी कंटेनर db1और वेबसर्वर कंटेनर का नाम दिया web0। कंटेनर दोनों पुल नेटवर्क पर होना चाहिए, जिसका अर्थ है कि वेब कंटेनर को DB कंटेनर से कनेक्ट करने में सक्षम होना चाहिए।
इसलिए यदि आपके पास आपके ऐप के लिए एक वेब कॉन्फिग फ़ाइल है, तो DB होस्ट के लिए आप नाम का उपयोग करेंगे db1।
यदि आप docker के पुराने संस्करण का उपयोग कर रहे हैं, तो आपको --link का उपयोग करना चाहिए।
उदाहरण:
चरण 1: docker run --name db1 oracle/database:12.1.0.2-ee
तब जब आप वेब ऐप शुरू करते हैं। उपयोग:
चरण 2: docker run --name web0 --link db1 webapp/webapp:3.0
और वेब ऐप को डीबी से जोड़ा जाएगा। हालाँकि, जैसा कि मैंने कहा था - जल्द ही स्विच को हटा दिया जाएगा।
मैं इसके बजाय docker कंपोज़ का उपयोग करूंगा, जो आपके लिए एक नेटवर्क बनाएगा। तथापि; आपको अपने सिस्टम के लिए डॉक कम्पोज़ डाउनलोड करने की आवश्यकता होगी। https://docs.docker.com/compose/install/#prerequisites
एक उदाहरण सेटअप इस तरह है:
फ़ाइल का नाम है base.yml
version: "2"
services:
webserver:
image: "moodlehq/moodle-php-apache:7.1
depends_on:
- db
volumes:
- "/var/www/html:/var/www/html"
- "/home/some_user/web/apache2_faildumps.conf:/etc/apache2/conf-enabled/apache2_faildumps.conf"
environment:
MOODLE_DOCKER_DBTYPE: pgsql
MOODLE_DOCKER_DBNAME: moodle
MOODLE_DOCKER_DBUSER: moodle
MOODLE_DOCKER_DBPASS: "m@0dl3ing"
HTTP_PROXY: "${HTTP_PROXY}"
HTTPS_PROXY: "${HTTPS_PROXY}"
NO_PROXY: "${NO_PROXY}"
db:
image: postgres:9
environment:
POSTGRES_USER: moodle
POSTGRES_PASSWORD: "m@0dl3ing"
POSTGRES_DB: moodle
HTTP_PROXY: "${HTTP_PROXY}"
HTTPS_PROXY: "${HTTPS_PROXY}"
NO_PROXY: "${NO_PROXY}"
यह नेटवर्क को एक सामान्य नाम देगा, मैं अपने सिर के ऊपर से याद नहीं रख सकता कि यह नाम क्या है, जब तक कि आप --name स्विच का उपयोग न करें।
अर्थात docker-compose --name setup1 up base.yml
नोट: यदि आप --नाम स्विच का उपयोग करते हैं, तो आपको इसे तब उपयोग करने की आवश्यकता होगी जब कभी कॉल करने वाला डॉकिंग कॉल करता है, इसलिए docker-compose --name setup1 downऐसा आपके पास अधिक हो सकता है तो वेबसर्वर और डीबी का एक उदाहरण है, और इस मामले में, इसलिए डॉक कंपोजर जानता है कि क्या उदाहरण आप के खिलाफ आदेश चलाना चाहते हैं; और यह भी कि आप एक बार में एक और अधिक हो सकता है। CI / CD के लिए बढ़िया, यदि आप समान सर्वर पर समानांतर में परीक्षण चला रहे हैं।
डॉकर कंपोज़ में भी डॉकटर के समान कमांड हैं docker-compose --name setup1 exec webserver do_some_command
सबसे अच्छा हिस्सा है, अगर आप db या ऐसा कुछ बदलना चाहते हैं, जिसमें यूनिट टेस्ट के लिए आप एक अतिरिक्त .yml फ़ाइल को कमांड में शामिल कर सकते हैं और यह समान नामों के साथ किसी भी आइटम को अधिलेखित कर देगा, मुझे लगता है कि यह एक महत्वपूर्ण => मूल्य प्रतिस्थापन के रूप में है। ।
उदाहरण:
db.yml
version: "2"
services:
webserver:
environment:
MOODLE_DOCKER_DBTYPE: oci
MOODLE_DOCKER_DBNAME: XE
db:
image: moodlehq/moodle-db-oracle
फिर कॉल करो docker-compose --name setup1 up base.yml db.yml
यह db को अधिलेखित कर देगा। एक अलग सेटअप के साथ। जब प्रत्येक कंटेनर से इन सेवाओं से जुड़ने की आवश्यकता होती है, तो आप इस सेवा के तहत सेट नाम का उपयोग करते हैं, इस मामले में, वेबसर्वर और डीबी।
मुझे लगता है कि यह वास्तव में आपके मामले में अधिक उपयोगी सेटअप हो सकता है। चूंकि आप उन सभी चरों को सेट कर सकते हैं जिनकी आपको yml फ़ाइलों में आवश्यकता होती है और जब आप उन्हें शुरू करते हैं तो केवल docker कंपोज़ के लिए कमांड चलाते हैं। तो एक और इसे शुरू करें और इसे सेटअप भूल जाएं।
नोट: मैंने उपयोग नहीं किया --portकमांड, चूंकि कंटेनर को उजागर करने के लिए कंटेनर-> कंटेनर संचार की आवश्यकता नहीं है। यह केवल तभी आवश्यक है जब आप होस्ट को कंटेनर से कनेक्ट करना चाहते हैं, या होस्ट के बाहर से आवेदन करना चाहते हैं। यदि आप पोर्ट को उजागर करते हैं, तो पोर्ट सभी संचार के लिए खुला है जिसे होस्ट अनुमति देता है। तो पोर्ट 80 पर वेब को उजागर करना भौतिक मेजबान पर एक वेबसर्वर शुरू करने के समान है और यदि बाहरी इसे अनुमति देता है, तो बाहरी कनेक्शन की अनुमति देगा। इसके अलावा, अगर आप एक बार में एक वेब ऐप चलाना चाहते हैं, तो किसी भी कारण से, तो पोर्ट 80 को उजागर करने से आप अतिरिक्त वेब-वे को चलाने से रोक सकते हैं यदि आप उस पोर्ट पर भी एक्सपोज़ करने की कोशिश करते हैं। इसलिए, CI / CD के लिए बंदरगाहों को उजागर नहीं करना सबसे अच्छा है, और यदि --name स्विच के साथ docker कंपोज़ का उपयोग करते हैं, तो सभी कंटेनर अपने स्वयं के नेटवर्क पर होंगे, इसलिए वे टकराएंगे नहीं। तो आपके पास बहुत सारे कंटेनर होंगे।
अद्यतन: आगे सुविधाओं का उपयोग करने और यह देखने के बाद कि दूसरों ने जेनकिन्स जैसे सीआईसीडी कार्यक्रमों के लिए कैसे किया है। नेटवर्क भी एक व्यवहार्य समाधान है।
उदाहरण:
docker network create test_network
उपरोक्त कमांड एक "test_network" बनाएगा जिसे आप अन्य कंटेनरों को भी संलग्न कर सकते हैं। जिसे --networkस्विच ऑपरेटर के साथ आसान बनाया गया है ।
उदाहरण:
docker run \
--detach \
--name db1 \
--network test_network \
-e MYSQL_ROOT_PASSWORD="${DBPASS}" \
-e MYSQL_DATABASE="${DBNAME}" \
-e MYSQL_USER="${DBUSER}" \
-e MYSQL_PASSWORD="${DBPASS}" \
--tmpfs /var/lib/mysql:rw \
mysql:5
बेशक, अगर आपके पास प्रॉक्सी नेटवर्क सेटिंग्स हैं, तो आपको "-e" या "-env-file" स्विच स्टेटमेंट का उपयोग करके उन कंटेनरों में पास करना चाहिए। तो कंटेनर इंटरनेट के साथ संवाद कर सकता है। डॉकर का कहना है कि प्रॉक्सी सेटिंग्स को डॉकटर के नए संस्करणों में कंटेनर द्वारा अवशोषित किया जाना चाहिए; हालाँकि, मैं अभी भी आदत के रूप में उन्हें पारित करता हूं। यह "--लिंक" स्विच के लिए प्रतिस्थापन है जो दूर जा रहा है। एक बार जब कंटेनर आपके द्वारा बनाए गए नेटवर्क से जुड़ जाते हैं, तब भी आप कंटेनर के 'नाम' का उपयोग करके अन्य कंटेनरों से उन कंटेनरों को संदर्भित कर सकते हैं। ऊपर दिए गए उदाहरण के अनुसार db1। आपको बस यह सुनिश्चित करना है कि सभी कंटेनर एक ही नेटवर्क से जुड़े हैं, और आप जाने के लिए अच्छे हैं।
एक cicd पाइपलाइन में नेटवर्क का उपयोग करने के विस्तृत उदाहरण के लिए, आप इस लिंक का उल्लेख कर सकते हैं:
https://git.in.moodle.com/integration/nightlyscripts/blob/master/runner/master/run.sh
कौन सी स्क्रिप्ट है जो मडल के लिए एक विशाल एकीकरण परीक्षणों के लिए जेनकिंस में चलाई गई है, लेकिन विचार / उदाहरण का उपयोग कहीं भी किया जा सकता है। मुझे उम्मीद है कि इससे दूसरों को मदद मिलेगी।