डॉकर प्रतिमा निर्मिती. डॉकर समजून घेणे. डॉकरचे मुख्य घटक

डॉकर ही सर्वात सामान्य कंटेनरायझेशन सिस्टम आहे जी तुम्हाला स्थानिक सिस्टीमवर स्थापित न करता कंटेनरमध्ये विकासासाठी आवश्यक सॉफ्टवेअर चालवण्याची परवानगी देते. या सामग्रीच्या चौकटीत, आम्ही डॉकर कंटेनर व्यवस्थापनाचे विश्लेषण करू.

डॉकरमध्ये अनेक घटक असतात:
  1. प्रतिमा- विकसकांद्वारे कॉन्फिगर केलेल्या सॉफ्टवेअरचा संच, जो अधिकृत वेबसाइटवरून डाउनलोड केला जातो
  2. कंटेनर- प्रतिमा अंमलबजावणी - त्यातून तयार केलेली सर्व्हरवरील एक संस्था, कंटेनर अचूक प्रत नसावी आणि डॉकरफाइल वापरून समायोजित केली जाऊ शकते
  3. खंड- कंटेनरद्वारे वापरलेल्या डिस्कवरील क्षेत्र आणि ज्यामध्ये डेटा जतन केला जातो. कंटेनर काढून टाकल्यानंतर, सॉफ्टवेअर राहत नाही, भविष्यात डेटा वापरला जाऊ शकतो

संपूर्ण संरचनेवर एक विशेष प्रकारे नेटवर्क तयार केले आहे, जे आपल्याला इच्छित मार्गाने पोर्ट फॉरवर्ड करण्यास आणि कंटेनरला व्हर्च्युअल ब्रिजद्वारे (डिफॉल्टनुसार ते स्थानिक IP पत्त्यावर चालते) बाहेरून प्रवेशयोग्य बनविण्यास अनुमती देते. या प्रकरणात, कंटेनर जगासाठी आणि एका पत्त्यावर दोन्ही उपलब्ध असू शकतो.

डॉकर कंटेनर व्यवस्थापन: मूलभूत क्षमता

उबंटू किंवा डेबियन सर्व्हरवर डॉकर स्थापित करा जर ते आधीपासून सूचनांनुसार स्थापित केलेले नसेल. sudo द्वारे अनप्रिव्हिलेज्ड युजर म्हणून कमांड चालवणे चांगले

सर्वात सोपा कंटेनर चालवणे हे दर्शवेल की सर्वकाही कार्य करते

कंटेनर व्यवस्थापित करण्यासाठी मूलभूत आदेश

आपण यासारखे सर्व सक्रिय कंटेनर प्रदर्शित करू शकता

-a स्विचसह, निष्क्रिय असलेल्यांसह सर्व कंटेनर प्रदर्शित केले जातील

डिकर कंटेनरला यादृच्छिकपणे नावे नियुक्त करतो, आवश्यक असल्यास, आपण थेट नाव निर्दिष्ट करू शकता

डॉकर रन — नाव हॅलो-वर्ल्ड

उबंटू इमेजवर आधारित my-linux-container नावाचा कंटेनर लाँच करा आणि बॅश शेल निर्दिष्ट करून कंटेनर कन्सोलवर जा.

docker run -it — नाव my-linux-container ubuntu bash

कंटेनरमधून बाहेर पडण्यासाठी आणि होस्टवर परत येण्यासाठी, सिस्टमला चालवणे आवश्यक आहे

कंटेनर तयार केल्यावर सर्व प्रतिमा ज्याच्या आधारावर कंटेनर तयार केल्या जातात त्या hub.docker.com वरून स्वयंचलितपणे डाउनलोड केल्या जातात, ज्या आधीपासून स्थानिक पातळीवर अस्तित्वात आहेत त्या डॉकर प्रतिमा चालवून पाहिल्या जाऊ शकतात.

आधीच डाउनलोड केलेल्या प्रतिमेवरून कंटेनर तयार करणे अधिक जलद होईल (जवळजवळ त्वरित)

जेव्हा तुम्ही कंटेनरमधून बाहेर पडता तेव्हा ते थांबते, जेणेकरून असे होऊ नये, तुम्ही कीबोर्ड शॉर्टकटने बाहेर पडू शकता CTRL + A + P

तुम्ही सक्रिय नसलेले सर्व कंटेनर काढू शकता

डॉकर आरएम $ (डॉकर ps -a -f स्थिती = निर्गमन -q)

किंवा त्यांना एका वेळी एक हटवा

शेवटच्या कमांडमध्ये ओळखकर्त्याऐवजी, तुम्ही नाव निर्दिष्ट करू शकता

डॉकरमध्ये, कंटेनर थोड्या प्रमाणात अंतर्ज्ञानी कमांड वापरून व्यवस्थापित केले जातात:

डॉकर कंटेनर स्टार्ट आयडी

डॉकर कंटेनर स्टॉप आयडी

डॉकर कंटेनर रीस्टार्ट आयडी

डॉकर कंटेनर तपासणी आयडी

नंतरचे विशेषतः उपयुक्त आहे, ते कंटेनर, कॉन्फिगरेशन फाइल्स आणि वापरलेल्या डिस्क विभाजनांबद्दल सर्व माहिती प्रदर्शित करते. कमांडची संपूर्ण यादी मदत किंवा अधिकृत डॉकर वेबसाइटवर सहजपणे आढळू शकते.

तुमची डॉकर प्रतिमा तयार करणे आणि डॉकरफाइल वापरणे

डॉकरफाइलमध्ये निर्दिष्ट केलेले अतिरिक्त पर्याय वापरून प्रतिमा सामान्यत: विद्यमान पासून तयार केल्या जातात

उबंटू वरून
सीएमडी इको "हॅलो वर्ल्ड"

आता मानक c वर आधारित एक नवीन प्रतिमा तयार केली जात आहे उबंटू

प्रतिमेला नाव देऊन ते तयार करा (कमांडच्या शेवटी बिंदू म्हणजे वर्तमान डिरेक्टरी वापरली जाते आणि म्हणून त्यात डॉकरफाइल)

डॉकर बिल्ड -टी माय-उबंटू.

डॉकर प्रतिमाआता दर्शवेल आणि नवीन तयार केलेली माय-उबंटू प्रतिमा

ते चालवले जाऊ शकते आणि कन्सोल प्रदर्शित होईल नमस्कार जग आणि डीफॉल्ट प्रतिमेपासून हाच फरक आहे

सहसा आम्हाला अधिक जटिल नियमांची आवश्यकता असते, उदाहरणार्थ, आम्हाला प्रतिमेमध्ये python3 समाविष्ट करणे आवश्यक आहे - चला नवीन निर्देशिकेवर जाऊ आणि डॉकरफाइल तयार करू.

उबंटू वरून
CMD apt-get update && apt-get install python3

सर्व सूचना एका ओळीवर लिहिलेल्या आहेत

डॉकर बिल्ड -t my-ubuntu-with-python3.

आम्ही आत जाऊन कंटेनर सुरू करतो

डॉकर रन -it my-ubuntu-with-python3 bash

आत, रूट म्हणून, आपल्याला कार्यान्वित करणे आवश्यक आहे dpkg -l | grep python3, कमांड सिस्टममध्ये पॅकेज उपस्थित असल्याचे दर्शवेल, याचा अर्थ यश

कोणत्याही मोठ्या प्रकल्पाच्या विकसक आणि प्रशासकासाठी डॉकर हे खरोखरच साधन असणे आवश्यक आहे. परंतु असे होत नसले तरीही, डॉकरला अद्याप माहित असणे आवश्यक आहे: अगदी नजीकच्या भविष्यात, ते डेस्कटॉप लिनक्स वितरणापासून AWS वरील सर्व्हरच्या पूलपर्यंत सर्वत्र असेल. आणि सर्वात चांगला भाग असा आहे की डॉकरशी व्यवहार करणे खूपच सोपे आहे, जर तुम्हाला ते योग्यरित्या कसे कार्य करते हे नक्कीच समजले असेल.

व्हर्च्युअल वातावरणाच्या जगात योग्य-मिळवा

