विंडोज सबसिस्टम लिनक्स (डब्लूएसएल) पर डॉकर को स्थापित और कॉन्फ़िगर करना

आवश्यक शर्तें


शुरू करने से पहले, सुनिश्चित करें कि आपके सिस्टम में लगभग निम्नलिखित कॉन्फ़िगरेशन है:

  • विंडोज 10 संस्करण 1803 बिल्ड 1734 और बाद में
  • WSL के लिए Ubuntu 16.0.4 LTS या ऐसा कुछ (आपका संस्करण थोड़ा भिन्न हो सकता है)

यह महत्वपूर्ण है कि विंडोज का संस्करण और निर्माण यहां इंगित किए गए से कम नहीं है। तथ्य यह है कि, इन नंबरों के साथ शुरू करके, विंडोज डब्लूएसएल कर्नेल में मूलभूत परिवर्तन किए गए हैं जो कि cgroups (नियंत्रण समूहों - 2008 में लिनक्स कर्नेल में जोड़ा गया) के उपयोग की अनुमति देते हैं। और वे डॉकटर के लिए कंटेनर में आपके सिस्टम के संसाधनों का प्रबंधन करने के लिए आवश्यक हैं।



डॉकर-सीई 09.17.0 स्थापित करें


हम डॉकर सामुदायिक संस्करण 17.09.0 स्थापित करेंगे (क्योंकि इस लेखन के समय, WSL पर इंस्टॉल किए जाने पर अधिक हाल के संस्करण गिर गए हैं )।

पहली चीज जो हम करेंगे, वह पिछले सभी डॉकटर प्रतिष्ठानों (यदि कोई हो) से छुटकारा पा लेगा। ऐसा करने के लिए, बैश टर्मिनल चलाएं और निम्नलिखित लिखें:

$ sudo apt-get remove docker docker-engine docker.io containerd runc


अब डॉकर सीई के लिए भंडार स्थापित करें। Apt-get के माध्यम से, हम आवश्यक संस्करण को स्वयं स्रोतों से बनाने के लिए बिना स्थापित कर सकते हैं। आधिकारिक डॉकर वेबसाइट पर सिफारिशों के बाद , हम निम्नलिखित कमांड लिखते हैं:

#   
$ sudo apt-get update
#   ,   apt    HTTPS
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

#      GPG   Docker
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#  Docker   :
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

#        Docker    
$ sudo apt-get update

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

अगला, डॉकर स्थापित करें:

$ sudo apt-get install docker-ce=17.09.0~ce-0~ubuntu

यदि आप उबंटू-शैली WSL का उपयोग नहीं कर रहे हैं, तो आप इस तरह उपलब्ध संस्करणों की सूची देख सकते हैं:

$ apt list -a docker-ce


... या यदि आप APT को छोड़ देते हैं तो किसी अन्य लाइब्रेरी से एक समान कमांड का उपयोग करते हैं।

अंत में, आपको अपने वर्तमान उपयोगकर्ता को डॉकटर समूह में जोड़ने की आवश्यकता है ताकि डोकर इंजन का सही ढंग से उपयोग किया जा सके, जो आपके सिस्टम पर चलना चाहिए जड़ के रूप में।

sudo usermod -aG docker $USER

विंडोज पर डॉकिंग रनिंग


अब जब डॉकर इंस्टॉल हो गया है, तो हमें हर बार जब हम विंडोज़ बूट करते हैं, तो इसे डब्ल्यूएसएल में एक सेवा के रूप में शुरू करने के लिए एक मुश्किल तरीके का उपयोग करने की आवश्यकता होती है। यह इतना आसान नहीं है जितना यह लग सकता है। हमें सुपरयुसर की ओर से कार्य करने और उच्चीकृत विशेषाधिकार के साथ कमांड शेल चलाने की आवश्यकता है, जो कार्य को थोड़ा जटिल करता है।

प्रक्रिया को थोड़ा सरल बनाने के लिए, / usr / स्थानीय / sbin / - एक स्क्रिप्ट में एक नई फ़ाइल बनाएं जिसमें डॉकर सेवा शुरू करने के लिए उपयुक्त कमांड शामिल हों:

$ sudo nano /usr/local/sbin/start_docker.sh

निम्नलिखित सामग्री के साथ:

#!/usr/bin/env bash
sudo cgroups-mount
sudo service docker start

पहला sudo कमांड cgroups को माउंट करने के लिए है (इसे रिबूट पर निष्पादित किया जाएगा), और दूसरा सिस्टम को करने के लिए docker सेवा देता है (यह सेवाओं को शुरू करने और प्रबंधित करने के लिए Ubuntu सबसिस्टम है)।

अब स्क्रिप्ट को चलाने और चलाने दें:

$ sudo chmod +x /usr/local/sbin/start_docker.sh
#  
$ sudo chmod 755 /usr/local/sbin/start_docker.sh
$ /bin/sh /usr/local/sbin/start_docker.sh

हालाँकि, दो कारणों से डॉकर सेवा शुरू नहीं होगी:

  1. स्क्रिप्ट कॉल को सुपरयुसर बनाता है, इसलिए स्क्रिप्ट को सुपरसुसर विशेषाधिकारों के साथ चलना चाहिए ताकि वह काम कर सके। सिद्धांत रूप में, ऐसा करना किसी भी sudo कमांड को लिखने जैसा सरल है, लेकिन इसके लिए, उपयोगकर्ता को प्रत्येक डाउनलोड के बाद अपना डेटा दर्ज करना होगा, जो बहुत कष्टप्रद है।
  2. Cgroups माउंट करने के लिए पहली कमांड को उन्नत विशेषाधिकारों के साथ बैश में चलाया जाना चाहिए। उपयोगकर्ता इनपुट के बिना इसे चलाने के लिए, हमें विंडोज टास्क शेड्यूलर का उपयोग करना होगा।

