عامل الميناء للواجهة الأمامية. الجزء 2. ما أنت؟


أستمر في فك تشفير تقرير Docker الخاص بي للواجهة الأمامية من مؤتمر FrontendConf 2019 .


في الجزء السابق ، حاولت الإجابة على سؤال حول سبب احتياج مطور الواجهة الأمامية إلى Docker . اليوم سأحاول أن أقول بلغة بسيطة عن نوع الأداة ، وكيف تعمل ، ومقارنتها بالمفاهيم الأخرى المعروفة في الواجهة الأمامية.


محتوى


  1. عامل الميناء للواجهة الأمامية. الجزء 1. لماذا؟
  2. عامل الميناء للواجهة الأمامية. الجزء 2. ما أنت؟
  3. عامل الميناء للواجهة الأمامية. الجزء 3. بعض الوصفات

مادا انت


من لا يعرف ما هو عامل الميناء ، فإنهم يتخيلون ذلك بطريقة مختلفة.



شخص ما يعتقد أن هذه وسيلة لتثبيت الحاوية على الجهاز.



بموجب إعلان VK للجزء السابق من هذه المقالة ، ظهر تعليقان فكاهيان.



ويبدو أن مسؤولي النظام فقط يعرفون شيئا.



يقدم لنا اللاعبون من Docker، Inc هذه الأداة من خلال شعار التسويق:


تصحيح التطبيق الخاص بك ، وليس بيئتك
جمع بأمان ومشاركة وتشغيل أي تطبيق في أي مكان

هي الماكرة قليلا. من الممكن حقًا الجمع والمشاركة والإطلاق. ولكن مع "آمنة" ومع "أي مكان" الأشياء ليست كذلك.


يمكنك معرفة مشاكل الأمان ، على سبيل المثال ، في هذه المقالة ، ولكن عن "أي مكان" سأتحدث أكثر قليلاً.


الافتراضية


ظهرت إمكانية الافتراضية منذ وقت طويل.


عندما كنت أطور في عام 2012 ، قام فريقي بمشاريع Ruby on Rails. كنت بحاجة إلى تشغيل أشياء مثل Ruby و MySQL و PostgreSQL على جهاز الكمبيوتر المحمول. كل هذا كان يعمل بشكل سيء للغاية تحت ويندوز ، لذلك اضطررت إلى استخدام الافتراضية.


ثم كانت هناك حلول مثل VirtualBox ، VMware Workstation ، Vagrant . تم نقل بيئة العمل بأكملها إلى الجهاز الظاهري ، وبقي IDE و Git والمتصفح فقط في النظام المضيف.



يوضح هذا المخطط ، المأخوذ من وثائق Docker ، كيفية عمل الأجهزة الظاهرية ( VMs ).


لدينا بنية أساسية (جهاز الكمبيوتر الخاص بنا) و Hypervisor (برنامج VMWare أو VirtualBox أو أي شيء آخر). ولهذا كله ، نقوم بتشغيل جهاز افتراضي يتضمن نظام التشغيل الضيف ( Guest OS ) ، المكتبات الضرورية ( Bins / Libs ) وتطبيقنا ( App ).


بطبيعة الحال ، تبين أن الأجهزة الافتراضية نفسها كبيرة وبطيئة للغاية. كانت النفقات العامة للحفاظ على الجهاز الظاهري عالية. جهاز الكمبيوتر المحمول بالكاد استغرق كل شيء.



اقترح Docker، Inc أننا لا نقوم بسحب نظام التشغيل الضيف في حاوية افتراضية ، ولكن نستخدم نظام المضيف ونحصل على عزل العملية باستخدام آلية cgroups في Linux .


هذا يقلل بشكل كبير من حجم الصور. على سبيل المثال ، يبلغ وزن alpine: 3.11.0 (توزيع لنظام Linux يركز على الأمان والخفة ومتطلبات الموارد المنخفضة) 2.5 ميغابايت فقط ، وصورة عامل ميناء مع عقدة: alpine فقط 27 ميغابايت .


أي يمكن حزم موقعنا / تطبيقنا في صورة بحجم 30 ميغابايت تكفي لتشغيلها في Docker ، وستعمل في أي مكان؟ نعم ، ولكن هناك فروق دقيقة.


تثبيت عامل الميناء


يتم توزيع Docker في نسختين: Community Edition (CE) و Enterprise Edition (EE) . نحتاج Docker CE ، لأنه إنه مجاني ويحل جميع المشكلات التي نحتاجها.


و Docker هو أيضا سطح المكتب والخادم.



الخادم


تم تصميم إصدارات الخوادم ليتم تثبيتها على نظام Linux ودعم 4 توزيعات وبعض البنية فقط. لذلك ، العبارة التي يمكنك تشغيل حاوية عامل ميناء "في أي مكان" غير صحيحة بالكامل.


سطح المكتب


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


يبدو التثبيت على جهاز كمبيوتر مألوفًا قدر الإمكان لمستخدم Mac.



أو ، إذا كنت تحب Homebrew.


brew cask install docker 

بعد ذلك ، يصبح التطبيق متاحًا في شريط الحالة العلوي ومن وحدة التحكم.



