عامل الميناء يؤلف دليل كاتب

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

صورة

ما هو دوكر يؤلف؟


Docker يؤلف هو أداة المضمنة مع Docker. وهي مصممة لحل المشاكل المرتبطة بنشر المشاريع.

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

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

Docker يؤلف تقنية ، إذا تم وصفه بطريقة مبسطة ، مع أمر واحد ، لإطلاق العديد من الخدمات.

الفرق بين عامل الميناء و عامل الميناء


يستخدم Docker لإدارة الحاويات الفردية (الخدمات) التي تشكل التطبيق.

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


عامل الميناء (حاوية واحدة) ورسامة الإنشاء (حاويات متعددة)

نموذجي عامل الميناء يؤلف حالة الاستخدام


Docker Compose هي ، في اليد اليمنى ، أداة قوية للغاية تتيح لك نشر التطبيقات بسرعة باستخدام بنية معقدة. سننظر الآن في مثال على الاستخدام العملي لـ Docker Compose ، والذي سيتيح لك تحليله تقييم المزايا التي ستمنحك باستخدام Docker Compose.

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

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

لسوء الحظ ، لم تستخدم شيئًا مثل Docker Compose. لذلك ، سيتعين عليك نقل الخدمات وإعادة تكوينها واحدة تلو الأخرى ، على أمل ألا تنسى أي شيء في عملية هذا العمل.

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

تطوير تطبيق خادم عميل باستخدام Docker Compose


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

يرجى ملاحظة أننا نتوقع منك امتلاك أساسيات Docker وأن لديك بالفعل منصة Docker مثبتة.

دعنا ننكب على العمل في المشروع.

▍1. إنشاء المشروع


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

  • docker-compose.yml . هذا ملف Docker Compose يحتوي على الإرشادات اللازمة لبدء الخدمات وتكوينها.
  • مجلد server . سوف يحتوي على الملفات اللازمة لضمان تشغيل الخادم.
  • مجلد client . هنا ستكون ملفات تطبيق العميل.

نتيجة لذلك ، يجب أن تبدو محتويات المجلد الرئيسي لمشروعك كما يلي:

 . ├── client/ ├── docker-compose.yml └── server/ 2 directories, 1 file 

▍2. إنشاء الخادم


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

2A. إنشاء ملف


انتقل إلى مجلد server وقم بإنشاء الملفات التالية فيه:

  • ملف server.py . وسوف تحتوي على كود الخادم.
  • ملف index.html . سيحتوي هذا الملف على جزء من النص يجب أن يعرضه تطبيق العميل.
  • ملف Dockerfile . هذا ملف Docker يحتوي على الإرشادات اللازمة لإنشاء بيئة خادم.

هذا ما يجب أن تبدو عليه محتويات server/ المجلد:

 . ├── Dockerfile ├── index.html └── server.py 0 directories, 3 files 

2B. تحرير ملف بايثون.


أضف الكود التالي إلى ملف server.py :

 #!/usr/bin/env python3 #    python. #       -. #     - ,      Python. import http.server import socketserver #         . handler = http.server.SimpleHTTPRequestHandler #   ,        1234. #    ,        ,    docker-compose. with socketserver.TCPServer(("", 1234), handler) as httpd:   #       ,    .  httpd.serve_forever() 

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

2C. ملف HTML التحرير


أضف النص التالي إلى ملف index.html :

 Docker-Compose is magic! 

سيتم إرسال هذا النص إلى العميل.

2D. تحرير Dockerfile


الآن سنقوم بإنشاء Dockerfile بسيط ، والذي سيكون مسؤولاً عن تنظيم وقت التشغيل لخادم بيثون. سنستخدم الصورة الرسمية المعدة لتنفيذ البرامج المكتوبة في بيثون كأساس للصورة التي تم إنشاؤها. فيما يلي محتويات Dockerfile:

 #    ,  Dockerfile       . #      'FROM'. #      python ( DockerHub). #   ,    ,  'python',     - 'latest'. FROM python:latest #       ,   Python,     'server.py'  'index.html'. #     ,     'ADD'. #  , 'server.py',    ,   . #  , '/server/',  ,        . #        '/server/'. ADD server.py /server/ ADD index.html /server/ #     'WORKDIR', ,   . #      . #    ,      ,   '/server/'. WORKDIR /server/ 

الآن دعونا نعمل على العميل.

▍3. خلق العملاء


عند إنشاء جزء العميل من مشروعنا ، سنتذكر في وقت واحد بعض أساسيات Docker.

3A. إنشاء ملف


انتقل إلى مجلد مشروع client الخاص بك وقم بإنشاء الملفات التالية فيه:

  • الملف client.py . سيكون هذا رمز العميل.
  • ملف Dockerfile . يلعب هذا الملف نفس دور ملف مشابه في مجلد الخادم. وهي تحتوي على تعليمات تصف إنشاء بيئة لتنفيذ رمز العميل.

نتيجة لذلك ، يجب أن يبدو client/ مجلدك في هذه المرحلة من العمل كما يلي:

 . ├── client.py └── Dockerfile 0 directories, 2 files 

