पंक रॉक बैंड की तरह लगता है। लेकिन यह बिल्कुल नया ऑर्केस्ट्रेशन तंत्र है, या बल्कि, डॉकर में उपलब्ध ऑर्केस्ट्रेशन का सुधार। इसे छोटा और मधुर रखने के लिए, यदि आप डॉकर के पुराने संस्करण का उपयोग कर रहे हैं, तो आपको डॉकर क्लस्टर बनाने के लिए मैन्युअल रूप से स्वार्म सेटअप करना होगा। संस्करण 1.12 से शुरू होकर, डॉकर इंजन एक मूल कार्यान्वयन के साथ आता है जो एक निर्बाध क्लस्टरिंग सेटअप की अनुमति देता है। हम यहां इसी कारण से हैं।
इस ट्यूटोरियल में, मैं आपको यह स्वाद देने की कोशिश करूंगा कि क्लस्टरिंग की बात आने पर डॉकर क्या कर सकता है। यह लेख किसी भी तरह से सर्व-समावेशी (बेड एंड ब्रेकफास्ट) या सर्वज्ञानी नहीं है, लेकिन इसमें आपको अपनी क्लस्टरिंग यात्रा पर ले जाने के लिए क्या है। मेरा अनुसरण करें।
प्रौद्योगिकी अवलोकन
मेरे लिए बहुत विस्तृत और अत्यधिक उपयोगी डॉकर दस्तावेज़ीकरण लेख को दोहराना शर्म की बात होगी, इसलिए मैं प्रौद्योगिकी का केवल एक संक्षिप्त अवलोकन रूपरेखा करूंगा। तो हमारे पास डॉकर है, है ना। अब, आप एक से अधिक सर्वर का उपयोग डॉकर होस्ट के रूप में करना चाहते हैं, लेकिन आप चाहते हैं कि वे एक ही तार्किक इकाई से संबंधित हों। इसलिए, क्लस्टरिंग।
आइए एक के क्लस्टर से शुरू करें। जब आप एक होस्ट पर स्वार्म आरंभ करते हैं, तो यह क्लस्टर का मैनेजर बन जाता है। तकनीकी रूप से बोलते हुए, यह एक नोड का सर्वसम्मति समूह बन जाता है। पीछे गणितीय तर्क Raft एल्गोरिदम पर आधारित है। मैनेजर कार्यों को शेड्यूल करने के लिए जिम्मेदार है। कार्य वर्कर नोड्स को सौंपे जाएंगे, एक बार और यदि वे स्वार्म में शामिल होते हैं। यह Node API द्वारा नियंत्रित होता है। मुझे API शब्द से नफरत है, लेकिन मुझे यहां इसका उपयोग करना होगा।
Service API इस कार्यान्वयन का दूसरा घटक है। यह मैनेजर नोड्स को स्वार्म में सभी नोड्स पर वितरित सेवाएं बनाने की अनुमति देता है। सेवाएं प्रतिकृति हो सकती हैं, जिसका अर्थ है कि वे संतुलन तंत्र का उपयोग करके क्लस्टर में फैली हुई हैं, या वे वैश्विक हो सकती हैं, जिसका अर्थ है कि सेवा का एक इंस्टेंस प्रत्येक नोड पर चल रहा होगा।
यहां बहुत कुछ काम कर रहा है, लेकिन यह आपको प्राइम और पंप करने के लिए पर्याप्त है। अब, आइए कुछ वास्तविक हैंड्स-ऑन सामान करते हैं। हमारा लक्ष्य प्लेटफॉर्म CentOS 7.2 है, जो काफी दिलचस्प है, क्योंकि जब मैंने यह ट्यूटोरियल लिखा था, तब इसके रेपो में केवल डॉकर 1.10 था, और मुझे फ्रेमवर्क को मैन्युअल रूप से अपग्रेड करना पड़ा स्वार्म का उपयोग करने के लिए। हम इसे एक अलग ट्यूटोरियल में चर्चा करेंगे। फिर, हमारे पास एक फॉलो-अप गाइड भी होगा, जहां हम अपने क्लस्टर में नए नोड्स जोड़ेंगे, और हम फेडोरा के साथ एक असममित सेटअप आज़माएंगे। इस बिंदु पर, कृपया मान लें कि सही सेटअप लागू है, और आइए एक क्लस्टर सेवा चालू और चलाएं।
इमेज और सेवा सेटअप करें
मैं एक लोड-बैलेंस्ड Apache सेवा सेटअप करने की कोशिश करूंगा, कई इंस्टेंस के साथ एक ही IP पते के माध्यम से सामग्री परोसते हुए। काफी मानक। यह उन विशिष्ट कारणों को भी उजागर करता है जिनकी वजह से आप क्लस्टर कॉन्फ़िगरेशन के साथ जाएंगे - उपलब्धता, अतिरेक, क्षैतिज स्केलिंग, और प्रदर्शन। बेशक, आपको नेटवर्किंग टुकड़े के साथ-साथ स्टोरेज को भी ध्यान में रखना होगा, लेकिन यह इस गाइड के तत्काल दायरे से परे है।
वास्तविक Dockerfile टेम्पलेट आधिकारिक रिपॉजिटरी में httpd के तहत उपलब्ध है। आपको शुरू करने के लिए न्यूनतम सेटअप की आवश्यकता होगी। इमेज कैसे डाउनलोड करें, अपनी खुद की कैसे बनाएं और ऐसे विवरण मेरे परिचय गाइड में उपलब्ध हैं, जो इस ट्यूटोरियल की शुरुआत में लिंक किया गया है।
docker build -t my-apache2 . Sending build context to Docker daemon 2.048 kB Step 1 : FROM httpd:2.4 Trying to pull repository docker.io/library/httpd ... 2.4: Pulling from docker.io/library/httpd 8ad8b3f87b37: Pull complete c95e1f92326d: Pull complete 96e8046a7a4e: Pull complete 00a0d292c371: Pull complete 3f7586acab34: Pull complete Digest: sha256:3ad4d7c4f1815bd1c16788a57f81b413...a915e50a0d3a4 Status: Downloaded newer image for docker.io/httpd:2.4 ---> fe3336dd034d Step 2 : COPY ../public-html/ /usr/local/apache2/htdocs/ ...
इससे आगे जाने से पहले, आपको एक सिंगल इंस्टेंस शुरू करना चाहिए और देखना चाहिए कि आपका कंटेनर बिना किसी त्रुटि के बनाया गया है और आप वेब सर्वर से जुड़ सकते हैं। एक बार जब हम इसे स्थापित कर लेते हैं, तो हम एक वितरित सेवा बनाएंगे।
docker run -dit --name my-running-app my-apache2
IP पता जांचें, ब्राउज़र में डालें, देखें क्या होता है।
स्वार्म आरंभ और सेटअप
अगला कदम स्वार्म को चालू करना है। यहां सबसे बुनियादी कमांड है जो आपको चलाएगी, और यह डॉकर ब्लॉग में उपयोग किए गए उदाहरण के समान है:
docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
यहां हमारे पास क्या है? हम frontend नामक एक सेवा बना रहे हैं, पांच कंटेनर इंस्टेंस के साथ। हम अपने होस्ट पोर्ट 80 को कंटेनर पोर्ट 80 के साथ बाइंड भी कर रहे हैं। और हम इसके लिए अपनी ताज़ा बनाई गई Apache इमेज का उपयोग कर रहे हैं। हालांकि, जब आप ऐसा करते हैं, तो आपको निम्न त्रुटि मिलेगी:
docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
इसका मतलब है कि आपने वर्तमान होस्ट (नोड) को स्वार्म मैनेजर बनने के लिए सेटअप नहीं किया है। आपको या तो स्वार्म इनिट करने की आवश्यकता है या किसी मौजूदा में शामिल होने की। चूंकि हमारे पास अभी तक एक नहीं है, हम अब इसे आरंभ करेंगे:
docker swarm init Swarm initialized: current node (dm58mmsczqemiikazbfyfwqpd) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-4ofd46a2nfyvrqwu8w5oeetukrbylyznxla 9srf9vxkxysj4p8-eu5d68pu5f1ci66s7w4wjps1u \ 10.0.2.15:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
आउटपुट काफी आत्म-व्याख्यात्मक है। हमने एक स्वार्म बनाया है। नए नोड्स को स्वार्म में शामिल होने के लिए सही टोकन का उपयोग करने की आवश्यकता होगी। आपके पास IP पता और पोर्ट भी पहचाना गया है, यदि आपको फ़ायरवॉल नियमों की आवश्यकता है। इसके अलावा, आप स्वार्म में मैनेजर भी जोड़ सकते हैं। अब, सेवा बनाने की कमांड को फिर से चलाएं:
docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest 6lrx1vhxsar2i50is8arh4ud1
कनेक्टिविटी का परीक्षण करें
अब, आइए जांचें कि हमारी सेवा वास्तव में काम करती है। एक तरह से, यह वैसा ही है जैसा हमने Vagrant और coreOS के साथ किया था। आखिरकार, अवधारणाएं लगभग समान हैं। यह सिर्फ एक ही विचार का अलग कार्यान्वयन है। पहला, docker ps को सही आउटपुट दिखाना चाहिए। आपके पास बनाई गई सेवा के लिए कई प्रतिकृतियां होनी चाहिए।
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cda532f67d55 my-apache2:latest "httpd-foreground" 2 minutes ago Up 2 minutes 80/tcp frontend.1.2sobjfchdyucschtu2xw6ms9a 75fe6e0aa77b my-apache2:latest "httpd-foreground" 2 minutes ago Up 2 minutes 80/tcp frontend.4.ag77qtdeby9fyvif5v6c4zcpc 3ce824d3151f my-apache2:latest "httpd-foreground" 2 minutes ago Up 2 minutes 80/tcp frontend.2.b6fqg6sf4hkeqs86ps4zjyq65 eda01569181d my-apache2:latest "httpd-foreground" 2 minutes ago Up 2 minutes 80/tcp frontend.5.0rmei3zeeh8usagg7fn3olsp4 497ef904e381 my-apache2:latest "httpd-foreground" 2 minutes ago Up 2 minutes 80/tcp frontend.3.7m83qsilli5dk8rncw3u10g5a
मैंने विभिन्न, गैर-डिफ़ॉल्ट पोर्ट के साथ भी परीक्षण किया, और यह अच्छी तरह से काम करता है। आपके पास सर्वर से जुड़ने और प्रतिक्रिया प्राप्त करने के तरीके में बहुत छूट है। आप सही पोर्ट के साथ लोकलहोस्ट या डॉकर इंटरफ़ेस IP पते का उपयोग कर सकते हैं। नीचे दिया गया उदाहरण पोर्ट 1080 दिखाता है:
अब, यह एक बहुत मोटा, बहुत सरल शुरुआत है। असली चुनौती अनुकूलित, स्केलेबल सेवाएं बनाने में है, लेकिन उन्हें उचित तकनीकी उपयोग के मामले की आवश्यकता होती है। इसके अलावा, आपको यह जानने के लिए docker info और docker service (inspect|ps) कमांड का भी उपयोग करना चाहिए कि आपका क्लस्टर कैसे व्यवहार कर रहा है।
संभावित समस्याएं
आप डॉकर और स्वार्म के साथ खेलते समय कुछ छोटी (या इतनी छोटी नहीं) समस्याओं का सामना कर सकते हैं। उदाहरण के लिए, SELinux शिकायत कर सकता है कि आप कुछ अवैध करने की कोशिश कर रहे हैं। हालांकि, त्रुटियों और चेतावनियों को आपको बहुत अधिक बाधित नहीं करना चाहिए।
डॉकर सर्विस एक डॉकर कमांड नहीं है
जब आप एक प्रतिकृति सेवा शुरू करने के लिए आवश्यक कमांड चलाने की कोशिश करते हैं, तो आपको एक त्रुटि मिलती है जो कहती है docker: 'service' is not a docker command। इसका मतलब है कि आपके पास डॉकर का सही संस्करण नहीं है (-v से जांचें)। हम इसे एक फॉलो-अप ट्यूटोरियल में ठीक करेंगे।
docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest docker: 'service' is not a docker command.
डॉकर टैग पहचाना नहीं गया
आप निम्न त्रुटि भी देख सकते हैं:
docker service create -name frontend -replicas 5 -p 80:80/tcp my-apache2:latest Error response from daemon: rpc error: code = 3 desc = ContainerSpec: "-name" is not a valid repository/tag
इसके आसपास कई चर्चा थ्रेड हैं। त्रुटि वास्तव में काफी मासूम हो सकती है। आपने कमांड को ब्राउज़र से कॉपी किया होगा, और हाइफ़न सही ढंग से पार्स नहीं हो सकते हैं। बस इतना सरल।
अधिक पठन
इस विषय पर कहने के लिए बहुत कुछ है, जिसमें डॉकर 1.12 से पहले का स्वार्म कार्यान्वयन, साथ ही डॉकर इंजन का वर्तमान संस्करण शामिल है। कृपया आलसी न हों और कुछ समय पढ़ने में बिताएं:
- डॉकर स्वार्म अवलोकन (स्टैंडअलोन स्वार्म इंस्टॉलेशन के लिए)
- उत्पादन के लिए एक स्वार्म क्लस्टर बनाएं (स्टैंडअलोन सेटअप के लिए)
- एक डॉकर स्वार्म इंस्टॉल करें और बनाएं (स्टैंडअलोन सेटअप के लिए)
- डॉकर इंजन स्वार्म अवलोकन (संस्करण 1.12 के लिए)
- स्वार्म मोड के साथ शुरुआत करें (संस्करण 1.12 के लिए)
निष्कर्ष
वहां आप जाते हैं। इस बिंदु पर कुछ भी भव्य नहीं, लेकिन मुझे विश्वास है कि आप लेख को उपयोगी पाएंगे। यह कई प्रमुख अवधारणाओं को कवर करता है, स्वार्म मोड कैसे काम करता है और क्या करता है इसका एक अवलोकन है, और हमने सफलतापूर्वक अपने स्वयं के वेब सर्वर इमेज को डाउनलोड और बनाया और फिर इसके कई क्लस्टर्ड इंस्टेंस चलाए। हमने इसे अभी एक नोड पर किया है, लेकिन हम भविष्य में विस्तार करेंगे। साथ ही, हमने कुछ सामान्य समस्याओं से निपटा।
मुझे आशा है कि आप इस गाइड को दिलचस्प पाएंगे। डॉकर पर मेरे पिछले काम के साथ मिलकर, यह आपको इमेज, नेटवर्किंग स्टैक, स्टोरेज, और अब क्लस्टर के साथ कैसे काम करना है, इसकी एक अच्छी समझ देनी चाहिए। वार्मिंग अप। वास्तव में, आनंद लें और जल्द ही डॉकर पर नए नए ट्यूटोरियल के साथ मिलते हैं। मैं बस खुद को कंटेन [sic] नहीं कर सकता।
Cheers.