التحذير هو أن مجموعات تحكم Linux ( cgroups ) مفقودة على Mac و Windows (مفاجأة ، مفاجأة) ، لذلك يستخدم Docker Desktop إطار عمل Mac OS Hypervisor و Microsoft Hyper-V ، على التوالي.



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


إخراج docker stats :


 CONTAINER ID NAME MEM USAGE e4941ea92ce7 nginx_1 3.16MiB 1b023bfff38f api_1 351.5MiB e07c6958e378 pg_1 18.64MiB 1fa783f5fdbc terminal-front_1 14.89MiB 72e9dfa0805a adminer_1 11.19MiB e9ce9f965867 admin-front_1 1.312MiB 3edacc59a77b certbot_1 1.547MiB 

نرى أن قاعدة البيانات استغرقت 19 ميغابايت ، و Java API - 352 ميغابايت .


ما هو مدرج في دوكر سطح المكتب


تم تصميم Docker كعمارة نمطية ، لذلك عند تثبيت Docker Desktop ، تحصل على العديد من البرامج في وقت واحد.


محرك عامل الميناء


يتضمن Docker Engine أدوات بناء الحاوية ، وسجل حاويات ، وأدوات تزامن ، ووقت تشغيل ، وغير ذلك الكثير. هذا هو مشروع مفتوح المصدر مكتوب في الذهاب . يبدأ كـ daemon ، والذي يوفر واجهة برمجة تطبيقات RESTful لتنفيذ الأوامر.


يتيح لك هذا الحل إدارة الحاويات من أي مكان تقريبًا ، على سبيل المثال ، من مستعرض أو Node.js أو حتى من Minecraft .



عامل ميناء CLI


عميل وحدة التحكم لـ Docker Engine API.


أيضا مشروع مفتوح المصدر مكتوب في الذهاب .


عامل الميناء يؤلف


أداة لوصف وإطلاق تطبيقات حاوية متعددة. شيء مفيد للغاية في التنمية.


يشعر وكأنه SRE . مكتوب بشكل طبيعي في بيثون.


آلة قفص الاتهام


أداة لإدارة المضيفين البعيدين المثبت عليهم Docker. نحن لا نستخدم في التنمية ، ولكن يأتي مع البقية.


Kitematic


واجهة المستخدم الرسومية المفتوحة المصدر محرك واجهة المستخدم الرسومية مكتوبة في جافا سكريبت (الإلكترون) .


مثالي لأولئك الذين لا يحبون وحدة التحكم وحتى بالنسبة إلى GIT يستخدمون واجهة رسومية.


الأداة خام للغاية ، ولكنها تعمل ( الإصدار 17.0 ، > 800 إصدار مفتوح ).



عامل الميناء ليس فقط للمسؤولين


الآن قليل من القياس المجاني لمطوري الواجهة الأمامية لإظهار أن هذه الأداة لديها الكثير من الأشياء المشتركة مع الأشياء المألوفة لنا ، والمطورين الواجهة الأمامية ، مثل Node.js و NPM.


صورة


صورة عامل الميناء. يمكننا نشره في مكان ما ، على سبيل المثال ، في DockerHub. يمكننا أيضًا نشر NPM- .


Dockerfile


وصفة لصورة. ليس لدينا وصفات ، ولكن هناك حزمة / تطبيق بيان - package.json .


بناء عامل ميناء


وضع صورة عامل ميناء معا. حسنًا ، في النهاية الأمامية نقوم ببناء تطبيقنا - npm run build .


DockerHub



لا ينبغي الخلط بينه وبين محور شعبية أخرى. هذا هو سجل صور عامل ميناء. لدينا سجلنا الخاص - سجل NPM Registry .


تشغيل عامل الميناء


أمر وحدة التحكم الذي يقوم بتشغيل الحاوية. أقرب تناظرية من عالم الواجهة الأمامية هي أمر npm start .


بدأ المشروع كتطور خاص


بدأ مشروع Docker في عام 2008 كتطوير داخلي خاص بـ dotCloud ، وفي مارس 2013 فقط تم نشره في مصدر مفتوح.


لدينا Node.js ، على الرغم من أنها كانت مفتوحة المصدر في الأصل ، ولكن حتى فبراير 2015 ، وكانت القصة الفاضحة مع io.js تدار من قبل Joyent .


تستخدم لكل شيء


نعلم جميعًا أن NPM هو Node Package Manager . لقد كانت موجودة ، ولكن الآن هناك حزم ليس فقط لـ Node.js ، ولكن أيضًا للمتصفح .


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


نفس الشيء مع DockerHub . يمكنك نشر أي شيء هناك. لا يوجد ما قبل الاعتدال.


هناك بدائل مصممة لتحل محل


نعلم جميعًا أن هناك مديري حزم بديلين يمكنك استخدامهم إذا كنت لا تحب NPM . هذا هو الغزل ، pnpm ، jspm .


يمكن أيضًا استبدال عامل الميناء بالبدائل. على سبيل المثال ، Podmad أو Buildah .


بعض الوصفات


آمل أن أتمكن من تحديد الخطوط العامة لهذه الأداة.


أخطط في الجزء التالي لعرض وصفات وحالات محددة لاستخدام Docker للجهة الأمامية.

Source: https://habr.com/ru/post/ar479018/


All Articles