مرحبا يا هبر!
قبل بضعة أشهر ، تحدثت في مؤتمر FrontendConf 2019 مع تقرير Docker للواجهة الأمامية وأرغب في عمل نسخة صغيرة من التقرير لأولئك الذين يحبون القراءة أكثر من الاستماع.
أدعوكم إلى اختيار جميع مطوري الويب ، وخاصة الواجهة الأمامية.
محتوى
- عامل الميناء للواجهة الأمامية. الجزء 1. لماذا؟
- عامل الميناء للواجهة الأمامية. الجزء 2. ما أنت؟
- عامل الميناء للواجهة الأمامية. الجزء 3. بعض الوصفات
تسلق عامل الميناء
Docker ليست أداة جديدة ، تم نشرها لأول مرة في مارس 2013 ومنذ ذلك الحين نمت شعبيتها فقط.

نرى هنا أن وتيرة طلبات Node.js قد وصلت إلى هضبة ولا تتحرك في أي مكان ، بينما تستمر طلبات Docker في الزيادة.

كانت هذه اللعبة في مؤتمر RIT ++ 2019 كجزء من قسم DevOps. وفقًا لتجربتي ، لا يذهب مؤتمر DevOps واحد دون تقارير حول Docker ، تمامًا مثل المؤتمرات الأمامية لا تذهب بدون تقارير حول مقارنة الأُطُر وإعداد حزمة الويب والإرهاق الاحترافي .
دعنا في الطرف الأمامي نبدأ أيضًا في الحديث عن هذه التقنية.