3B. بيثون ملف التحرير


أضف الكود التالي إلى ملف client.py :

 #!/usr/bin/env python3 #    Python. #      'index.html'  . #     ,      Python. import urllib.request #      'http://localhost:1234/'. # ,      ,   'http://localhost:1234'. # localhost   ,      . # 1234 -   ,        . fp = urllib.request.urlopen("http://localhost:1234/") # 'encodedContent'     ('index.html'). # 'decodedContent'     (  ,      ). encodedContent = fp.read() decodedContent = encodedContent.decode("utf8") #   ,    ('index.html'). print(decodedContent) #    . fp.close() 

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

3C. تحرير Dockerfile


كما في حالة الخادم ، نقوم بإنشاء Dockerfile بسيط للعميل ، يكون مسؤولاً عن تهيئة البيئة التي سيعمل فيها تطبيق Python للعميل. هنا هو رمز Dockerfile العميل:

 #   ,     Dockerfile. FROM python:latest #  'client.py'   '/client/'. ADD client.py /client/ #      '/client/'. WORKDIR /client/ 

▍4. عامل الميناء يؤلف


كما لاحظت ، أنشأنا مشروعين مختلفين: الخادم والعميل. كل واحد منهم لديه Dockerfile الخاصة به. حتى الآن ، كل ما يحدث لا يتجاوز أساسيات العمل مع Docker. الآن بدأنا مع Docker Compose. للقيام بذلك ، ننتقل إلى ملف docker-compose.yml الموجود في المجلد الجذر للمشروع.

يرجى ملاحظة أننا هنا لا نحاول النظر تمامًا في جميع الأوامر التي يمكن استخدامها في docker-compose.yml . هدفنا الرئيسي هو أن نقدم لك مثالًا عمليًا يمنحك المعرفة الأساسية لـ Docker Compose.

إليك الرمز الذي يجب وضعه في docker-compose.yml :

 #  docker-compose     . #   "3"    -        . version: "3" #  ,  docker-composes   . # 1  = 1 . #    , ,   ... # ,     ,   'services'. services: #    ,       . #  ,     . #   (): . #    ,   . #       . #  ,    ,    'server'. server:   #   "build"     #    Dockerfile,      ,   #    .   #  'server/'     ,   #    Dockerfile.   build: server/   # ,      .   #     "python ./server.py".   command: python ./server.py   #   ,      'server/server.py'   1234.   #          (   ),   #         .   #       'ports'.   #      : [ ]:[ ]   #        1234         # 1234  (         #   ).   ports:     - 1234:1234 #   (): . #    'client'. client:   #  'client/    ,     #  Dockerfile    .   build: client/   # ,      .   #     "python ./client.py".   command: python ./client.py   #   'network_mode'     .   #    ,      'localhost' .   network_mode: host   #   'depends_on'  ,   ,   #   , ,       .   #  ,   'client'       'server'.   depends_on:     - server 

▍5. مشروع التجمع


بعد أن يتم تضمين جميع التعليمات اللازمة في docker-compose.yml ، يحتاج المشروع إلى تجميع. تشبه هذه الخطوة من عملنا استخدام docker build ، لكن الأمر المقابل يرتبط بعدة خدمات:

 $ docker-compose build 

▍6. إطلاق المشروع


الآن بعد اكتمال المشروع ، حان الوقت لإطلاقه. تتوافق هذه الخطوة من عملنا مع الخطوة التي ، عند العمل مع حاويات فردية ، يتم تنفيذ أمر docker run :

 $ docker-compose up 

بعد تنفيذ هذا الأمر ، يجب أن يعرض الجهاز النص الذي تم تنزيله بواسطة العميل من الخادم: Docker-Compose is magic! .

كما سبق ذكره ، يستخدم الخادم منفذ الكمبيوتر 1234 لخدمة طلبات العميل. لذلك ، إذا ذهبت إلى المستعرض على الموقع http: // localhost: 1234 / ، فسيتم عرض صفحة بها النص Docker-Compose is magic! .

أوامر مفيدة


دعونا نلقي نظرة على بعض الأوامر التي قد تجدها مفيدة عند العمل مع Docker Compose.

يسمح لك هذا الأمر بإيقاف وحذف الحاويات والموارد الأخرى التي تم إنشاؤها بواسطة الأمر docker-compose up :

 $ docker-compose down 

يعرض هذا الأمر سجلات الخدمة:

 $ docker-compose logs -f [service name] 

على سبيل المثال ، في مشروعنا ، يمكن استخدامه في النموذج التالي: $ docker-compose logs -f [service name] .

باستخدام هذا الأمر ، يمكنك سرد الحاويات:

 $ docker-compose ps 

يسمح لك هذا الأمر بتنفيذ أمر في حاوية التنفيذ:

 $ docker-compose exec [service name] [command] 

على سبيل المثال ، قد يبدو كالتالي: docker-compose exec server ls .

يتيح لك هذا الأمر عرض قائمة بالصور:

 $ docker-compose images 

النتائج


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

أعزائي القراء! هل تستخدم Docker Compose في مشاريعك؟

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


All Articles