2016-12-23 11 views
11

के बीच अंतर मैं डॉकर सीख रहा हूं। मैं उन दो शर्तों को भ्रमित कर देता हूं। उदाहरण के लिए यहां एक डॉकर-कंपोज़ है जो दो सेवाओं redis और web-app परिभाषित करता है।डॉकर-कंपोज़: नेटवर्क और लिंक

services: 
    redis: 
    container_name: redis 
    image: redis:latest 
    ports: 
     - "6379:6379" 
    networks: 
     - lognet 

    app: 
    container_name: web-app 
    build: 
     context: . 
     dockerfile: Dockerfile 
    ports: 
     - "3000:3000" 
    volumes: 
     - ".:/webapp" 
    links: 
     - redis 
    networks: 
     - lognet 

networks: 
    lognet: 
    driver: bridge 

यह docker-compose फ़ाइल एक पुल नेटवर्क नामित lognet को परिभाषित करता है और सभी सेवाओं इस नेटवर्क से कनेक्ट होगा। जैसा कि मैं समझता हूं, यह क्रिया उन सेवाओं को दूसरों को देख सकती है। तो उपरोक्त मामले में ऐप सेवा को अभी भी रेडिस सेवा से लिंक करने की आवश्यकता क्यों है।

धन्यवाद

उत्तर

18

लिंक नेटवर्क द्वारा प्रतिस्थापित किए गए हैं। डॉकर उन्हें legacy feature that you should avoid using. के रूप में वर्णित करता है आप लिंक को सुरक्षित रूप से हटा सकते हैं और दो कंटेनर एक दूसरे को उनके सेवा नाम (या कंटेनर_नाम) से संदर्भित करने में सक्षम होंगे।

रचना के साथ, लिंक का एक अंतर्निहित निर्भरता बनाने का दुष्प्रभाव होता है। आपको इसे अधिक स्पष्ट depends_on सेक्शन के साथ प्रतिस्थापित करना चाहिए ताकि ऐप लालसा शुरू होने से पहले या उससे पहले चलाने का प्रयास न करे।

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

version: '2' 
# do not forget the version line, this file syntax is invalid without it 

services: 
    redis: 
    image: redis:latest 
    ports: 
     - "6379:6379" 
    networks: 
     - lognet 

    app: 
    container_name: web-app 
    build: 
     context: . 
     dockerfile: Dockerfile 
    ports: 
     - "3000:3000" 
    volumes: 
     - ".:/webapp" 
    depends_on: 
     - redis 
    networks: 
     - lognet 

networks: 
    lognet: 
    driver: bridge 
+0

मुझे लगता है कि @ ट्रैन डॉकर-कंपोज़ में 'लिंक' के बारे में पूछ रहा था, जिसे बहिष्कृत नहीं किया गया है। केवल 'डॉकर रन' कमांड में। https://forums.docker.com/t/are-links-deprecated-in-docker-compose/27348/2 –

+0

वे बहिष्कृत हैं, मैंने इसे पहले सीधे डॉकर कंपोज़ डेवलपर से सत्यापित कर लिया है। दस्तावेज़ीकरण से पता चलता है कि वे स्वाद मोड के साथ बिल्कुल समर्थित नहीं हैं, और उन्हें डॉकर कंपोज़ के साथ काम करने के लिए आपको एक सामान्य नेटवर्क की आवश्यकता है जो किसी भी तरह से DNS समर्थन प्रदान करेगा। https://docs.docker.com/compose/compose-file/#links – BMitch

संबंधित मुद्दे