كيفية نشر تطبيق Python Flask API على Docker

إذا كنت جديدًا على Docker والحاويات، فإن تعلم كيفية نشر تطبيق API باستخدام Python Flask على Docker هو وسيلة رائعة للبداية. يتيح لك Docker تحجيم التطبيقات باستخدام تقنية خفيفة الوزن وآمنة لنشر التطبيق بسرعة.

في هذا البرنامج التعليمي، ستتعلم كيف تصبح سيد ذاتك في إعداد ونشر تطبيقات Python Flask API على حاويات Docker.

كن جاهزًا وابدأ النشر!

المتطلبات

إذا كنت ترغب في متابعة الخطوات خطوة بخطوة، ستحتاج إلى تثبيت ما يلي:

  • جهاز Ubuntu مع تثبيت Docker. يستخدم هذا البرنامج التعليمي Ubuntu 18.04.5 LTS مع Docker v19.03.8.
  • تثبيت Python v3.9 أو أحدث على جهاز Ubuntu. سيتم استخدام Python v3.9.2 في هذا البرنامج التعليمي على جهاز Ubuntu.
  • تثبيت حزمة Elinks على جهاز Ubuntu المستخدم لاختبار الواجهة البرمجية في هذا البرنامج التعليمي.

إنشاء تطبيق Python Flask API (GET و POST API)

ابدأ هذا البرنامج التعليمي بإنشاء تطبيق Python Flask. Flask هو إطار تطبيق ويب صغير الحجم يعمل على WSGI ومكتوب بلغة Python. يوفر Flask أدوات وميزات مفيدة في إنشاء تطبيقات ويب بلغة Python.

قبل إنشاء تطبيق Python Flask ، ستقوم بتثبيت بيئة Python Flask و Python الافتراضية حيث سيتم تشغيل Flask التطبيق.

1. تسجيل الدخول إلى جهاز Ubuntu الخاص بك باستخدام عميل SSH المفضل لديك.

2. بعد ذلك ، قم بتشغيل الأوامر التالية لإنشاء دليل يحمل اسم ~/docker_python_flask_demo والانتقال إليه. سيحتوي هذا الدليل على جميع الملفات المطلوبة بواسطة Python و Docker لتشغيل التطبيق.

mkdir ~/docker_python_flask_demo
cd ~/docker_python_flask_demo

3. تشغيل الأمر pip أدناه لتثبيت بيئة Python الافتراضية ( virtualenv ) المطلوبة بواسطة Flask لتنفيذ التطبيقات. توفر بيئة Python الافتراضية برنامج Python الخاص بها وحزم المثبتة لكل تطبيق لتجنب التعارض مع التطبيقات الأخرى.

pip install virtualenv
Installing the environment needed by Flask to execute the applications

4. تنفيذ الأمر virtualenv أدناه لإنشاء وتنشيط بيئة افتراضية باستخدام وحدة venv .

virtualenv venv
Creating the virtual environment for Python

5. الآن ، قم بتشغيل الأمر التالي لتثبيت حزمة Python flask باستخدام مدير الحزم pip .

pip install flask

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

source venv/bin/activate

7. أنشئ ملفًا آخر بالاسم requirements.txt وحدد تبعية تطبيق Flask كما هو موضح أدناه.

Flask==2.0.2

8. أنشئ ملف نصي ~/docker_python_flask_demo/app.py واملأ الملف بالشيفرة البايثونية التالية.

يقوم الشيفرة البايثونية التالية بإستيراد صنف البايثون flask وإنشاء نموذج صنف يسمى app. يحتوي نموذج الصنف app على وظيفتي login() التي تنفذ عندما يرسل المستخدمون طلبات على صفحة /login.

ثم يتم تنفيذ وظيفة success() وعرض رسالة الترحيب “اسم المستخدم” على المتصفح.


from flask import Flask , redirect , url_for , request # استيراد صنف flask
# app هو كائن أو نموذج لـ Flask
app = Flask(__name__)
# app.route يعلم Flask عن عنوان URL الذي سيتم استخدامه بواسطة الوظيفة
@app.route('/success/<name>')
# إنشاء وظيفة تسمى success
def success(name):
    return 'welcome %s' % name

@app.route('/login', methods = ['GET','POST'])
# إنشاء وظيفة تسمى login
def login():
    if request.method == 'POST':
       user = request.form['adamlistek']
       return redirect(url_for('success', name = user)) 
    else:
       return "INVALID"
# يتم تنفيذ البرامج من هنا في خادم تطوير (محليًا على نظامك)
# مع تمكين التصحيح.
  
if __name__ == '__main__':
   app.run(debug = True)

9. إنشاء ملف آخر بالاسم ~/docker_python_flask_demo/form.html وقم بنسخ/لصق الكود أدناه.

تشغيل الكود HTML أدناه ينشئ نموذجًا يحتوي على مدخلين؛ أحدهما نصي لتقديم اسمك، والآخر زر إرسال.

