← Back to blog

حاوية تطبيق Python باستخدام Docker

Category
حاوية تطبيق Python باستخدام Docker

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

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

لتنفيذ الخطوات الموضحة في هذا الدليل، ستحتاج إلى المكونات التالية:

حاويات Docker

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

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

لحل هذه المشكلات، يمكننا استخدام حاويات Docker لتوفير عزل على مستوى البرمجيات:

  • ستمتلك التطبيقات داخل الحاوية وصولًا محدودًا إلى الملفات.

  • لا تستطيع التطبيقات الموضوعة في حاويات رؤية العمليات الأخرى العاملة في النظام.

  • يمكن تخصيص قدر محدد من موارد العتاد للحاوية.

  • لا تكون منافذ الشبكة الخاصة بالحاوية مكشوفة للخارج.

  • تغليف متسق لأي شيء تقريبًا عبر بيئات التطوير المحلية والإنتاج.

للتوضيح، سنبني خادم Python بسيطًا داخل حاوية Docker، ثم نحوّل الحاوية إلى صورة، وننشر الصورة داخل بيئة إنتاج تجريبية.

الخطوة 1 – تهيئة نظام الملفات

لاستضافة المشروع، سننشئ أولًا دليلًا مخصصًا:

mkdir -pv python-server-container/
cd !$
mkdir -pv src/

داخل الدليل، أنشئ دليلًا فرعيًا src لتخزين الشيفرة الخاصة بنا:

الخطوة 2 – بناء خادم Python

في هذه الخطوة، سننشئ خادم HTTP بسيطًا باستخدام Python. أنشئ الملف server.py:

touch server.py

افتحه في محرر نصوص:

nano server.py

أدخل شيفرة Python التالية:

from http.server import HTTPServer, SimpleHTTPRequestHandler

def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
    """server entrypoint"""
    server_address = ("0.0.0.0", 8080)
    httpd = server_class(server_address, handler_class)
    print("starting server...")
    httpd.serve_forever()

if __name__ == "__main__":
    run()

هنا:

  • نستخدم الصنف HTTPServer ونطلب معالجًا من مكتبة Python القياسية لإبقاء البرنامج بسيطًا.

  • تبدأ الدالة run نسخة من HTTPserver.

  • كما تشير وسيطات server_address، سيستمع الخادم إلى أي اتصال وارد على المنفذ 8080.

الآن، سنتحقق مما إذا كان الخادم يعمل كما هو متوقع. شغّل الخادم:

python3 server.py

من طرفية جديدة، يمكننا استخدام curl لإرسال طلب إلى الخادم:

curl -iv localhost:8080

بدلًا من ذلك، يمكنك الوصول إلى الرابط من متصفح ويب:

http://localhost:8080

الخطوة 3 – إنشاء Dockerfile

يحتوي Dockerfile على التعليمات اللازمة لإنشاء صورة Docker. ويتم تنفيذ التعليمات داخل الملف بالتسلسل. تعرّف أكثر على Dockerfile.

أنشئ ملف Dockerfile جديدًا لمشروعنا:

touch Dockerfile
nano Dockerfile

أدخل الشيفرة التالية:

FROM python:latest

ENV SRC_DIR /usr/bin/src/test_server/src
COPY src/* ${SRC_DIR}/
WORKDIR ${SRC_DIR}

ENV PYTHONUNBUFFERED=1

CMD ["python", "server.py"]

هنا:

  • يجب أن يبدأ أي Dockerfile بالتوجيه FROM. في حالتنا، نعلن Python كأساس لصورة Docker.

  • يحدد التوجيه ENV SRC_DIR موقع دليل الحاوية.

  • ينسخ التوجيه COPY الملفات من دليل src الذي يستضيف خادم Python حاليًا.

  • يحدد المتغير PYTHONBUFFERED=1 أن Python سيطبع ويسجل المخرجات مباشرة إلى STDOUT.

  • يحدد التوجيه CMD الأمر الافتراضي الذي يتم تشغيله عند تنفيذ الحاوية. في هذه الحالة، نستخدمه لتشغيل خادم Python.

الخطوة 4 – إنشاء صورة Docker

بعد تجهيز Dockerfile، يمكننا الآن بناء صورة. شغّل أمر Docker التالي لبدء العملية:

docker build . -t python_server

هنا:

  • تُستخدم الراية -t لوضع وسم لصورة Docker باسم python_server.

  • سيقوم Docker بتنزيل جميع المكونات اللازمة ودمجها في صورة.

الخطوة 5 – تنفيذ الصورة

الصورة جاهزة للنشر. يمكننا تنفيذها باستخدام الأمر التالي:

docker run -p 8080:8080 python_server

هنا، نعيد توجيه المنفذ 8080 من الجهاز المحلي إلى صورة Docker باستخدام الراية -p.

يمكننا التحقق بسهولة مما إذا كان الخادم يعمل باستخدام curl:

curl -iv localhost:8080

الخطوة 6 – إيقاف الخادم

من الطرفية، اضغط “Ctrl + C” لإنهاء عملية Docker:

الخطوة 7 – تصدير واستيراد صورة Docker

لدينا الآن صورة Docker عاملة تستضيف خادم Python. وبمساعدة ميزات التصدير والاستيراد في Docker، يمكننا نقلها إلى أي نظام آخر.

أولًا، تحقق من قائمة صور Docker في النظام الحالي:

docker images

هدفنا هو صورة Docker باسم python_server التي أنشأناها للتو. سيقوم الأمر التالي بتصديرها كأرشيف TAR:

docker save python_server:latest > python_server.tar

بعد نقل ملف python_server.tar إلى الجهاز الهدف، استخدم الأمر التالي لاستيراد صورة Docker:

docker load < python_server.tar

أفكار ختامية

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

هل ترغب في معرفة المزيد عن Docker؟ راجع الأدلة التالية:

حوسبة سعيدة!

Preslav Dobrev

المؤلف · CloudSigma

التعليقات

لا توجد تعليقات بعد. كن أول من يعلق.