डॉकर नेमस्पेसेस आणि cgroups तंत्रज्ञानावर आधारित आहे (पहिला पृथक्करण प्रदान करतो, दुसरा प्रक्रिया गटबद्धता आणि संसाधन मर्यादा प्रदान करतो), म्हणून, व्हर्च्युअलायझेशनच्या बाबतीत, ते LXC/OpenVZ पेक्षा खूप वेगळे नाही आणि आम्ही वापरत आहोत. इथे खूप काही बोलायचे आहे. समान नेटिव्ह स्पीड, लिनक्स कर्नल मेकॅनिझमवर आधारित समान अलगाव पद्धती. वर, तथापि, एक पूर्णपणे भिन्न कथा सुरू होते. डॉकरचे वैशिष्ट्य म्हणजे ते तुम्हाला पूर्ण वर्च्युअल वातावरण उपयोजित करू देते आणि त्यात एखादे अॅप्लिकेशन लॉन्च करू देते, उदाहरणार्थ, वेब सर्व्हर रीस्टार्ट करणे.

आम्ही विशिष्ट वितरणाच्या तपशिलांचे सार घेतो आणि कल्पना करतो की आमच्याकडे शुद्ध CentOS आहे आणि आम्हाला मुख्य सिस्टममध्ये प्रवेश न करता पूर्णपणे आभासी वातावरणात विशिष्ट कमांड चालवायची आहे. तुम्हाला वितरणाच्या प्रतिमा डाउनलोड कराव्या लागतील, त्या सिस्टीममध्ये तैनात कराव्या लागतील आणि व्हर्च्युअल वातावरण सेट करावे लागेल? अजिबात नाही, तुम्हाला फक्त दोन आदेश चालवायचे आहेत:

$ sudo yum install docker-io $ sudo docker run -t ubuntu: नवीनतम / usr / bin / top

आणि हे सर्व आहे. आम्ही सध्या उपलब्ध असलेल्या नवीनतम उबंटू आवृत्तीवर आधारित वातावरणासह कंटेनरच्या आत टॉप युटिलिटी चालवली आहे, सध्याच्या टर्मिनलवर माहिती आउटपुट करत आहे. आणि हे सर्व एका साध्या आदेशाने (स्थापना मोजली जात नाही). वाईट नाही, नाही का? सर्वसाधारणपणे, आम्ही या कंटेनरमध्ये "जाऊ" देखील शकतो आणि सामान्यतः नवीन स्थापित केलेल्या सिस्टमसह सर्वकाही करू शकतो:

$ sudo docker run -t -i ubuntu: नवीनतम / bin / bash # apt-get update # apt-get install nginx #

तुम्ही बघू शकता, नेटवर्कमध्येही सर्व काही ठीक आहे, त्यामुळे आम्ही सिस्टम अपडेट करू शकतो, कोणतेही सॉफ्टवेअर इंस्टॉल आणि कॉन्फिगर करू शकतो. हे थोडेसे जादूसारखे दिसते, परंतु प्रत्यक्षात ते खूप सोपे आहे. कंटेनरच्या जगात डॉकर हा एक प्रकारचा ऍप्ट-गेट आहे, फक्त पॅकेजेसऐवजी फाइल सिस्टम प्रतिमा आहेत आणि अधिकृत डेबियन / उबंटू रेपॉजिटरीजऐवजी, डॉकर हब नावाचे क्लाउड स्टोरेज आहे.

जेव्हा आम्ही "डॉकर रन ..." केले तेव्हा सिस्टमने खालील गोष्टी केल्या:

  1. डॉकर युटिलिटीने आमच्या स्थानिक मशीनवरील डॉकर्ड डिमनशी संपर्क साधला, आमच्याकडून हॅलो म्हटले आणि उबंटूची नवीनतम आवृत्ती (कमांडमधील नवीनतम टॅगद्वारे दर्शविल्याप्रमाणे) वेगळ्या कंटेनरमध्ये चालवण्यास सांगितले.
  2. डॉकर्ड डिमनने त्याची नोटबुक तपासली, / var / lib / docker डिरेक्टरीमध्ये गेली आणि त्याला आढळले की नवीनतम उबंटू मधील फाइल सिस्टम प्रतिमा आमच्या मशीनवर नाही, म्हणून त्याने डॉकर हबशी संपर्क साधण्याचे ठरवले आहे की नाही हे शोधण्यासाठी. तेथे अशी प्रतिमा आहे.
  3. डॉकर हबशी बोलल्यानंतर, त्यांनी खात्री केली की ती प्रतिमा अद्याप अस्तित्वात आहे आणि ती आम्हाला पाठवण्यास सांगितले.
  4. इच्छित प्रतिमा मिळाल्यानंतर, डॉकर्डने तिची फाइल सिस्टम माउंट केली, त्यात एक क्रोट बनवले आणि शेवटच्या युक्तिवादात निर्दिष्ट केलेली कमांड कार्यान्वित केली, नेमस्पेसेस वापरून त्याचा "स्कोप" मर्यादित केला (खरं तर, त्याने मुख्य फाइल सिस्टम, होस्टमधील प्रवेश बंद केला. सिस्टम प्रक्रिया, IPC आणि इतर , सँडबॉक्समध्ये लॉक केलेले), परंतु वर्तमान टर्मिनलच्या डिव्हाइस फायली त्यामध्ये फेकल्या (-t ध्वज) जेणेकरुन आमचे शीर्ष त्याचे स्यूडो-ग्राफिक इंटरफेस काढू शकेल.

या मॉडेलचे वैशिष्ट्य म्हणजे डॉकर हब प्रत्येकासाठी खुला आहे आणि कोणीही स्वतःची प्रतिमा तयार करू शकतो (त्यावर नंतर अधिक) आणि दुसर्‍या मशीनवर आणि/किंवा दुसर्‍या व्यक्तीद्वारे स्थापित करण्यासाठी प्रकाशित करू शकतो. या लेखनाच्या वेळी, सर्व प्रसंगांसाठी डॉकर हबवर 45 हजाराहून अधिक प्रतिमा प्रकाशित केल्या गेल्या आहेत, "नग्न" वितरणाच्या प्रतिमांपासून पूर्व-कॉन्फिगर केलेल्या सर्व्हर आणि डेस्कटॉप ऍप्लिकेशन्ससह प्रतिमा कमीतकमी Linux वातावरणात चालत आहेत.

व्हर्च्युअल वातावरणात फायरफॉक्स चालवायचा असेल तर? हे सोपे असू शकत नाही, ब्राउझरमध्ये डॉकर हब उघडा, ब्राउझ आणि शोधा क्लिक करा आणि फायरफॉक्स टाइप करा. परिणामांची यादी स्क्रीनवर दिसेल. आम्ही पाहतो, kennethkl/firefox अगदी योग्य वाटतो. आम्ही त्यावर क्लिक करतो आणि संपूर्ण गोष्ट कशी सुरू करावी याबद्दल माहिती पाहू. लेखक आम्हाला अशी आज्ञा चालवण्यास सांगतात:

$ sudo docker run -d --name firefox -e DISPLAY = $ DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix kennethkl/firefox

चला प्रयत्न करू. होय, खरंच, इमेजच्या थोड्या डाऊनलोडनंतर, आम्हाला स्क्रीनवर मानक फायरफॉक्स मिळेल. तसे, त्याच उदाहरणाचा वापर करून, आपण डॉकर रन कमांडच्या आणखी चार उपयुक्त पर्यायांसह स्वत: ला परिचित करू शकता:

  • -d - कंटेनरला "डेमोनाइझ" करते, म्हणजेच ते डॉकरला STDOUT आभासी वातावरणातून डिस्कनेक्ट करते आणि पार्श्वभूमीत चालवण्यास अनुमती देते;
  • --name - कंटेनरचे नाव, जे त्याला अभिज्ञापक ऐवजी प्राप्त होईल;
  • -e - तुम्हाला व्हर्च्युअल मशीनवर पर्यावरण व्हेरिएबल "फॉरवर्ड" करण्याची परवानगी देते;
  • -v - निर्दिष्ट फाइल किंवा निर्देशिका (स्वरूप / फाइल / वर / होस्ट / सिस्टम: / फाइल / इन / व्हर्च्युअल मशीन किंवा फक्त / फाइल / वर / होस्ट / सिस्टम, जर पथ जुळत असेल तर) फॉरवर्ड करते.

