हर कंटेनर का अपना लोकलहोस्ट होता है
प्रत्येक सेवा अपने कंटेनर में चलती है। उबंटू कंटेनर के नजरिए से, रेडिस लोकलहोस्ट पर नहीं सुन रहा है।
डॉकर नेटवर्क का उपयोग करें
अपने कंटेनरों को संवाद करने के लिए, उन्हें एक ही डॉकर नेटवर्क पर होना चाहिए। इसमें तीन चरण होते हैं:
- डॉकर नेटवर्क बनाएं
- अपने कंटेनरों के नाम दें
- अपने कंटेनर को आपके द्वारा बनाए गए नेटवर्क से जोड़ें
ऐसा करने से, कंटेनर अपने नामों का उपयोग करके एक-दूसरे से बात कर सकते हैं जैसे कि वे होस्टनाम थे।
इस बिल्ली की खाल निकालने के एक से अधिक तरीके हैं... मैं इस उत्तर में दो को देखूंगा, लेकिन शायद इसे करने के कुछ अन्य तरीके हैं जिनसे मैं परिचित नहीं हूं (उदाहरण के लिए, कुबेरनेट्स या झुंड का उपयोग करना)।पी>
इसे हाथ से करना
आप docker network
. का उपयोग करके इस एप्लिकेशन के लिए एक नेटवर्क बना सकते हैं आदेश।
# Show the current list of networks
docker network ls
# Create a network for your app
docker network create my_redis_app
जब आप रेडिस कंटेनर चलाते हैं, तो सुनिश्चित करें कि इसका एक नाम है, और इस नेटवर्क पर है। यदि आप चाहें तो (-p
. का उपयोग करके बंदरगाहों को बाहरी रूप से (macOS पर) दिखा सकते हैं ), लेकिन यह सिर्फ अन्य कंटेनरों के लिए रेडिस से बात करने के लिए आवश्यक नहीं है।
docker run -d -p 6379:6379 --name redis_server --network my_redis_app <IMAGE ID>
अब अपना उबंटू कंटेनर चलाएं। आप चाहें तो इसे नाम भी दे सकते हैं, लेकिन मैं इस उदाहरण में परेशान नहीं करूंगा क्योंकि यह कोई सेवा नहीं चला रहा है।
docker run -it --network my_redis_app ubuntu bash
अब उबंटू कंटेनर के अंदर से, आपको redis_server
नाम का उपयोग करके रेडिस तक पहुंचने में सक्षम होना चाहिए , मानो यह कोई DNS नाम हो।
लिखें का उपयोग करके इसे करना
मैं कंपोज़ का उपयोग करके इस तरह के सेटअप का निर्माण करता हूं, क्योंकि इसे YAML फ़ाइल (IMO) में लिखना आसान है। यहां उपरोक्त का एक उदाहरण दिया गया है, जिसे docker-compose.yml रूप में फिर से लिखा गया है:
version: '2'
services:
redis:
image: <IMAGE ID>
networks:
- my_redis_app
ports: 6379:6379
ubuntu:
image: ubuntu:latest
networks:
- my_redis_app
networks:
my_redis_app:
driver: bridge
इसके साथ, आप docker-compose up -d redis
run चला सकते हैं और एक विशिष्ट डॉकर नेटवर्क का उपयोग करके अपनी रेडिस सेवा ऑनलाइन करें। कंपोज़ आपके लिए नेटवर्क बनाएगा, अगर वह पहले से मौजूद नहीं है।
उबंटू कंटेनर को इस तरह चलाने के लिए यह कम समझ में आता है ... यह निश्चित रूप से इंटरैक्टिव है। लेकिन मुझे लगता है कि एक बार जब आप रेडिस जा रहे हैं, तो आप किसी प्रकार का एप्लिकेशन कंटेनर जोड़ देंगे, और शायद एक वेब प्रॉक्सी जैसे nginx ... बस दूसरों को services
के अंतर्गत रखें साथ ही, और आप उन सभी को एक साथ प्रबंधित कर सकते हैं।
चूंकि ubuntu
इंटरैक्टिव है, आप इसे अंतःक्रियात्मक रूप से चला सकते हैं:
# without -d, container is run interactively
docker-compose run ubuntu bash
और अब उबंटू में, आपको इसके नाम का उपयोग करके रेडिस से कनेक्ट करने में सक्षम होना चाहिए, जो इस उदाहरण में बस redis
है। ।