المقدمة
لقد أحدثت الحاويات باستخدام 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 لتحسين سير عمل التطوير والنشر الخاص بك