كيفية إنشاء حاوية لتطبيق بايثون فلاسك

تحاوية تطبيق Flask باستخدام Docker Linux Debian Centos Redhat Ubuntu

المقدمة

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

ما هو Docker؟

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

لماذا تحاوي تطبيق Flask؟

تحاوية تطبيق Flask تقدم العديد من الفوائد:

  • التناسق: تضمن الحاويات أن التطبيق يعمل في نفس البيئة، مما يلغي مشكلة “يعمل على جهازي”.
  • قابلية النقل: يمكن تشغيل الحاويات على أي نظام يدعم Docker، مما يسهل نقل التطبيقات بين بيئات مختلفة.
  • قابلية التوسع: يجعل Docker من السهل توسيع التطبيقات أفقياً عن طريق تشغيل العديد من مثيلات الحاويات.
  • العزل: تعمل كل حاوية في بيئتها المعزولة، مما يمنع التعارضات بين التطبيقات المختلفة على نفس المضيف.

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

قبل أن نبدأ، تأكد من أن لديك ما يلي:

  • معرفة أساسية بـ Python وFlask
  • Docker مثبت على جهازك
  • تطبيق Flask نموذجي

إعداد تطبيق Flask الخاص بك

لنبدأ بإعداد تطبيق Flask بسيط. قم بإنشاء دليل لمشروعك وانتقل إليه:

$ mkdir flask_app
$ cd flask_app

قم بإنشاء بيئة افتراضية وتنشيطها:

$ python -m venv venv
$ source venv/bin/activate  # على Windows استخدم `venv\Scripts\activate`

قم بتثبيت Flask:

$ pip install Flask

قم بإنشاء ملف باسم app.py بالمحتوى التالي:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
    return "Hello, Docker!"
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

كتابة Dockerfile

Dockerfile هو مستند نصي يحتوي على جميع الأوامر لتجميع صورة. قم بإنشاء ملف باسم Dockerfile في جذر دليل مشروعك:

# استخدام صورة Python الرسمية
FROM python:3.9-slim
# تعيين دليل العمل داخل الحاوية
WORKDIR /app
# نسخ محتويات الدليل الحالي إلى الحاوية في /app
COPY . /app
# تثبيت الحزم المطلوبة المحددة في requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# جعل المنفذ 5000 متاحًا للعالم خارج هذه الحاوية
EXPOSE 5000
# تعريف متغير البيئة
ENV NAME World
# تشغيل app.py عند إطلاق الحاوية
CMD ["python", "app.py"]

قم بإنشاء ملف requirements.txt وأضف Flask إليه:

Flask==2.0.1

بناء الصورة Docker

مع جاهزية Dockerfile وتطبيقك، يمكنك بناء صورة Docker الخاصة بك. في المحطة الطرفية الخاصة بك، قم بتشغيل الأمر التالي:

$ docker build -t flask-app .

يبني هذا الأمر صورة باسم flask-app باستخدام Dockerfile في الدليل الحالي.

تشغيل الحاوية Docker

بعد بناء صورة Docker، يمكنك تشغيلها في حاوية. استخدم الأمر التالي لبدء الحاوية:

$ docker run -d -p 5000:5000 flask-app

يشغل هذا الأمر الحاوية في وضع منفصل (-d) ويربط المنفذ 5000 في المضيف بالمنفذ 5000 في الحاوية.

اختبار تطبيق Flask الخاص بك

افتح متصفح الويب الخاص بك وانتقل إلى http://localhost:5000. يجب أن ترى الرسالة “Hello, Docker!” مما يؤكد أن تطبيق Flask الخاص بك يعمل داخل حاوية Docker.

إدارة الاعتماديات باستخدام Docker Compose

Docker Compose هو أداة لتعريف وتشغيل تطبيقات Docker متعددة الحاويات. لإدارة تطبيق Flask الخاص بك واعتمادياته، قم بإنشاء ملف docker-compose.yml:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"

قم بتشغيل الأمر التالي لبدء تطبيقك باستخدام Docker Compose:

$ docker-compose up -d

التعامل مع متغيرات البيئة

يمكن إدارة متغيرات البيئة بشكل أكثر فعالية باستخدام Docker Compose. قم بإنشاء ملف .env لمتغيرات البيئة الخاصة بك:

FLASK_ENV=development

قم بتعديل docker-compose.yml الخاص بك لتضمين متغيرات البيئة:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    environment:
      - FLASK_ENV=${FLASK_ENV}

تركيب الأحجام للتطوير

لتمكين إعادة التحميل التلقائي أثناء التطوير، قم بتركيب دليل مشروعك كحجم في الحاوية. قم بتحديث docker-compose.yml الخاص بك:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app
    environment:
      - FLASK_ENV=${FLASK_ENV}

حاوية تطبيق Flask مع قاعدة بيانات

تتطلب العديد من التطبيقات قاعدة بيانات. في هذا القسم، سنضيف قاعدة بيانات PostgreSQL إلى تطبيق Flask الخاص بنا باستخدام Docker Compose.

إضافة PostgreSQL إلى Docker Compose