بمجرد تقديم اسم مستخدم والنقر على زر الإرسال، يتم إرسال طلب POST، وتنفذ Flask دالة أخرى وتفتح صفحة ويب جديدة على http://localhost:5000/success/<اسم المستخدم>.

<html>
  <body>
    <form action="http://localhost:5000/login" method="post">
      <p>Please Enter your name</p>
      <p><input type="text" name="adamlistek" /></p>
      <p><input type="submit" value="Submit" /></p>
    </form>
  </body>
</html>

10. في النهاية، قم بتشغيل الأمر Python أدناه للتحقق من عمل التطبيق (app.py) محليًا على نظامك.

Python app.py

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

Running the Python application on the ubuntu machine.

إنشاء ملف Dockerfile لنشر تطبيق API Python Flask

لقد قمت للتو بإنشاء والتحقق من عمل تطبيق Python Flask محليًا على جهازك. ولكن قبل نشر التطبيق على Docker، ستقوم أولاً بإنشاء Dockerfile لتعريف جميع مجموعات التعليمات لبناء صورة Docker.

إنشاء ملف بالاسم Dockerfile في الدليل ~/docker_python_flask_demo، وقم بنسخ/لصق المحتوى أدناه إلى Dockerfile.

سيستخدم Docker هذا Dockerfile لتشغيل جميع التعليمات أو الأوامر اللازمة لبناء صورة Docker جديدة فوق الصورة الأساسية (ubuntu:18.04).

# يحدد الصورة الأساسية للتعليمات التالية
FROM ubuntu:18.04
# يحدد دليل العمل في الحاوية
WORKDIR /app
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev
# ينسخ الملفات إلى دليل العمل
COPY form.html /app/form.html
# ينسخ ملفات الاعتماد إلى دليل العمل
COPY requirements.txt /app/requirements.txt
# يثبت التبعيات
RUN pip install -r requirements.txt
# ينسخ كل شيء إلى دليل العمل
COPY . /app
# الأمر لتشغيله عند بدء التشغيل
CMD [ "python" , "./app.py" ]

الآن، قم بتشغيل الأمر tree أدناه للتحقق من وجود جميع الملفات اللازمة لتشغيل تطبيق Python Flask موجودة في دليل العمل (~/docker_python_flask_demo).

tree  
Verifying all Required Files to Run the Flask Application Exist

بناء صورة Docker لتطبيق Python Flask API

لديك الآن الملفات اللازمة لنشر تطبيق Python Flask، ولكن لن تقوم هذه الملفات بأي شيء ما لم تقم ببناء صورة. ستقوم بتشغيل الأمر docker build لبناء صورة Docker استنادًا إلى التعليمات التي قمت بتعيينها في Dockerfile.

قم بتشغيل الأمر docker build أدناه لبناء صورة Docker في دليل العمل (.). يعلم هذا الأمر الصورة (-t) كـ flask-image الإصدار 1 (:v1).

sudo docker build -t flask-image:v1 .
Building the Docker Image

الآن، قم بتشغيل الأمر docker أدناه لعرض جميع الصور المتاحة.

sudo docker images

أدناه، يمكنك رؤية مختلف السمات المعادة، مثل REPOSITORY. لاحظ أن اسم REPOSITORY هو flask-image ومعلم بالإصدار (v1), كما هو موضح أدناه.

Verifying the New Docker Image (flask-image)

تشغيل تطبيق Python Flask في حاوية Docker

بعد إنشاء صورة Docker، يمكنك الآن تشغيل تطبيق Python flash في حاوية Docker. تقوم حاوية Docker بتعبئة الكود وتبعياته لتشغيل التطبيقات بسرعة.

1. قم بتنفيذ الأمر docker run أدناه للقيام بما يلي:

  • بدء التشغيل في وضع منفصل (-d), بحيث يعمل كعملية خلفية ويعيد إخراج الوحدة التحكم عند الإنشاء.
  • يقوم بربط منفذ المضيف Docker (-p 5000:5000) مع منفذ الحاوية.
  • يطلق حاوية Docker (flask-image:v1)
sudo docker run -d -p 5000:5000 flask-image:v1

2. ثم، قم بتشغيل الأمر docker أدناه لعرض جميع الحاويات في محرك Docker. تحقق مما إذا كانت Docker قد أنشأت الحاوية بنجاح.

sudo docker ps -a
Verifying the Docker container in the Docker engine

3. وأخيرًا، قم بتشغيل الأمر أدناه لفتح متصفح الويب على جهاز Ubuntu باستخدام elinks.

elinks form.html

يفتح الأمر متصفح الويب في الطرفية ويطلب اسمًا، كما هو موضح أدناه.

أدخل اسمك واضغط على زر الإرسال.

Accessing the login web page with the form to enter your name

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

Displaying the welcome message in the web browser

الختام

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

فما هي التطبيقات الأخرى التي تفكر في نشرها على حاوية Docker؟ ربما حاوية Docker لـ MongoDB؟

Source:
https://adamtheautomator.com/python-flask-api/