تثبيت Docker وتكوينه على نظام Windows الفرعي Linux (WSL)

المتطلبات الأساسية


قبل البدء ، تأكد من أن نظامك لديه التكوين التالي تقريبًا:

  • إصدار Windows 10 1803 Build 1734 والإصدارات الأحدث
  • Ubuntu لـ WSL 16.0.4 LTS أو شيء من هذا القبيل (قد يختلف الإصدار قليلاً)

من المهم ألا يكون إصدار Windows وإصداره أقل مما هو موضح هنا. الحقيقة هي أنه بدءًا من هذه الأرقام ، تم إجراء تغييرات أساسية على نواة Windows WSL التي تسمح باستخدام مجموعات cg (مجموعات التحكم - المضافة إلى نواة لينكس في عام 2008). وهي ضرورية لـ Docker لإدارة موارد نظامك في حاويات.



قم بتثبيت Docker-CE 09.17.0


سنقوم بتثبيت Docker Community Edition 17.09.0 (لأنه في وقت كتابة هذا التقرير ، كانت الإصدارات الأحدث قد انخفضت عند تثبيتها على WSL).

أول شيء سنفعله هو التخلص من جميع منشآت Docker السابقة (إن وجدت). للقيام بذلك ، قم بتشغيل محطة باش واكتب ما يلي:

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


الآن قم بتثبيت المستودع لـ Docker CE. من خلال apt-get ، يمكننا تثبيت الإصدار الضروري دون الحاجة إلى بنائه من المصادر بأنفسنا. باتباع التوصيات على موقع Docker الرسمي ، نكتب الأوامر التالية:

#   
$ 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

إذا قمت بإضافة مستودع جديد باستخدام apt ، فكل هذا مألوف لك ككل. إن لم يكن، وآمل أن لا يزال بقي معي :)

المقبل، تثبيت عامل الميناء:

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

إذا كنت لا تستخدم WSL بنمط Ubuntu ، فيمكنك الاطلاع على قائمة الإصدارات المتاحة مثل هذا:

$ apt list -a docker-ce


... أو استخدم أمرًا مشابهًا من مكتبة أخرى إذا تركت APT.

في النهاية ، تحتاج إلى إضافة المستخدم الحالي إلى مجموعة عامل الميناء حتى تتمكن من استخدام Docker Engine بشكل صحيح ، والذي يجب تشغيله على نظامك مع كجذر.

sudo usermod -aG docker $USER

تشغيل Docker على Windows


الآن بعد تثبيت Docker ، نحتاج إلى استخدام طريقة صعبة إلى حد ما لبدء تشغيلها كخدمة في WSL في كل مرة نقوم فيها بتشغيل Windows. هذا ليس سهلا كما قد يبدو. نحن بحاجة إلى التصرف نيابة عن المستخدم الفائق وتشغيل shell الأوامر بامتيازات عالية ، مما يعقد المهمة قليلاً.

لتبسيط العملية قليلاً ، قم بإنشاء ملف جديد في / usr / local / sbin / - وهو برنامج نصي يحتوي على الأوامر المناسبة لتشغيل خدمة Docker:

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

بالمحتويات التالية:

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