قم بتحديث docker-compose.yml الخاص بك لتضمين خدمة PostgreSQL:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app
    environment:
      - FLASK_ENV=${FLASK_ENV}
      - DATABASE_URL=postgresql://postgres:password@db:5432/postgres
  db:
    image: postgres:13
    environment:
      - POSTGRES_PASSWORD=password

تحديث تطبيق Flask

قم بتعديل تطبيق Flask الخاص بك لاستخدام SQLAlchemy للعمليات المتعلقة بقاعدة البيانات. قم بتثبيت الحزم المطلوبة:

$ pip install Flask-SQLAlchemy psycopg2-binary

قم بتحديث requirements.txt الخاص بك:

Flask==2.0.1
Flask-SQLAlchemy==2.5.1
psycopg2-binary==2.9.1

قم بتحديث app.py لتضمين تكوينات قاعدة البيانات:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:password@db:5432/postgres'
db = SQLAlchemy(app)
@app.route('/')
def home():
    return "Hello, Docker with PostgreSQL!"
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

تشغيل التطبيق

قم ببناء وبدء التطبيق باستخدام Docker Compose:

$ docker-compose up --build

يجب أن يكون تطبيق Flask الخاص بك الآن متصلاً بقاعدة بيانات PostgreSQL تعمل داخل حاوية Docker.

تحسينات متقدمة لـ Dockerfile

يمكن أن يؤدي تحسين Dockerfile الخاص بك إلى تحسين أوقات البناء وتقليل حجم الصورة. إليك بعض النصائح:

بناءات متعددة المراحل

استخدم بناءات متعددة المراحل للحفاظ على صورة نهائية نحيفة. إليك مثال:

# المرحلة الأولى: بناء الاعتماديات
FROM python:3.9-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# المرحلة الثانية: نسخ الملفات الضرورية فقط
FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages
COPY . /app
EXPOSE 5000
CMD ["python", "app.py"]

تخزين الاعتماديات في الذاكرة المؤقتة

استفد من تخزين طبقات Docker المؤقتة عن طريق نسخ ملف الاعتماديات فقط قبل كود التطبيق:

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app

تصحيح الأخطاء في الحاويات Docker

يمكن أن يكون تصحيح الأخطاء في الحاويات Docker تحديًا. إليك بعض الاستراتيجيات:

الوصول إلى الصدفة في الحاوية

يمكنك الوصول إلى الصدفة في حاوية قيد التشغيل باستخدام:

$ docker exec -it <container_id> /bin/bash

عرض سجلات الحاوية

عرض سجلات حاوية قيد التشغيل:

$ docker logs <container_id>

نشر تطبيقات Flask Docker

يمكن نشر التطبيقات المحاوية باستخدام Docker بطرق مختلفة. إليك بعض الخيارات الشائعة:

Docker Hub

Docker Hub هو مستودع سحابي حيث يمكنك تخزين ومشاركة صور Docker. قم بدفع صورتك إلى Docker Hub:

$ docker tag flask-app username/flask-app
$ docker push username/flask-app

Kubernetes

Kubernetes هو نظام مفتوح المصدر لأتمتة نشر وتوسيع وإدارة التطبيقات المحاوية. أنشئ تكوين نشر Kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: flask-app
  template:
    metadata:
      labels:
        app: flask-app
    spec:
      containers:
      - name: flask-app
        image: username/flask-app
        ports:
        - containerPort: 5000

قم بتطبيق تكوين النشر:

$ kubectl apply -f deployment.yaml

AWS Elastic Beanstalk

AWS Elastic Beanstalk هو خدمة سهلة الاستخدام لنشر وتوسيع التطبيقات الويب. قم بتثبيت Elastic Beanstalk في مشروعك:

$ eb init -p docker flask-app
$ eb create flask-app-env

انشر تطبيقك:

$ eb deploy

الأسئلة الشائعة

ما هو Docker؟ Docker هو منصة مفتوحة المصدر تقوم بأتمتة نشر التطبيقات داخل حاويات خفيفة الوزن ومحمولة.

لماذا يجب أن أحاوي تطبيق Flask الخاص بي؟ تحاوية تطبيق Flask الخاص بك تضمن التناسق عبر البيئات المختلفة، تحسن من قابلية النقل، التوسع وتوفر العزل بين التطبيقات.

كيف يمكنني بناء صورة Docker لتطبيق Flask الخاص بي؟ قم بإنشاء Dockerfile بالتعليمات اللازمة وقم بتنفيذ الأمر docker build -t <image_name> ..

هل يمكنني استخدام Docker Compose لتطبيق Flask الخاص بي؟ نعم، Docker Compose يمكنه إدارة التطبيقات متعددة الحاويات والتعامل مع متغيرات البيئة وتركيب الأحجام.

كيف يمكنني توصيل تطبيق Flask الخاص بي بقاعدة بيانات PostgreSQL في Docker؟ حدد خدمة PostgreSQL في ملف docker-compose.yml الخاص بك وقم بتكوين تطبيق Flask لاستخدام URL قاعدة البيانات.

كيف يمكنني نشر تطبيق Flask Docker الخاص بي؟ يمكنك نشر تطبيقك باستخدام Docker Hub، Kubernetes أو AWS Elastic Beanstalk، من بين منصات أخرى.

الخلاصة

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

LEAVE A COMMENT