या प्रकरणात, व्हेरिएबल आणि फाइल आवश्यक आहे जेणेकरून फायरफॉक्स स्थानिक मशीनच्या प्रदर्शनात प्रवेश करू शकेल. हे त्याऐवजी असुरक्षित आहे, कारण कंटेनरमधील कोणतीही प्रक्रिया केवळ तुमच्या डेस्कटॉपवर कोणतेही सॉफ्टवेअर चालवू शकत नाही, परंतु, उदाहरणार्थ, कीस्ट्रोक किंवा कर्सरच्या हालचालींमध्ये अडथळा आणू शकतात. पण उदाहरणार्थ, ते करेल.

डॉकर सर्च कमांड वापरून डॉकर इमेज शोधण्याचा सोपा मार्ग आहे:

$ sudo डॉकर शोध nginx

माहिती

कोणताही डॉकर वापरकर्ता स्वतःचे खाजगी हब चालवू शकतो. त्याला "रजिस्ट्री" म्हणतात आणि तयार प्रतिमा म्हणून उपलब्ध आहे. तुम्हाला फक्त ते चालवायचे आहे: docker run -p 5555: 5555 registry.

डॉकर डिमन केवळ क्लायंट वापरूनच उपलब्ध नाही, तर स्थानिक पातळीवर आणि रिमोट मशीनवरून RESTful API वापरून देखील उपलब्ध आहे. मानक डॉकर पोर्ट tcp / 2375 e tcp / 2376 आहेत.

डॉकर इमेज डाउनलोड केल्यानंतर लगेच रन करण्याची गरज नाही, तुम्ही डॉकर पुल कमांड वापरून ती तुमच्या स्थानिक मशीनवर डाउनलोड करू शकता आणि त्यानंतरच रन करा: डॉकर पुल उबंटू.

स्तरित केक

डॉकर तुम्हाला वर्च्युअल वातावरणासह शक्य तितके सोयीस्कर बनविण्याची परवानगी देतो, वातावरण तैनात करण्याची प्रक्रिया आणि होस्ट सिस्टमसह त्यांचे परस्परसंवाद सेट करणे या दोन्ही प्रक्रिया सुलभ करते (जे फक्त शेवटचे उदाहरण आहे). परंतु हे त्याचे एकमेव वैशिष्ट्य नाही.

जर तुम्ही पहिल्या दोन उदाहरणांमधून उबंटू इमेजसह खेळला असेल, तर तुमच्या लक्षात आले असेल की कंटेनरचे प्रत्येक नवीन प्रक्षेपण सुरवातीपासून होते आणि मागील सत्रात केलेले सर्व बदल गमावले जातात. हा अजिबात बग नाही, हे डॉकर आर्किटेक्चरच्या मुख्य वैशिष्ट्यांपैकी एक आहे जे ते आणखी मनोरंजक आणि आकर्षक समाधान बनवते.

वस्तुस्थिती अशी आहे की बहुसंख्य प्रकरणांमध्ये, "डॉकर प्रतिमा" ही एक मोनोलिथिक फाइल सिस्टम प्रतिमा नाही, परंतु एक प्रकारचा लेयर केक आहे, ज्यामध्ये अनेक फाइल सिस्टम प्रतिमा असतात, ज्याच्या आधारावर कंटेनर तयार केला जातो. त्याच वेळी, वैयक्तिक FS प्रतिमा निर्देशिकेच्या संरचनेच्या काही भागांसाठी अजिबात जबाबदार नसतात (उदाहरणार्थ, लिनक्स अंतर्गत डिस्कचे विभाजन / होम, / var, / बूटमध्ये विभाजन करण्याच्या बाबतीत), परंतु स्तरित आहेत. AUFS कर्नल मेकॅनिझम Linux वापरून एकमेकांच्या वर (btrfs, डिव्हाइस मॅपर आणि आच्छादन वापरून समान कार्यक्षमतेसाठी समर्थन देखील आहे).

हे कसे कार्य करते हे समजून घेण्यासाठी, आमच्या कंटेनरीकृत उबंटूवर परत जाऊया. लेखाच्या सुरुवातीला दुसऱ्या उदाहरणात दाखविल्याप्रमाणे आम्ही कंटेनर सुरू करतो आणि nginx स्थापित करतो, परंतु ते समाप्त करू नका. त्याऐवजी, आम्ही दुसरे टर्मिनल लाँच करतो आणि चालू असलेल्या कंटेनरची सूची पाहतो:

$ sudo डॉकर ps

हा आदेश सर्व चालू कंटेनर त्यांच्या आयडीसह, वापरलेली प्रतिमा, कमांड लॉन्च, अपटाइम आणि बरेच काही दर्शवेल. आम्हाला CONTEINER ID स्तंभातील मूल्यामध्ये स्वारस्य आहे. ते कॉपी करा आणि खालील आदेश चालवा:

$ sudo डॉकर कमिट कंटेनर आयडी ubuntu-nginx

ते पूर्ण झाल्यानंतर, आपण कंटेनरमधून बाहेर पडू शकता, त्यामुळे त्याचे कार्य समाप्त होईल. आणि मग आम्ही फक्त ubuntu-nginx कंटेनर सुरू करतो आणि पाहतो की nginx कुठेही गायब झालेला नाही आणि त्याच्या जागी आहे:

$ sudo docker रन -i -t ubuntu-nginx / bin / bash # जे nginx / usr / sbin / nginx

आम्ही काय केले आहे? आम्ही आणखी एक स्तर तयार केला, तो म्हणजे अतिरिक्त FS प्रतिमा, आणि आधीपासून अस्तित्वात असलेल्या उबंटू डॉकर प्रतिमेवर आधारित नवीन डॉकर प्रतिमा तयार केली, आमच्या FS प्रतिमेसह, ज्यामध्ये nginx आहे. थोडे गोंधळात टाकणारे वाटते, बरोबर? हे प्रत्यक्षात खूपच सोपे आहे.

प्रत्येक डॉकर प्रतिमेमध्ये अनेक फाइलसिस्टम प्रतिमा असतात हे आम्ही आधीच शोधून काढले आहे. जेव्हा आम्ही कंटेनर सुरू करतो, तेव्हा या प्रतिमा AUFS वापरून एका डिरेक्टरी स्ट्रक्चरमध्ये माउंट केल्या जातात आणि एकत्र केल्या जातात. उदाहरणार्थ, पहिल्या इमेजमध्ये फक्त मूलभूत उबंटू इन्स्टॉलेशन असू शकते, दुसरी त्यात स्टँडर्ड डिमनचा संच जोडते, तिसरा - प्रशासन उपयुक्तता इ. डॉकर सर्व स्तरांना केवळ-वाचनीय मोडमध्ये माउंट करतो, परंतु आम्ही प्रतिमेतील मजकूर बदलू शकतो म्हणून, दुसरा रिक्त स्तर वाचन/लेखन मोडमध्ये शीर्षस्थानी जोडला जातो.


डिफॉल्टनुसार, कंटेनर पूर्ण झाल्यानंतर (जे त्यामध्ये चालू असलेल्या शेवटच्या प्रक्रियेनंतर होते), शेवटचा थर मिटवला जातो आणि आमचे सर्व बदल गमावले जातात. तथापि, डॉकर कमिट कमांडचा वापर करून, आम्ही आमच्या बदलांसह विद्यमान FS प्रतिमा आणि FS प्रतिमेवर आधारित नवीन डॉकर प्रतिमा तयार करून बदल "कमिट" करू शकतो. हे आम्ही केलेले बदल जतन करेल. वैकल्पिकरित्या, आम्ही ubuntu-nginx कंटेनर सुरू करू शकतो, त्यात बदल करू शकतो आणि त्याच प्रकारे कमिट वापरून नवीन डॉकर इमेजमध्ये सेव्ह करू शकतो, दुसरा लेयर जोडतो. तुम्ही सर्व परिणामी प्रतिमांची सूची पाहण्यासाठी डॉकर इमेज कमांड वापरू शकता (आणि डॉकर हब वरून), आणि लेयर निर्मितीचा इतिहास पाहण्यासाठी डॉकर इतिहास कमांड:

$ sudo डॉकर इतिहास ubuntu-nginx