الأمر sudo الأول هو تحميل cgroups (سيتم تنفيذه عند إعادة التشغيل) ، والثاني يعطي خدمة عامل إرساء إلى systemd (هذا هو نظام 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

ومع ذلك ، لن تبدأ خدمة Docker لسببين:

  1. يقوم البرنامج النصي بإجراء المكالمات كمستخدم خارق ، لذلك يجب تشغيل البرنامج النصي نفسه بامتيازات المستخدم الخارق للعمل على النحو المنشود. من الناحية النظرية ، فإن القيام بذلك بسيط مثل كتابة أي أمر sudo ، ولكن لهذا ، يجب على المستخدم إدخال بياناته بعد كل تنزيل ، وهو أمر مزعج للغاية.
  2. يجب تشغيل الأمر الأول لتحميل مجموعات cg في bash بامتيازات عالية. لتشغيله دون إدخال المستخدم ، يجب علينا استخدام جدولة مهام Windows.

كله واضح؟ ثم إلى النقطة ...

تشغيل برنامج نصي بامتيازات الجذر بدون إدخال المستخدم


في عائلة أنظمة تشغيل Linux ، يحدد ملف / etc / sudoers من وما الذي يمكن تشغيله بامتيازات المستخدم الخارق. دعونا نقوم بتعديله حتى يتمكن المستخدم من استدعاء البرنامج النصي دون الحاجة إلى إدخال كلمة مرور الجذر باستمرار. (ولكن كن حذرًا جدًا في هذا الملف! من السهل جدًا أن تتخلص من النظام إذا كنت لا تعرف ما تفعله!)

$ sudo nano /etc/sudoers

أضف سطرًا جديدًا إلى نهاية الملف. في هذه الحالة ، يجب أن تعرف اسم المستخدم الخاص بك تمامًا (قم بتشغيل echo $ USER ، إذا لم تكن متأكدًا):

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

يمكننا الآن بدء تشغيل خدمة Docker كجذر بدون إدخال المستخدم:

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

رفاق ، رفاق!

بدء تشغيل Docker المناسب على تمهيد Windows


الآن ، عندما يبدأ النظام ، سنكون قادرين على تشغيل Docker كمسؤول باستخدام أمر منفصل لا يتطلب تفاعل المستخدم.



قم بتشغيل برنامج جدولة المهام لـ Windows وحدد مكتبة جدولة المهام في الجزء الأيمن. ثم حدد إنشاء مهمة في الجزء الأيمن.



بعد ذلك ، ستتم مطالبتك بتعديل الإعدادات الأساسية للمهمة. امنح مهمتك اسمًا واضحًا وتأكد من تطابق بقية الإعدادات مع المهمة. من المهم أن تحدد تشغيل بأعلى الامتيازات .



في علامة التبويب المشغلات ، أضف مشغلًا جديدًا سيبدأ المهمة بمجرد أن يقوم المستخدم المحلي بتسجيل الدخول.



بالتبديل إلى علامة التبويب " الإجراءات" ، قم بإنشاء إجراء جديد يقوم بتشغيل bash وتنفيذ البرنامج النصي الخاص بنا على الفور باستخدام -c :

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


يرجى ملاحظة أن هذا يجب أن يتم ذلك مع امتيازات مرتفعة لذا تأكد من تشغيل مع امتيازات أعلى مربع على العام التبويب .



تعتمد بقية المعلمات بشكل أساسي على التفضيلات الفردية ، لكنني سأعرض الإعدادات الخاصة بي. إذا كنت تريد ، يمكنك نسخها. قد لا تظهر بعض إعدادات الطاقة إذا كنت تجلس على سيارة ثابتة. أنا شخصياً أستخدم جهاز كمبيوتر محمول.



حسنًا ، كل شيء يسير كما قصدنا. إذا لم تقم بتشغيل Docker في الخطوات السابقة باستخدام أوامر بامتيازات عالية ، فما عليك سوى النقر بزر الماوس الأيمن على المهمة التي أنشأناها في "برنامج جدولة المهام" وتحديد "تشغيل"! هذا كل شئ!

تحقق من أن كل شيء يعمل


إذا كنت ترغب في تشغيله بأمان ، فأعد تشغيل جهازك (نعم ، لذلك عليك إغلاق علامات تبويب المتصفح لبعض الوقت) ، وابدأ باش وإدخال:

$ docker run --rm hello-world

إذا سارت الأمور على ما يرام ، سترى تحية Docker القياسية. ستبدأ الخدمة تلقائيًا ومباشرة في WSL! تهانينا!

نهاية الجولة


لقد قمت للتو بتثبيت وتشغيل Docker في WSL. هذا يعني أن حاوياتك يمكنها الآن مشاركة Ubuntu التي تعمل بالفعل على نظامك. وبالتالي ، ليست هناك حاجة لنشر نظام تشغيل جديد (افتراضي) ، كما يفعل Docker العادي لـ Windows.

أداء Docker في WSL حتى الآن [في وقت كتابة المقال الأصلي] يترك الكثير مما هو مرغوب فيه ، ولكن مع تطور النظام الأساسي وإصدار تحديثات Windows ، فإنه سيتحسن فقط.


  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