Docker
डॉकर झुंड मोड
खोज…
परिचय
एक झुंड डोकर इंजन (या नोड्स ) की एक संख्या है जो सामूहिक रूप से सेवाओं को तैनात करता है । झुंड का उपयोग कई भौतिक, आभासी या क्लाउड मशीनों में प्रसंस्करण वितरित करने के लिए किया जाता है।
वाक्य - विन्यास
झुंड का प्रारंभ करें : docker swarm init [विकल्प]
नोड और / या प्रबंधक के रूप में एक झुंड में शामिल हों : docker झुंड में शामिल हों [विकल्प] HOST: PORT
एक नई सेवा बनाएँ : docker सेवा बनाएं [विकल्प] IMAGE [COMMAND] [ARG ...]
एक या अधिक सेवाओं पर विस्तृत जानकारी प्रदर्शित करें : docker सेवा निरीक्षण [विकल्प] सेवा [सेवा ...]
सूची सेवाएँ : docker service ls [विकल्प]
एक या अधिक सेवाएँ निकालें : docker service rm SERVICE [सेवा ...]
एक या एक से अधिक प्रतिकृति सेवाएँ : docker service scale SERVICE = REPLICAS [सेवा = REPLICAS ...]
एक या अधिक सेवाओं के कार्यों को सूचीबद्ध करें : docker service ps [विकल्प] सेवा [सेवा ...]
एक सेवा को अद्यतन करें: docker सेवा अद्यतन [विकल्प] सेवा
टिप्पणियों
झुंड मोड निम्नलिखित विशेषताएं लागू करता है:
- क्लस्टर प्रबंधन डॉकर इंजन के साथ एकीकृत
- विकेंद्रीकृत डिजाइन
- घोषणा सेवा मॉडल
- स्केलिंग
- वांछित राज्य सामंजस्य
- मल्टी-होस्ट नेटवर्किंग
- सेवा खोज
- भार संतुलन
- डिफ़ॉल्ट रूप से सुरक्षित डिजाइन
- रोलिंग अद्यतन
झुंड यात्रा के संबंध में अधिक आधिकारिक डॉकटर प्रलेखन के लिए: झुंड मोड अवलोकन
झुंड मोड सीएलआई कमांड
प्रलेखन के लिए कमांड विवरण पर क्लिक करें
docker swarm init [OPTIONS]
एक नोड और / या प्रबंधक के रूप में एक झुंड में शामिल हों
docker swarm join [OPTIONS] HOST:PORT
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
एक या अधिक सेवाओं पर विस्तृत जानकारी प्रदर्शित करें
docker service inspect [OPTIONS] SERVICE [SERVICE...]
docker service ls [OPTIONS]
docker service rm SERVICE [SERVICE...]
स्केल एक या कई प्रतिकृति सेवाएँ
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
एक या अधिक सेवाओं के कार्यों को सूचीबद्ध करें
docker service ps [OPTIONS] SERVICE [SERVICE...]
docker service update [OPTIONS] SERVICE
डॉकटर-मशीन और वर्चुअलबॉक्स का उपयोग करके लिनक्स पर एक झुंड बनाएं
# Create the nodes
# In a real world scenario we would use at least 3 managers to cover the fail of one manager.
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox worker1
# Create the swarm
# It is possible to define a port for the *advertise-addr* and *listen-addr*, if none is defined the default port 2377 will be used.
docker-machine ssh manager \
docker swarm init \
--advertise-addr $(docker-machine ip manager)
--listen-addr $(docker-machine ip manager)
# Extract the Tokens for joining the Swarm
# There are 2 different Tokens for joining the swarm.
MANAGER_TOKEN=$(docker-machine ssh manager docker swarm join-token manager --quiet)
WORKER_TOKEN=$(docker-machine ssh manager docker swarm join-token worker --quiet)
# Join a worker node with the worker token
docker-machine ssh worker1 \
docker swarm join \
--token $WORKER_TOKEN \
--listen-addr $(docker-machine ip worker1) \
$(docker-machine ip manager):2377
कार्यकर्ता और प्रबंधक को टोकन में शामिल करें
जब एक झुंड में नए नोड्स के प्रावधान को स्वचालित करते हैं, तो आपको यह जानना होगा कि झुंड के लिए सही जुड़ाव टोकन के साथ-साथ प्रबंधक के विज्ञापित पते के लिए क्या है। आप मौजूदा प्रबंधक नोड में से किसी पर निम्न आदेशों को चलाकर इसका पता लगा सकते हैं:
# grab the ipaddress:port of the manager (second last line minus the whitespace)
export MANAGER_ADDRESS=$(docker swarm join-token worker | tail -n 2 | tr -d '[[:space:]]')
# grab the manager and worker token
export MANAGER_TOKEN=$(docker swarm join-token manager -q)
export WORKER_TOKEN=$(docker swarm join-token worker -q)
-Q विकल्प केवल टोकन को आउटपुट करता है। इस विकल्प के बिना आपको झुंड के पंजीकरण के लिए पूरी कमांड मिलती है।
फिर नए प्रावधान वाले नोड्स पर, आप झुंड का उपयोग करके शामिल हो सकते हैं।
docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS
नमस्ते विश्व अनुप्रयोग
आमतौर पर आप एक प्रतिकृति और ऑर्केस्ट्रेटेड एप्लिकेशन बनाने के लिए सेवाओं का ढेर बनाना चाहते हैं।
एक विशिष्ट आधुनिक वेब एप्लिकेशन में एक डेटाबेस, एपीआई, फ्रंटेंड और रिवर्स प्रॉक्सी शामिल हैं।
हठ
डेटाबेस को दृढ़ता की आवश्यकता होती है, इसलिए हमें कुछ फाइल सिस्टम की आवश्यकता होती है जो एक झुंड में सभी नोड्स में साझा किया जाता है। यह NAS, NFS सर्वर, GFS2 या कुछ और हो सकता है। इसे स्थापित करना यहां दायरे से बाहर है। वर्तमान में डॉकर में शामिल नहीं है और एक झुंड में दृढ़ता का प्रबंधन नहीं करता है। यह उदाहरण मानता है कि वहाँ /nfs/
साझा स्थान सभी नोड्स पर आरोहित है।
नेटवर्क
एक दूसरे के साथ संवाद करने में सक्षम होने के लिए, एक झुंड में सेवाओं को एक ही नेटवर्क पर होना चाहिए।
एक आईपी रेंज (यहां 10.0.9.0/24
) और नेटवर्क नाम ( hello-network
) चुनें और एक कमांड चलाएं:
docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--opt encrypted \
hello-network
डेटाबेस
पहली सेवा जो हमें चाहिए वह एक डेटाबेस है। एक उदाहरण के रूप में postgresql का उपयोग करते हैं। nfs/postgres
में डेटाबेस के लिए एक फ़ोल्डर बनाएँ और इसे चलाएं:
docker service create --replicas 1 --name hello-db \
--network hello-network -e PGDATA=/var/lib/postgresql/data \
--mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
kiasaki/alpine-postgres:9.5
सूचना है कि हम का उपयोग किया है --network hello-network
और --mount
विकल्प।
एपीआई
एपीआई बनाना इस उदाहरण के दायरे से बाहर है, तो आइए दिखाते हैं कि आपके पास username/hello-api
तहत एपीआई छवि है।
docker service create --replicas 1 --name hello-api \
--network hello-network \
-e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
username/hello-api
ध्यान दें कि हमने अपनी डेटाबेस सेवा का एक नाम दिया है। डॉकर झुंड में एक एम्बेडेड राउंड-रॉबिन डीएनएस सर्वर है, इसलिए एपीआई अपने DNS नाम का उपयोग करके डेटाबेस से कनेक्ट करने में सक्षम होगा।
प्रॉक्सी को उलट दें
आइए हमारे एपीआई की बाहरी दुनिया की सेवा करने के लिए नेग्नेक्स सेवा बनाएं। किसी साझा स्थान में nginx config फ़ाइलों को बनाएँ और इसे चलाएं:
docker service create --replicas 1 --name hello-load-balancer \
--network hello-network \
--mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
-p 80:80 \
nginx:1.10-alpine
ध्यान दें कि हमने पोर्ट को प्रकाशित करने के लिए -p
विकल्प का उपयोग किया है। यह पोर्ट झुंड में किसी भी नोड के लिए उपलब्ध होगा।
नोड हिमस्खलन
झुंड मोड नोड उपलब्धता:
- सक्रिय का मतलब है कि अनुसूचक नोड को कार्य सौंप सकता है।
- ठहराव का अर्थ है कि शेड्यूलर नोड को नए कार्य असाइन नहीं करता है, लेकिन मौजूदा कार्य चल रहे हैं।
- नाली का मतलब है कि शेड्यूलर नोड को नए कार्य आवंटित नहीं करता है। शेड्यूलर किसी भी मौजूदा कार्य को बंद कर देता है और उपलब्ध नोड पर शेड्यूल करता है।
मोड उपलब्धता बदलने के लिए:
#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls
झुंड नोड्स को बढ़ावा देना या उन्हें बढ़ावा देना
नोड या नोड के सेट को बढ़ावा देने के लिए, docker node promote
प्रबंधक नोड से docker node promote
:
docker node promote node-3 node-2
Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.
नोड या नोड के सेट को डिमोट करने के लिए, docker node demote
मैनेजर से docker node demote
चलाएं:
docker node demote node-3 node-2
Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.
झुंड छोड़ना
कार्यकर्ता नोड:
#Run the following on the worker node to leave the swarm.
docker swarm leave
Node left the swarm.
यदि नोड में प्रबंधक की भूमिका है, तो आपको प्रबंधकों के कोरम को बनाए रखने के बारे में एक चेतावनी मिलेगी। आप प्रबंधक नोड पर छोड़ने के लिए --force का उपयोग कर सकते हैं:
#Manager Node
docker swarm leave --force
Node left the swarm.
झुंड छोड़ दिया नोड्स अभी भी docker node ls
आउटपुट में दिखाई देंगे।
सूची से नोड हटाने के लिए:
docker node rm node-2
node-2