इमेजिंगचा हा दृष्टीकोन कंटेनर व्यवस्थापनामध्ये अधिक लवचिकता प्रदान करतो, बराच वेळ वाचवतो आणि तुम्हाला आधीच कॉन्फिगर केलेल्या डॉकर प्रतिमा मशीन दरम्यान सहजपणे हस्तांतरित करण्याची परवानगी देतो (प्रतिमा डॉकर हबवर अपलोड केली जाऊ शकते आणि नंतर दुसर्‍या मशीनवर तैनात केली जाऊ शकते). डिस्क स्पेसची बचत हे कमी स्पष्ट प्लस आहे. जर आम्ही मशीनवर कंटेनरचे संपूर्ण प्राणीसंग्रहालय तैनात केले तर, त्यातील प्रत्येक सुरुवातीला एका बेस इमेजवर आधारित असेल (उदाहरणार्थ, समान उबंटू) - ते सर्व या बेस इमेजचा संदर्भ घेतील आणि त्यातील सामग्री डुप्लिकेट करणार नाहीत.


लिनक्स बाहेर डॉकर

OS X किंवा Windows वर डॉकर चालवण्याचा एकमेव मार्ग म्हणजे ते आभासी मशीनमध्ये स्थापित करणे. तुम्हाला ते मॅन्युअली करण्याची गरज नाही, तुम्ही रेडीमेड सोल्यूशन वापरू शकता, उदाहरणार्थ boot2docker. हा स्क्रिप्टचा एक संच आहे जो तुम्हाला व्हर्च्युअलबॉक्समध्ये लिनक्स आणि डॉकर व्हर्च्युअल मशीन त्वरीत उपयोजित करण्याची आणि स्वयंचलित एसएसएच प्रवेशासह सुरू करण्याची परवानगी देतो. ते आणि इंस्टॉलर वापरण्यासाठीच्या सूचना अधिकृत डॉकर वेबसाइटवर आढळू शकतात.

नेटवर्क कॉन्फिगरेशन

कंटेनर एकमेकांशी आणि बाहेरील जगाशी संवाद साधण्यासाठी, डॉकर स्वयंचलितपणे आभासी नेटवर्क ब्रिज उचलतो आणि बाह्य नेटवर्क इंटरफेससाठी मास्करेडिंग (NAT) नियम कॉन्फिगर करतो. म्हणजे बाहेरून कंटेनरपर्यंत पोहोचणे शक्य होणार नाही. तथापि, आम्ही पोर्ट फॉरवर्डिंग कॉन्फिगर करू शकतो जेणेकरून मशीनच्या बाह्य नेटवर्क इंटरफेसवरील विशिष्ट पोर्ट्सची विनंती स्वयंचलितपणे निर्दिष्ट कंटेनर पोर्टवर पुनर्निर्देशित केली जाईल. उदाहरणार्थ, मिरांटिस येथे, मुख्य इंधन नोड (हे ओपनस्टॅक उपयोजित आणि कॉन्फिगर करण्यासाठी GUI आहे) डॉकरमध्ये चालते आणि फुल / एनजीनक्स कंटेनर (पोर्ट 8000) मध्ये प्रवेश उघडण्यासाठी पोर्ट फॉरवर्डिंगचा वापर करते:

$ sudo डॉकर रन -d -p 8000: 8000 इंधन / nginx_6.0: नवीनतम /usr/local/bin/start.sh

आम्ही -p पर्यायातील दुसरा क्रमांक बदलून कंटेनरच्या इतर कोणत्याही पोर्टवर पोर्ट 8000 फॉरवर्ड करू शकतो, परंतु या कॉन्फिगरेशनमध्ये याचा अर्थ नाही.

फाइल फॉरवर्डिंग आणि डॉकरफाइल

लेखाच्या सुरूवातीस, आम्ही आधीच -v ध्वजांशी परिचित झालो आहोत, जे आपल्याला होस्ट सिस्टमवरून कंटेनरवर कोणतीही फाइल किंवा निर्देशिका अग्रेषित करण्याची परवानगी देते. हे एक अतिशय सोयीचे कार्य आहे, ते काही तात्पुरता डेटा संचयित करण्यासाठी आणि अनेक कंटेनर दरम्यान फायली सामायिक करण्यासाठी दोन्ही वापरले जाऊ शकते. Mirantis मध्ये, हे फंक्शन कंटेनरच्या आत इंधन / चतुर सेवा (/ etc / astute) साठी कॉन्फिगरेशन फाइल्स फॉरवर्ड करण्यासाठी वापरले जाते:

$ sudo docker run -d -v / etc / astute fuel / astute_6.0: नवीनतम /usr/local/bin/start.sh

डॉकरफाइलमधील व्हॉल्यूम कमांड वापरून हेच ​​करता येते. डॉकरफाइल स्वतः मेकफाइलचे स्थानिक समतुल्य आहे, परंतु जर नंतरचे स्त्रोत पासून अनुप्रयोग तयार करण्यासाठी असेल, तर डॉकरफाइल तुम्हाला डॉकरसाठी प्रतिमा तयार करण्यास अनुमती देते. कंटेनर लाँच न करता नवीन प्रतिमा तयार करणे, त्यामध्ये कोणतेही ऑपरेशन करणे आणि कमिट करणे हा त्याचा उद्देश आहे. तुम्ही फक्त एक डॉकरफाईल लिहू शकता आणि डॉकर तुमच्यासाठी सर्वकाही करेल. उदाहरणार्थ, इंधन / चतुर तयार करण्यासाठी डॉकरफाइलचा विचार करा:

इंधन / सेंटोस मेन्टेनर मॅथ्यू मोसेसोहन कडून [ईमेल संरक्षित] RUN rm -rf /etc/yum.repos.d / *; \echo -e "\nname = Nailgun Local Repo\nbaseurl = http: // $ (मार्ग -n | awk" /^0.0.0.0/ ($ प्रिंट करा 2 ) "): _ PORT_ / os / x86_64 / \ ngpgcheck = 0"> /etc/yum.repos.d/nailgun.repo; \yum क्लीन ऑल; \yum --quiet install -y ruby21-nailgun-mcagents sysstat ADD etc / etc ADD start.sh /usr/local/bin/start.sh RUN पपेट लागू करा --detailed-exitcodes -d -v /etc/puppet/modules/nailgun/examples/astute-only.pp; [[$? == 0 || $? == 2]] RUN chmod + x /usr/local/bin/start.sh; \echo -e "\nname = Nailgun Local Repo\nbaseurl = file: / var / www / nailgun / centos / x86_64 \ ngpgcheck = 0 "> /etc/yum.repos.d/nailgun.repo; yum सर्व व्हॉल्यूम साफ करा / etc / astute CMD /usr/local/bin/start.sh

ते कशासाठी आहे हे समजणे कठीण नाही. ते इंधन/सेंटोसवर आधारित प्रतिमा तयार करते, प्रतिमा तयार करण्यासाठी अनेक कमांड चालवते, वर्तमान निर्देशिकेतील फाईल्स इमेजमध्ये जोडते, पपेट मॅनिफेस्ट लागू करते, काही फायलींवर परवानग्या बदलते, होस्टकडून / etc / asture / निर्देशिका फॉरवर्ड करते. सिस्टीम कंटेनरला, आणि /usr/local/bin/start.sh कमांड वापरून कंटेनर सुरू करते.

कंटेनर तयार करण्यासाठी, फक्त डॉकरफाइल आणि त्यात जोडल्या जाणार्‍या सर्व फायली एका निर्देशिकेत ठेवा आणि खालील आदेश चालवा:

$ sudo docker बिल्ड इंधन / astute_6.0: नवीनतम

या प्रकरणात, आम्ही इंधन / astute_6.0: नवीनतम नाव निवडले, जरी ते काहीही असू शकते.

डॉकरसह काम करण्याच्या बारकावे

प्रत्येक कंटेनरमध्ये फक्त एकच सेवा चालली पाहिजे या कल्पनेवर डॉकर तयार केला आहे. तुम्ही Apache, MySQL, nginx, वार्निश आणि तुमच्या प्रोजेक्टला जे काही आवश्यक आहे ते वेगवेगळ्या कंटेनरमध्ये पॅकेज करा आणि नंतर ते सर्व एकत्र तयार करण्यासाठी डॉकर वापरा. हा दृष्टीकोन उत्तम लवचिकता प्रदान करतो कारण तो तुम्हाला कॉन्फिगरेशन सहजतेने बदलण्याची, अद्यतनांची चाचणी घेण्यास आणि वैयक्तिक सेवा इतर मशीनवर स्थलांतरित करण्यास अनुमती देतो.