सब साफ़? फिर बिंदु तक ...

उपयोगकर्ता इनपुट के बिना रूट विशेषाधिकार के साथ एक स्क्रिप्ट चलाना


OSs के लिनक्स परिवार में, / etc / sudoers फ़ाइल यह निर्धारित करती है कि सुपरसुसर विशेषाधिकारों के साथ कौन और क्या चल सकता है। आइए इसे संशोधित करें ताकि आपका उपयोगकर्ता बिना रूट पासवर्ड दर्ज किए लगातार स्क्रिप्ट को कॉल कर सके। (लेकिन इस फ़ाइल के साथ बहुत सावधान रहें! यदि आप नहीं जानते कि आप क्या कर रहे हैं तो सिस्टम से खुद को काटना बहुत आसान है!)

$ sudo nano /etc/sudoers

फ़ाइल के अंत में एक नई पंक्ति जोड़ें। इस स्थिति में, आपको अपना उपयोगकर्ता नाम बिल्कुल पता होना चाहिए (यदि आपको यकीन नहीं है तो इको $ USER चलाएं):

<your username here> ALL=(ALL:ALL) NOPASSWD: /bin/sh /usr/local/sbin/start_docker.sh

अब हम उपयोगकर्ता इनपुट के बिना रूट के रूप में डॉकर सेवा शुरू कर सकते हैं:

$ sudo /bin/sh /usr/local/sbin/start_docker.sh 

हुर्रे, कॉमरेड्स!

विंडोज बूट पर उचित डॉकर स्टार्टअप


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



विंडोज टास्क शेड्यूलर लॉन्च करें और बाएं फलक में टास्क शेड्यूलर लाइब्रेरी का चयन करें । फिर दाएँ फलक में Create Task चुनें



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



टैब में, एक नया ट्रिगर जोड़ें जो स्थानीय उपयोगकर्ता के लॉग इन करते ही कार्य शुरू कर देगा।



क्रिया टैब पर स्विच करना , एक नई क्रिया बनाना जो बश चलाएगा और -c स्विच के साथ हमारी स्क्रिप्ट को तुरंत निष्पादित करेगा :

-c "sudo /bin/sh /usr/local/sbin/start_docker.sh"


कृपया ध्यान दें कि यह उच्चीकृत विशेषाधिकारों के साथ किया जाना चाहिए, इसलिए सामान्य टैब पर उच्चतम विशेषाधिकार चेकबॉक्स के साथ रन की जांच करें बाकी पैरामीटर मुख्य रूप से व्यक्तिगत प्राथमिकताओं पर निर्भर करते हैं, लेकिन मैं अपनी सेटिंग्स दिखाऊंगा। यदि आप चाहें, तो आप उन्हें कॉपी कर सकते हैं। यदि आप एक स्थिर कार पर बैठे हैं तो कुछ पावर सेटिंग्स प्रकट नहीं हो सकती हैं। निजी तौर पर, मैं एक लैपटॉप का उपयोग करता हूं। जैसा कि हमने इरादा किया था, ठीक है। यदि आपने उन्नत विशेषाधिकार वाले आदेशों का उपयोग करते हुए पिछले चरणों में डॉकर लॉन्च नहीं किया है, तो टास्क शेड्यूलर में बनाए गए कार्य पर बस राइट-क्लिक करें और "रन" चुनें! बस इतना ही!









जांचें कि सब कुछ काम करता है


यदि आप इसे सुरक्षित खेलना चाहते हैं, तो अपनी मशीन को रिबूट करें (हाँ, इसके लिए आपको कुछ समय के लिए अपने ब्राउज़र टैब को बंद करना होगा) , बैश शुरू करें और दर्ज करें:

$ docker run --rm hello-world

अगर सब ठीक हो जाता है, तो आपको डॉकटर के मानक ग्रीटिंग दिखाई देंगे। सेवा स्वचालित रूप से और सीधे WSL में शुरू होगी! बधाई हो!

पूर्णांक करना


आपने बस WSL में Docker स्थापित और लॉन्च किया था। इसका मतलब है कि आपके कंटेनर अब आपके सिस्टम पर पहले से चल रहे उबंटू को साझा कर सकते हैं। इस प्रकार, एक नया (वर्चुअलाइज्ड) ओएस तैनात करने की आवश्यकता नहीं है, जैसा कि विंडोज के लिए नियमित डॉकर करता है।

डब्लूएसएल का प्रदर्शन अब तक डब्ल्यूएसएल में [मूल लेख लिखने के समय] वांछित होने के लिए बहुत कुछ छोड़ देता है, लेकिन जैसे-जैसे मंच विकसित होता है और विंडोज अपडेट जारी होते हैं, यह केवल सुधार होगा।


  1. onomatopellan GitHub: https://github.com/Microsoft/WSL/issues/2291#issuecomment-383698720
  2. Official Docker Documentation: https://docs.docker.com/install/linux/docker-ce/ubuntu/
  3. cgroupfs-mount: https://github.com/tianon/cgroupfs-mount
  4. Bash Command Line Interface: https://docs.microsoft.com/en-us/windows/wsl/reference


All Articles