هذه خريطة طريق لمشرفي المواقع . على اليسار هي المهارات اللازمة لأي مسار التنمية. في الواقع ، من الصعب تخيل أن مطور ويب جيدًا لا يعرف Git أو جهاز طرفي أو لا يعرف HTTP.
يوجد Docker هنا أيضًا ، ولكن يوجد في أحشاء فرع تطوير DevOps في البنية التحتية ككود -> حاوية حاويات .
لكننا نعلم أن Docker هو أيضًا أداة رائعة للتنمية ، وليس مجرد استغلال. وفي رأيي ، لديه كل فرصة بعد فترة من الوقت للدخول في القسم " مطلوب لأي قسم" ويصبح متطلبًا إلزاميًا في العديد من الوظائف الشاغرة لمطوري الواجهة الأمامية.
يمكننا القول أننا نعيش الآن في عهد الإرساء . لذلك ، إذا كنت مطورًا متقدمًا ولم تقابله بعد ، فسأخبرك لماذا تفعل هذا.
لماذا؟
الحالة 1. ارفع الواجهة الخلفية
الحالة الأولى والأكثر فائدة التي يمكننا النظر فيها هي إطلاق واجهة برمجة التطبيقات (API) على جهازنا macbook المريح. نعم ، نحن نعرف تقنياتنا جيدًا ، لكن نشر شيء من جهة خارجية ليس دائمًا اختبارًا سهلاً.
في أحد مشاريعنا ، يحتاج المطور الأمامي لتثبيت هذه المجموعة على الكمبيوتر بحيث تعمل واجهة برمجة التطبيقات:
* go1.11 * MySQL * Redis * Elasticsearch * Capistrano * syslog * PostgreSQL
لحسن الحظ ، كان لدينا تعليمات لنشر المشروع في ملفات README . نظروا إلى شيء مثل هذا:
1. GVM (https://github.com/moovweb/gvm) 2. `gvm install go1.11.13 --binary` 3. `gvm use go1.11.13 --default` 4. golang (`gvm linkthis`) 5. `gb` `go get github.com/constabulary/gb/...` 6. `git config --global url."git@git.example.com:".insteadOf "https://git.example.com/"` 7. `gb vendor restore` 8. 9. `npm run build` (`npm run build:dev` ) 10. `npm start`
ومثل هذا:
## Elasticsearch 1. Elasticsearch `brew install elasticsearch` - macOS ( java) 2. * https://github.com/imotov/elasticsearch-analysis-morphology , `/usr/local/Cellar/elasticsearch/2.3.3/libexec/bin/plugin install http://dl.bintray.com/content/imotov/elasticsearch-plugins/org/elasticsearch/elasticsearch-analysis-morphology/2.3.3/elasticsearch-analysis-morphology-2.3.3.zip` - * `brew services restart elasticsearch` 3. `rake environment elasticsearch:import:model CLASS='Tag' FORCE=y ` `rake environment elasticsearch:import:model CLASS='Post' FORCE=y` , ## Postgres comments db 1. `psql -U postgres -h localhost` 2. `create database comments_dev;` ## Redis install and start 1. `brew install redis` 2. `brew services start redis`
ما رأيك ، كم من الوقت استغرق مطور مبتدئ لنشر مشروع والبدء في القيام بالمهام؟
حوالي اسبوع.
بطبيعة الحال ، لم تمر جميع أوامر المحطة الطرفية في المرة الأولى ، وفي كثير من الأحيان أصبحت التعليمات قديمة.
كان يعتبر عادي ومناسب للجميع. أي لجعل ميزة في ساعة واحدة من العمل ، كان من الضروري أولاً قضاء 40 ساعة لنشر جميع المكونات محليًا.
الآن يبدو نشر المشروع مع جميع الخدمات من أجل التنمية بهذا الشكل وبداية باردة يستغرق حوالي 10 دقائق .
$ docker-compose up api ... Listening localhost:8080
يتم تنفيذ جميع أوامر نشر الخدمة أثناء تجميع صور Docker. إنها آلية ولا يمكن تجاوزها.
الحالة 2. الاستقرار
الحالة الثانية هي استقرار نظام الكمبيوتر العامل لدينا.
من يحب وضع بعض برامج الجهات الخارجية على الكمبيوتر المفضل لديهم؟ من يحب تثبيت عدة قواعد بيانات مختلفة ، ومترجمين جدد ، ومترجمين فوريين ؟
ويجب القيام بذلك عند نشر واجهة برمجة تطبيقات تابعة لجهات خارجية.
علاوة على ذلك ، يمكنك كسر النظام وقضاء عدة ساعات في استعادته.

استخدام Docker من أجل التنمية يقوم بعمل جيد جدًا لهذه المشكلة. تدور جميع برامج الطرف الثالث في حاويات معزولة ويمكن إزالتها بسهولة إذا لزم الأمر.
$ docker rm --volumes api $ docker system prune --all
الحالة 3. نحن نسيطر على العملية
والحالة الثالثة التي أود التحدث عنها هي قدرة المطور الأمامي على التحكم في تشغيل خدمته. الأمر متروك لك لتقرر كيف ستعمل خدمته في الإنتاج.
أعلم أن وضع المشروع موضع التنفيذ في كثير من الأحيان يبدو هكذا.
الجبهة: الرجال ، لقد فعلت كل شيء. الكود في اللفت. طرح ، pliz!
المشرف: كيف يتم طرح؟
المقدمة: تقوم بتجميع العقدة وتوزيع الإحصائيات بواسطة خادم الويب من مجلد /build
المسؤول: ما هو إصدار العقدة لجمع؟ ما هو بناء القيادة؟ أي خادم ويب لتوزيعه؟
نتيجة لذلك ، بالنسبة للمسؤول ، يتحول نشر مشروعك إلى مهمة لا تقل إثارة ، كما هو الحال بالنسبة لك لنشر واجهة برمجة التطبيقات (API) على الجهاز المحلي من الحالات السابقة.
حتى إذا كان المشروع سيعمل على جهاز الكمبيوتر الخاص بك ، فليس من الضروري على الإطلاق أن يعمل كل شيء أيضًا على الإنتاج. ونواجه المشكلة الكلاسيكية " إنها تعمل على الجهاز الخاص بي ."

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

دليل للمسؤولين يأتي إلى:
الجبهة: الرجال ، لقد فعلت كل شيء. جمعت صورة عامل الميناء لك. طرح ، pliz!
المشرف: حسنا
حسنًا ، مع ما يجب أن يكون عليه المشرفون والمدربون على العمل مع صور Docker. ليس هذا مع عقدة لدينا.
ما هو عامل ميناء؟
آمل أن أشرح لك سبب وجوب إلقاء نظرة فاحصة على هذه التقنية إذا كنت مطورًا متقدمًا وما زلت لا تعرف ذلك. لكنني لم أخبر قط ما هو عليه.

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