त्याच कारणास्तव, इनिट डिमन, क्रॉन आणि सिस्लॉग डिमन आणि इतर मानक वितरण घटकांसह पूर्ण विकसित Linux वातावरण चालवण्यासाठी डॉकर वापरण्याची प्रथा नाही. त्याऐवजी, आम्‍ही आम्‍हाला आवश्‍यक असलेली सेवा सुरू करतो आणि ती केवळ आभासी वातावरणात चालते:

$ sudo डॉकर रन -d -p 80 ubuntu-nginx / usr / sbin / nginx

पण इथे एक छोटीशी अडचण आहे. डॉकर कंटेनरमध्ये चालू असलेली प्रक्रिया (या प्रकरणात, nginx) संपुष्टात आल्यानंतर लगेच बंद करतो आणि nginx डीफॉल्टनुसार डिमॉनाइज्ड असल्याने, ती एक नवीन प्रक्रिया फोर्क करते आणि आपण हाताने सुरू केलेली प्रक्रिया समाप्त करते, नंतर डॉकर ताबडतोब बाहेर पडते आणि काटेरी डॉकरला खिळे ठोकून कंटेनर.

nginx च्या बाबतीत, तुम्ही डिमन ऑफ जोडून या समस्येवर काम करू शकता; त्याच्या कॉन्फिगरेशनमधील पहिली ओळ. इतर डिमॉन्सना त्यांच्या स्वतःच्या सेटिंग्जची आवश्यकता असेल, आणि काहींना थेट कमांड लाइनवरून डिमॉनीकरण करण्यापासून प्रतिबंधित केले जाऊ शकते. उदाहरणार्थ, sshd यासाठी -D ध्वज प्रदान करते:

$ sudo डॉकर रन -d -p 22 ubuntu-ssh/usr/sbin/sshd -D

कधीही, तुम्ही लॉग पाहण्यासाठी किंवा सेटिंग्ज बदलण्यासाठी docker exec कमांड वापरून कंटेनरशी कनेक्ट करू शकता (यापुढे, कंटेनर आयडी हा एकतर आयडी आहे जो डॉकर पीएस आउटपुटमध्ये दिसू शकतो, किंवा येथे निर्दिष्ट केलेले नाव --name पर्यायामध्ये स्टार्टअप ):

$ sudo docker exec -ti कंटेनर आयडी / बिन / बॅश

पण इथेही एक छोटीशी अडचण आहे. आपल्याला माहित आहे की, वर्च्युअल वातावरणाच्या ऑपरेशन दरम्यान जमा केलेली सर्व माहिती गमावली जाईल जर आपण आभासी वातावरणाचे कार्य समाप्त केले आणि त्यासह लॉग आणि सेटिंग्जमध्ये केलेले बदल अदृश्य होतील. आम्ही अंतहीन स्तर तयार करू शकत नाही (केवळ 127 पेक्षा जास्त नसतील तर), परंतु आम्ही थोडा वेगळा मार्ग घेऊ शकतो आणि डॉकरमध्ये तयार केलेली लॉग एकत्रीकरण प्रणाली वापरू शकतो. अर्थात, डॉकर वैयक्तिक अनुप्रयोगांचे लॉग गोळा करू शकत नाही, परंतु ते STDOUT आउटपुट, म्हणजेच कोणतेही कन्सोल आउटपुट गोळा करू शकते. आमच्यासाठी फक्त nginx कॉन्फिगरेशन बदलणे बाकी आहे जेणेकरून लॉग / dev / stdout मध्ये ओतले जातील आणि नंतर डॉकर लॉग कमांड वापरून ते पहा:

$ sudo डॉकर लॉग कंटेनर आयडी

दुसरा आणि अधिक योग्य पर्याय म्हणजे आधीच वर्णन केलेला -v पर्याय वापरून लॉग (आणि आवश्यक असल्यास, सेटिंग्ज) होस्ट सिस्टममध्ये हलवणे:

$ sudo mkdir / root / logs $ sudo docker रन -d -v / root / logs: / var / logs -p 80 ubuntu-nginx / usr / sbin / nginx

आवश्यक असल्यास, डॉकर स्टॉप कमांड वापरून त्यामध्ये चालू असलेली सेवा समाप्त करून कंटेनर योग्यरित्या थांबविला जाऊ शकतो:

$ sudo डॉकर स्टॉप कंटेनर आयडी

आणि जर ते काही कारणास्तव योग्यरित्या कार्य करत नसेल तर, तुम्ही ते मारून मारू शकता:

$ sudo डॉकर किल कंटेनर आयडी

हे करत असताना, एक महत्त्वाची गोष्ट घडते की बरेच नवशिक्या विसरतात: डॉकर कंटेनरबद्दल मेटा माहिती जतन करतो. खरं तर, याचा अर्थ असा आहे की जर तुम्ही डॉकर रन कमांडचे आर्ग्युमेंट्स वापरून त्याचे नाव निर्दिष्ट करून, उदाहरणार्थ, nginx सुरू केले तर, कंटेनर, पोर्ट्स, पर्यावरण व्हेरिएबल्स आणि यासारख्या डिरेक्ट्रीजला पास करणे आवश्यक आहे, तर ही सर्व माहिती. कंटेनर संपल्यावर जतन केले जाईल आणि पुढच्या वेळी चालवण्यासाठी, तुम्हाला ते निर्दिष्ट करण्याची आवश्यकता नाही, परंतु फक्त खालील आदेश कार्यान्वित करा (तुम्ही आयडीऐवजी नाव वापरू शकता):

$ sudo डॉकर प्रारंभ कंटेनर आयडी

जर तुम्हाला स्टेट सेव्ह करण्याची गरज नसेल (उदाहरणार्थ, काही कार्यक्षमता तपासण्यासाठी किंवा तपासण्यासाठी), तर तुम्ही --rm ध्वज वापरू शकता, जे डॉकरला कंटेनर पूर्ण झाल्यानंतर पूर्णपणे नष्ट करण्यास भाग पाडेल (प्रतिमा जतन करणे):

$ sudo डॉकर रन --rm -i -t busybox / bin / bash

तुम्ही खालील आदेश वापरून पूर्वी जतन केलेले सर्व कंटेनर नष्ट करू शकता:

# डॉकर आरएम $ (डॉकर ps -a -q)

डॉकर कंटेनर क्रॅश झाल्यास स्वतंत्रपणे रीस्टार्ट करण्यास सक्षम आहे आणि सिस्टम स्टार्टअप दरम्यान देखील ते सुरू करू शकतात. तुम्हाला फक्त --restart पर्याय वापरायचा आहे:

$ sudo डॉकर रन --restart = नेहमी \ -d -v / root / logs: / var / logs -p 80 \ ubuntu-nginx / usr / sbin / nginx

कोणत्याही वेळी, प्रतिमा एका फाईलमध्ये निर्यात केली जाऊ शकते आणि नंतर दुसर्‍या मशीनवर आयात केली जाऊ शकते. यासाठी डॉकर सेव्ह आणि डॉकर रिस्टोर कमांड दिले आहेत. त्यांचा वापर करणे खूप सोपे आहे, निर्यात असे केले जाते:

$ sudo docker save -o ubuntu-nginx.img ubuntu-nginx

आणि आयात खालीलप्रमाणे आहे:

$ sudo डॉकर लोड -i ubuntu-nginx.img

निष्कर्ष

डॉकर एक उत्कृष्ट साधन आहे. एका अनोळखी व्यक्तीसाठी, हे एक खेळण्यासारखे वाटू शकते जे सँडबॉक्समध्ये सॉफ्टवेअर चालवण्याव्यतिरिक्त इतर कोणत्याही गोष्टीसाठी योग्य नाही, परंतु ते बर्याच मोठ्या कार्यांचे निराकरण करण्यात मदत करू शकते, ज्याबद्दल आपण पुढील लेखात बोलू.

LXC, OpenVZ आणि इतर OS-स्तरीय व्हर्च्युअलायझेशन सोल्यूशन्सवर डॉकरचे फायदे

  1. डॉकर पोर्टेबल जेनेरिक इमेज फॉरमॅट वापरतो. याचा अर्थ या प्रतिमा कोणत्याही समस्यांशिवाय दुसर्‍या मशीनवर हस्तांतरित केल्या जाऊ शकतात आणि इतर वापरकर्त्यांद्वारे वापरण्यासाठी सामायिक केल्या जाऊ शकतात.
  2. प्रतिमा इतर प्रतिमांसाठी आधार म्हणून काम करू शकते. डॉकरमध्ये, अंतिम प्रतिमा तयार करण्यासाठी अनेक स्तर वापरणे सामान्य मानले जाते. तुम्ही बेस Ubuntu इमेजने सुरुवात करू शकता, नंतर Ubuntu + Apache microservice तयार करण्यासाठी Apache 2.4 जोडा.
  3. तुम्ही कमिट करता तेव्हा, जीआयटी प्रमाणेच इमेजची आवृत्ती केली जाऊ शकते.
  4. डॉकरकडे एक मोठा समुदाय आणि एक विस्तृत इकोसिस्टम आहे ज्यामध्ये स्केलिंग, गटबद्ध करणे, देखरेख करणे, उपयोजित करणे आणि कंटेनर व्यवस्थापित करणे यासाठी मोठ्या संख्येने साधने समाविष्ट आहेत.

आम्ही या विषयावर एकापेक्षा जास्त वेळा स्पर्श केला आहे आणि त्यांच्या बांधकामासाठी अनेक प्रणालींचा विचार केला आहे. आज आपण डॉकर कंटेनरसह आणखी एक उत्तम प्रणाली सादर करू.

मालिकेतील पुढील लेखांमध्ये उपयोगी पडणाऱ्या मूलभूत कार्यक्षमतेचे वर्णन करून सुरुवात करूया आणि डॉकर आर्किटेक्चरची थोडक्यात आठवण करू या. डॉकर क्लायंट-सर्व्हर आर्किटेक्चर वापरते आणि त्यात क्लायंट - डॉकर युटिलिटी असते जी वापरून सर्व्हरवर प्रवेश करते RESTful API, आणि लिनक्स ऑपरेटिंग सिस्टममधील डिमन (चित्र 1 पहा). जरी डॉकर लिनक्स नसलेल्या ऑपरेटिंग सिस्टमवर कार्य करते, परंतु ते या लेखात समाविष्ट केलेले नाहीत.

डॉकरचे मुख्य घटक:
    • कंटेनर- ऑपरेटिंग सिस्टम तंत्रज्ञानाचा वापर करून वापरकर्ता वातावरण वेगळे केले जाते, ज्यामध्ये अनुप्रयोग कार्यान्वित केले जातात. डॉकर कंटेनरला प्रतिमेवरून लॉन्च केलेला अनुप्रयोग म्हणून परिभाषित करणे हा सर्वात सोपा मार्ग आहे. तसे, डॉकर वैचारिकदृष्ट्या यापेक्षा वेगळे आहे, उदाहरणार्थ, एलएक्ससी ( लिनक्स कंटेनर), जरी ते समान Linux कर्नल तंत्रज्ञान वापरतात. डॉकर प्रकल्पाचे विकासक एक कंटेनर एक अनुप्रयोग आहे या तत्त्वाशी वचनबद्ध आहेत.
    • प्रतिमा- केवळ-वाचनीय अनुप्रयोग टेम्पलेट्स. विद्यमान प्रतिमांच्या शीर्षस्थानी नवीन स्तर जोडले जाऊ शकतात, जे एकत्रितपणे फाइल सिस्टमचे प्रतिनिधित्व करतात, मागील स्तर सुधारित किंवा पूरक करतात. सामान्यतः, एक नवीन प्रतिमा एकतर आधीपासून चालू असलेल्या कंटेनरला विद्यमान असलेल्या नवीन प्रतिमेवर जतन करून किंवा उपयुक्ततेसाठी विशेष सूचना वापरून तयार केली जाते. फाइल सिस्टम स्तरावर कंटेनरचे विविध स्तर वेगळे करण्यासाठी, AUFS, btrfs, vfs आणि डिव्हाइस मॅपर... जर तुमचा संयोगाने डॉकर वापरायचा असेल तर SELinux, नंतर ते आवश्यक आहे डिव्हाइस मॅपर.
    • रजिस्ट्रीजभांडार असलेले ( भांडार) प्रतिमा, - नेटवर्क प्रतिमा संचयन. ते खाजगी आणि सार्वजनिक दोन्ही असू शकतात. सर्वात प्रसिद्ध रेजिस्ट्री आहे.

कंटेनर वेगळे करण्यासाठी GNU / Linux ऑपरेटिंग सिस्टम मानक लिनक्स कर्नल तंत्रज्ञान वापरतात, जसे की:
  • नेमस्पेसेस ( लिनक्स नेमस्पेसेस).
  • नियंत्रण गट ( Cgroups).
  • विशेषाधिकार व्यवस्थापन साधने ( लिनक्स क्षमता).
  • अतिरिक्त, अनिवार्य सुरक्षा प्रणाली, जसे की AppArmor किंवा SELinux.

चला सूचीबद्ध तंत्रज्ञानाचा थोडा अधिक तपशीलवार विचार करूया.

नियंत्रण गट यंत्रणा (Cgroups)सिस्टीम संसाधनांचे वाटप, प्राधान्यक्रम आणि व्यवस्थापन व्यवस्थित करण्यासाठी एक साधन प्रदान करते. लिनक्स कर्नलमध्ये नियंत्रण गट लागू केले जातात. आधुनिक वितरणामध्ये, cgroup व्यवस्थापन द्वारे कार्यान्वित केले जाते systemdतथापि, लायब्ररी वापरून नियंत्रित करणे शक्य आहे libcgroupआणि उपयुक्तता cgconfig... मुख्य cgroup पदानुक्रम (ज्याला नियंत्रक देखील म्हणतात) खाली सूचीबद्ध आहेत:

  • blkio- इनपुट-आउटपुट ऑपरेशन्स आणि ब्लॉक डिव्हाइसेसच्या प्रवेशावर मर्यादा सेट करते;
  • सीपीयू- प्रक्रिया शेड्यूलर वापरुन, कार्य दरम्यान प्रोसेसर वेळ वितरित करते;
  • cpuacct- CPU संसाधनांच्या वापरावर स्वयंचलित अहवाल व्युत्पन्न करते. कंट्रोलरच्या संयोगाने कार्य करते सीपीयूवर वर्णन केल्या प्रमाणे;
  • cpuset- कार्यांसाठी विशिष्ट प्रोसेसर आणि मेमरी नोड नियुक्त करते;
  • उपकरणे- विशिष्ट उपकरणांवर कार्ये प्रवेश नियंत्रित करते;
  • फ्रीजर- कार्ये निलंबित किंवा पुन्हा सुरू करते;
  • स्मृती- मर्यादा सेट करते आणि नियंत्रण गटाच्या कार्यांद्वारे मेमरी वापरावरील अहवाल तयार करते;
  • net_cls- क्लास आयडेंटिफायरसह नेटवर्क पॅकेटचे टॅगिंग करते ( वर्गीकृत). हे वाहतूक नियंत्रकास अनुमती देते ( tc कमांड) आणि फायरवॉल ( iptables) रहदारीवर प्रक्रिया करताना हे टॅग विचारात घ्या;
  • perf_event- युटिलिटी वापरून तुम्हाला नियंत्रण गटांचे निरीक्षण करण्याची परवानगी देते perf;
  • bigtlb- तुम्हाला मोठी व्हर्च्युअल मेमरी पृष्ठे वापरण्याची आणि त्यांना मर्यादा लागू करण्यास अनुमती देते.

नेमस्पेसेस,त्या बदल्यात, ते संसाधन वाटप नियंत्रित करत नाहीत, परंतु कर्नल डेटा स्ट्रक्चर्समध्ये प्रवेश करतात. खरं तर, याचा अर्थ एकमेकांपासून प्रक्रियांचे पृथक्करण आणि समांतर "एकसारखे" असण्याची क्षमता, परंतु प्रक्रिया, वापरकर्ते आणि नेटवर्क इंटरफेसच्या श्रेणीक्रमांना एकमेकांशी ओव्हरलॅप न करणे. इच्छित असल्यास, भिन्न सेवा त्यांच्या स्वतःच्या देखील असू शकतात लूपबॅक इंटरफेस.

डॉकरने वापरलेल्या नेमस्पेसची उदाहरणे:
  • पीआयडी, प्रक्रिया आयडी- प्रक्रियेच्या पदानुक्रमाचे पृथक्करण.
  • नेट, नेटवर्किंग- नेटवर्क इंटरफेसचे अलगाव.
  • पीसी, इंटरप्रोसेस कम्युनिकेशन- प्रक्रियांमधील परस्परसंवादाचे व्यवस्थापन.
  • MNT, माउंट- माउंट पॉइंट्स व्यवस्थापन.
  • UTS, Unix Timesharing System- कर्नल आणि आवृत्ती अभिज्ञापकांचे पृथक्करण.

नावाची यंत्रणा क्षमतातुम्हाला रूट वापरकर्त्याचे विशेषाधिकार लहान गटांमध्ये विभाजित करण्यास आणि त्यांना स्वतंत्रपणे नियुक्त करण्यास अनुमती देते. ही कार्यक्षमता GNU / Linux मध्ये आवृत्तीपासून दिसून आली आहे कर्नल 2.2.सुरुवातीला, कंटेनर मर्यादित विशेषाधिकारांसह सुरू केले जातात.

तुम्ही डॉकर कमांड पर्याय सक्षम आणि अक्षम करू शकता:
  • माउंट ऑपरेशन्स;
  • सॉकेट्समध्ये प्रवेश;
  • फाइल सिस्टमवरील काही ऑपरेशन्स करणे, जसे की फाइल्सचे गुणधर्म किंवा मालक बदलणे.

तुम्ही मॅन पेज वापरून विशेषाधिकारांबद्दल अधिक जाणून घेऊ शकता. क्षमता (७).

डॉकर स्थापित करत आहे

उदाहरण म्हणून CentOS वापरून डॉकर स्थापित करण्यावर एक नजर टाकूया. CentOS सह काम करताना, तुमच्याकडे एक पर्याय आहे: तुमच्याकडून नवीनतम आवृत्ती वापरा pstreamकिंवा Red Hat अॅड-ऑनसह CentOS प्रकल्पाद्वारे तयार केलेली आवृत्ती. बदलांचे वर्णन पृष्ठावर उपलब्ध आहे.

मुळात, हे नवीन अपस्ट्रीम आवृत्त्यांमधील निराकरणे आणि Red Hat डेव्हलपर्सद्वारे प्रस्तावित बदलांचे उलटे पोर्टिंग आहे, परंतु अद्याप मुख्य कोडमध्ये स्वीकारलेले नाही. या लेखनाच्या वेळी सर्वात लक्षणीय फरक असा होता की नवीन आवृत्त्यांमध्ये डॉकर सेवा तीन भागांमध्ये विभागली गेली आहे: एक डिमन डॉकर, कंटेनर आणि रनसी... Red Hat अद्याप हा बदल स्थिर मानत नाही आणि एक मोनोलिथिक आवृत्ती 1.10 एक्झिक्युटेबल पाठवते.

स्थापनेसाठी रेपॉजिटरी सेटिंग्ज अपस्ट्रीम आवृत्त्या, तसेच इतर वितरण आणि ऑपरेटिंग सिस्टीमवर इन्स्टॉलेशनसाठी सूचना अधिकृत वेबसाइटवरील इन्स्टॉलेशन गाइडमध्ये दिल्या आहेत. विशेषतः, CentOS 7 रेपॉजिटरी साठी सेटिंग्ज:

# cat /etc/yum.repos.d/docker.repo name = डॉकर रिपॉझिटरी बेसुरल = https://yum.dockerproject.org/repo/main/centos/7 सक्षम = 1 gpgcheck = 1 gpgkey = https://yum .dockerproject.org/gpg

# cat /etc/yum.repos.d/docker.repo

नाव = भांडार

baseurl = https: / / yum .dockerproject .org / repo / main / centos / 7

सक्षम = 1

gpgcheck = 1 gpgkey = https: // yum .dockerproject .org / gpg

आवश्यक पॅकेजेस स्थापित करा आणि सेवा सुरू करा आणि सक्षम करा:

# yum install -y docker-engine # systemctl start docker.service # systemctl docker.service सक्षम करा

# yum install -y डॉकर-इंजिन

# systemctl start docker.service

# systemctl docker.service सक्षम करा

सेवेची स्थिती तपासत आहे:

# systemctl स्थिती docker.service

# systemctl स्थिती docker.service

तुम्ही डॉकर आणि पर्यावरणाबद्दल सिस्टम माहिती देखील पाहू शकता:

# डॉकर माहिती

तुम्ही समान कमांड चालवल्यास आणि CentOS रेपॉजिटरीजमधून डॉकर स्थापित केल्यास, सॉफ्टवेअरची जुनी आवृत्ती वापरल्यामुळे तुम्हाला किरकोळ फरक दिसतील. आउटपुट पासून डॉकर माहितीडेटा संचयित करण्यासाठी ड्रायव्हर म्हणून काय वापरले जाते ते आपण शोधू शकतो डिव्हाइस मॅपर, आणि स्टोरेज म्हणून - मध्ये एक फाइल / var / lib / डॉकर /:

# ls -lh / var / lib / docker / devicemapper / devicemapper / data -rw -------. 1 रूट रूट 100G डिसेंबर 27 12:00 / var / lib / docker / devicemapper / devicemapper / data

# ls -lh / var / lib / docker / devicemapper / devicemapper / data

Rw - - - -. 1 रूट रूट 100G डिसेंबर 27 12:00 / var / lib / / devicemapper / devicemapper / डेटा

डिमन स्टार्टअप पर्याय, जसे सामान्यतः CentOS वर असतात, मध्ये संग्रहित केले जातात / etc / sysconfig /... या प्रकरणात, डॉकर फाइलचे नाव. संबंधित ओळ / etc / sysconfig / डॉकरपर्यायांचे वर्णन:

पर्याय = "- selinux-enabled --log-driver = journald"

जर तुम्ही डॉकर कमांड नॉन-रूट वापरकर्ता किंवा डॉकर ग्रुपचा सदस्य म्हणून चालवली असेल, तर तुम्हाला अशी त्रुटी दिसेल:

$ डॉकर शोध mysql

$ शोधा mysql

चेतावणी: डिमनकडून डीफॉल्ट रेजिस्ट्री एंडपॉइंट मिळवण्यात अयशस्वी (डॉकर डिमनशी कनेक्ट होऊ शकत नाही. या होस्टवर डॉकर डिमन चालू आहे का?). सिस्टम डीफॉल्ट वापरणे: https: // अनुक्रमणिका. docker.io/v1/

डॉकर डिमनशी कनेक्ट करू शकत नाही. या होस्टवर डॉकर डिमन चालू आहे का?

लक्षात घ्या की डॉकर ग्रुपमध्ये युजर जोडणे हे त्या युजरला रूट ग्रुपमध्ये जोडण्यासारखे आहे.

RHEL / CentOS डेव्हलपर्सचा डॉकर डिमन सुरक्षिततेसाठी अपस्ट्रीम डॉकर डेव्हलपर्सपेक्षा थोडा वेगळा दृष्टीकोन आहे. Red Hat च्या दृष्टिकोनाबद्दल अधिक माहितीसाठी, RHEL विकसक डॅन वॉल्श यांचा लेख पहा.

जर तुम्हाला CentOS रेपॉजिटरीजमधून डॉकरचे "मानक" वर्तन स्थापित करायचे असेल (म्हणजे अधिकृत दस्तऐवजीकरणात वर्णन केले आहे), तर तुम्हाला डॉकर गट तयार करणे आणि डिमन प्रारंभ पर्याय जोडणे आवश्यक आहे:

पर्याय = "- selinux-enabled --log-driver = journald ↵ --group = डॉकर"

पर्याय = "--selinux-enabled --log-driver = journald ↵ --group = डॉकर"

मग आम्ही सेवा रीस्टार्ट करतो आणि तपासतो की डॉकर सॉकेट फाइल डॉकर ग्रुपची आहे, रूट नाही:

# ls -l /var/run/docker.sock

प्रतिमा आणि डॉकर टॅग शोधत आहे

डॉकर हब वर कंटेनर शोधण्याचा प्रयत्न करूया.

$ डॉकर शोध हॅप्रॉक्सी

$ शोध haproxy


या आउटपुटमध्ये, आम्ही अनेक HA प्रॉक्सी प्रतिमांची सूची प्राप्त केली आहे. अधिकृत रेपॉजिटरीमधील HA प्रॉक्सी ही यादीतील सर्वात वरची वस्तू आहे. नावात कोणतेही चिन्ह नसल्यामुळे अशा प्रतिमांमध्ये फरक आहे «/» वापरकर्त्याच्या भांडाराचे नाव कंटेनरच्या नावापासून वेगळे करणे. अधिकार्‍यामागील उदाहरण ओपन यूजर रिपॉझिटरीजमधील दोन हॅप्रॉक्सी प्रतिमा दाखवते eeacms आणि million12.

खालील दोन सारख्या प्रतिमा तुम्ही डॉकर हब वर नोंदणी करून स्वतः तयार करू शकता. अधिकृत व्यक्तींना Docker, Inc द्वारे प्रायोजित समर्पित संघाचा पाठिंबा आहे. अधिकृत भांडाराची वैशिष्ट्ये:

  • या सर्वोत्तम पद्धती आणि सर्वोत्तम पद्धतींवर आधारित, वापरासाठी शिफारस केलेल्या प्रतिमा आहेत.
  • त्या मूळ प्रतिमा आहेत ज्या अधिक सानुकूलित करण्यासाठी प्रारंभ बिंदू असू शकतात. उदाहरणार्थ, उबंटू, सेंटोस किंवा लायब्ररी आणि विकास वातावरणाच्या मूळ प्रतिमा.
  • निश्चित भेद्यतेसह नवीनतम सॉफ्टवेअर आवृत्त्यांचा समावेश आहे.
  • हे उत्पादनांचे अधिकृत वितरण चॅनेल आहे. फक्त अधिकृत प्रतिमा शोधण्यासाठी, तुम्ही पर्याय वापरू शकता -फिल्टर "आधिकारिक = सत्य"आज्ञा डॉकर शोध.

कमांड आउटपुटमधील तारे डॉकर शोधप्रतिमेच्या लोकप्रियतेशी संबंधित आहे. हे बटणाचे अॅनालॉग आहे आवडलेसामाजिक नेटवर्कवर किंवा इतर वापरकर्त्यांसाठी बुकमार्क करणे. स्वयंचलितम्हणजे प्रतिमा डॉकर हब वापरून सानुकूल स्क्रिप्टमधून स्वयंचलितपणे तयार केली जाते. सहसा, आपण आपोआप संकलित केलेल्या प्रतिमांना प्राधान्य दिले पाहिजे कारण त्यातील सामग्री संबंधित फाइलच्या ओळखीने तपासली जाऊ शकते.

अधिकृत HA प्रॉक्सी प्रतिमा डाउनलोड करा:

$ डॉकर पुल हॅप्रॉक्सी डीफॉल्ट टॅग वापरणे: नवीनतम

प्रतिमेचे पूर्ण नाव असे दिसू शकते:

[वापरकर्तानाव] प्रतिमा नाव [: टॅग]

आपण कमांडसह डाउनलोड केलेल्या प्रतिमांची सूची पाहू शकता डॉकर प्रतिमा:

कंटेनर लाँच करणे

कंटेनर चालविण्यासाठी प्रतिमा डाउनलोड करणे आवश्यक नाही. उपलब्ध असल्यास, ते स्वयंचलितपणे लोड केले जाईल. उबंटूसह कंटेनर सुरू करण्याचा प्रयत्न करूया. आम्ही रेपॉजिटरी सूचीबद्ध करणार नाही आणि Canonical द्वारे समर्थित नवीनतम अधिकृत प्रतिमा डाउनलोड करू.

$ docker run -it ubuntu [ईमेल संरक्षित]:/#

$ रन - ते उबंटू

रूट @ d7402d1f7c54: / #

संघाशिवाय धावणे, आम्ही दोन पर्याय निर्दिष्ट केले आहेत: -i- कंटेनर परस्परसंवादीपणे चालला पाहिजे आणि -ट- छद्म-टर्मिनल हायलाइट करणे आवश्यक आहे. जसे तुम्ही आउटपुटवरून पाहू शकता, आमच्याकडे कंटेनरमध्ये रूट वापरकर्ता विशेषाधिकार आहेत आणि कंटेनर आयडी होस्टनाव म्हणून प्रदर्शित केला जातो. नंतरचे सर्व कंटेनरसाठी खरे असू शकत नाही आणि कंटेनर विकसकावर अवलंबून असते. हे खरोखर उबंटू वातावरण आहे हे तपासूया:

[ईमेल संरक्षित]: / # cat / etc / * रिलीज | grep DISTRIB_DESCRIPTION DISTRIB_DESCRIPTION = "उबंटू 16.04.1 LTS"

रूट @ d7402d1f7c54: / # cat / etc / * रिलीज | grep DISTRIB_DESCRIPTION

DISTRIB_DESCRIPTION = "उबंटू 16.04.1 LTS"

Unname आज्ञा -अअशा हेतूंसाठी ते कार्य करणार नाही, कारण कंटेनर होस्ट कर्नलसह कार्य करते.

पर्यायांपैकी एक एक अनन्य कंटेनर नाव असू शकते जे व्यतिरिक्त, सोयीसाठी संदर्भित केले जाऊ शकते कंटेनर आयडी.म्हणून दिले जाते -नाव<имя>. पर्याय वगळल्यास, नाव आपोआप तयार होईल.

आपोआप व्युत्पन्न केलेल्या कंटेनरच्या नावांवर अर्थाचा भार नसतो, तथापि, एक मनोरंजक वस्तुस्थिती म्हणून, हे लक्षात घेतले जाऊ शकते की नावे विशेषण आणि प्रसिद्ध शास्त्रज्ञ, शोधक किंवा हॅकरच्या नावावरून यादृच्छिकपणे व्युत्पन्न केली जातात. जनरेटर कोडमध्ये, प्रत्येक नावासाठी, आपण दिलेली आकृती कशासाठी ओळखली जाते याचे एक लहान वर्णन शोधू शकता.

आपण कमांडसह चालू कंटेनरची सूची पाहू शकता. हे करण्यासाठी, दुसरे टर्मिनल उघडा:

तथापि, आम्ही कमांड जारी केल्यास, आम्हाला mysql इमेजमधून तयार केलेला कंटेनर सापडणार नाही. चला पर्याय वापरूया -अजे सर्व कंटेनर दाखवते, फक्त चालणारे कंटेनर नाही:

अर्थात, कंटेनर सुरू करताना आवश्यक मापदंड निर्दिष्ट केले नव्हते. कंटेनर चालविण्यासाठी आवश्यक असलेल्या पर्यावरणीय चलांच्या वर्णनासाठी, डॉकर हबवरील अधिकृत MySQL प्रतिमा पहा. पर्याय वापरून पुन्हा प्रयत्न करूया -ईजे कंटेनरमध्ये पर्यावरण व्हेरिएबल्स सेट करते:

$ docker रन --name mysql-test ↵ -e MYSQL_ROOT_PASSWORD = डॉकर -d mysql

शेवटचे पॅरामीटर ही कमांड आहे जी आपल्याला कंटेनरमध्ये कार्यान्वित करायची आहे. या प्रकरणात, तो कमांड इंटरप्रिटर आहे. बाश... पर्याय -तेकमांडमध्ये पूर्वी वापरलेल्या उद्देशाप्रमाणेच आहेत डॉकर रन.

खरं तर ही कमांड कंटेनरमध्ये चालवल्यानंतर mysql-चाचणीआणखी एक प्रक्रिया जोडली आहे - बाश... हे pstree कमांड वापरून स्पष्टपणे पाहिले जाऊ शकते. कमांडला संक्षिप्त आउटपुट डॉकर exec: