شرح Docker Containerization ببساطة (مع مخططات وكود حقيقي)

Docker Containerization: الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة مكونة من 41 درسًا.

شرح Docker Containerization ببساطة (مع مخططات وكود حقيقي)

دليل مباشر ومختصر: Docker Containerization مشروح بالرسوم البيانية والأمثلة العملية والأوامر المجربة. كل المحتوى مستمد من دورة منظمة تضم 12 فصلاً — وإليكم أفضل ما فيها.

tl;dr
  • تثبيت آلة افتراضية UBUNTU
  • اكتشاف دوكر
  • الأوامر الأساسية
  • Dockerfile
  • تحويل Flask إلى حاوية
~$ cat ./parcours.md # Docker Containerization — 11 فصول
01
تثبيت آلة UBUNTU الافتراضية
→ تنزيل VirtualBox و ISO أوبونتو→ إنشاء الـ VM وتثبيت أوبونتو+ 1 دروس أخرى
02
اكتشاف دوكر
→ ما هو Docker ولماذا استخدامه؟→ تثبيت Docker على Ubuntu+ 1 دروس أخرى
03
الأوامر الأساسية
→ الأوامر الأساسية→ المنافذ، الحجوم ومتغيرات البيئة+ 2 دروس أخرى
04
Dockerfile
→ تشريح Dockerfile→ بناء وتشغيل الصورة الأولى+ 1 دروس أخرى
05
تحويل Flask إلى حاوية
→ مراجعة Flask وإنشاء التطبيق→ Dockerfile Flask، البناء والتشغيل+ 1 دروس أخرى
06
تحويل FastAPI إلى حاوية
→ مراجعة FastAPI وإنشاء الـ API→ Dockerfile FastAPI وواجهة Swagger UI+ 1 دروس أخرى
07
تحويل Streamlit إلى حاوية
→ مراجعة Streamlit وإنشاء لوحة التحكم→ Dockerfile Streamlit والتكوين بدون واجهة+ 1 دروس أخرى
08
Docker-compose
→ لماذا Docker Compose؟→ مشروع Flask + PostgreSQL+ 2 دروس أخرى
🏁
المشروع النهائي (+ 3 فصول في الطريق)
→ تعود بمشروع ملموس وقابل للعرض

تشريح ملف Dockerfile

NOTEالهدف — فهم ماهية ملف Dockerfile، وإتقان كل تعليمة، وكتابة أول Dockerfile لإنشاء صورة Docker مخصصة.
WARNINGقبل البدء — يفترض هذا المختبر أنك أكملت الوحدات السابقة. إذا واجهت تعارضات في الأسماء، أو منافذ مستخدمة بالفعل، أو إذا توقف Docker عن الاستجابة بشكل صحيح، استخدم هذه الأوامر للبدء من الصفر:
bash
# Arrêter TOUS les conteneurs en cours
docker stop $(docker ps -a -q)

# Supprimer TOUS les conteneurs
docker rm $(docker ps -a -q)

# Supprimer TOUTES les images (optionnel)
docker rmi $(docker images -q)

# Forcer la suppression si une image résiste
docker rmi -f $(docker images -q)
⚠ انتبه — هذه الأوامر تحذف كل شيء. لا تستخدمها إلا إذا أردت البدء من بيئة نظيفة. الخيار -f (force) يحذف حتى الصور المستخدمة من قبل الحاويات.

الأهداف التعليمية

TIPفي نهاية هذه الوحدة — ستكون قادراً على إتقان هذه المهارات الأساسية.

ما هو ملف Dockerfile؟

ملف Dockerfile هو ملف نصي يحتوي على سلسلة من التعليمات لبناء صورة Docker. إنه يشبه وصفة الطبخ: كل تعليمة تمثل خطوة تحول الصورة الأساسية إلى صورتك المخصصة.

NOTEتشبيه — فكر في Dockerfile كوصفة طبخ:
  • FROM = المكونات الأساسية (الدقيق، الزبدة...)
  • WORKDIR = سطح العمل (طاولة المطبخ)
  • COPY = إضافة المكونات (السكر، البيض...)
  • RUN = التحضير (الخلط، الطهي...)
  • EXPOSE = تحديد طريقة التقديم (طبق التقديم)
  • CMD = تقديم الطبق (الأمر النهائي)

الصورة الأساسية

يبدأ Dockerfile دائماً من صورة موجودة (FROM). لا نبدأ من الصفر أبداً.

التعليمات

كل سطر هو تعليمة تعدل الصورة: نسخ الملفات، تثبيت الحزم، التكوين...

الصورة النهائية

النتيجة هي صورة مخصصة جاهزة للتشغيل باستخدام docker run.

التعليمات الرئيسية

FROM – الصورة الأساسية

أول تعليمة في أي Dockerfile. تحدد الصورة التي نبدأ منها البناء.

output
FROM python:3.11-slim
NOTEشرح — نستخدم صورة Python 3.11 الرسمية بإصدار slim (نسخة خفيفة بدون الأدوات غير الضرورية). هذا يمنحنا نظام لينكس مع Python 3.11 مثبتاً مسبقاً.

WORKDIR – مجلد العمل

يحدد دليل العمل داخل الحاوية. ستُنفذ جميع التعليمات اللاحقة (COPY، RUN، CMD) داخل هذا المجلد.

output
WORKDIR /app
TIPممارسة جيدة — استخدم دائماً WORKDIR بدلاً من RUN cd /app. ينشئ WORKDIR المجلد تلقائياً إن لم يكن موجوداً ويستمر لجميع التعليمات اللاحقة.

COPY – نسخ الملفات

ينسخ الملفات من جهازك (سياق البناء) إلى الحاوية.

output
COPY . .

النقطة الأولى . = المجلد الحالي على جهازك. النقطة الثانية . = WORKDIR داخل الحاوية (/app).

الطبقات، التخزين المؤقت والممارسات الجيدة

NOTEالهدف — فهم نظام الطبقات والتخزين المؤقت في Docker، وتطبيق الممارسات الجيدة لكتابة ملفات Dockerfile محسّنة.
WARNINGقبل البدء — يفترض هذا المختبر أنك أكملت الوحدات السابقة. إذا واجهت تعارضات في الأسماء، أو منافذ مستخدمة بالفعل، أو إذا توقف Docker عن الاستجابة بشكل صحيح، استخدم هذه الأوامر للبدء من الصفر:
bash
# Arrêter TOUS les conteneurs en cours
docker stop $(docker ps -a -q)

# Supprimer TOUS les conteneurs
docker rm $(docker ps -a -q)

# Supprimer TOUTES les images (optionnel)
docker rmi $(docker images -q)

# Forcer la suppression si une image résiste
docker rmi -f $(docker images -q)
⚠ انتبه — هذه الأوامر تحذف كل شيء. لا تستخدمها إلا إذا أردت البدء من بيئة نظيفة. الخيار -f (force) يحذف حتى الصور المستخدمة من قبل الحاويات.

الأهداف التعليمية

TIPفي نهاية هذه الوحدة — ستكون قادراً على إتقان هذه المهارات الأساسية.

كل تعليمة = طبقة واحدة

عندما ينفذ Docker ملف Dockerfile، تنشئ كل تعليمة (FROM، RUN، COPY، إلخ) طبقة جديدة. صورة Docker هي كومة من الطبقات المتراكمة.

output
FROM python:3.11-slim     ← Layer 1 (image de base)
WORKDIR /app              ← Layer 2
COPY requirements.txt .   ← Layer 3
RUN pip install ...       ← Layer 4
COPY . .                  ← Layer 5
CMD ["python", "app.py"]  ← Layer 6 (métadonnées)
NOTEلماذا الطبقات؟ — تسمح الطبقات لـ Docker بـ:
  • مشاركة الطبقات المشتركة بين عدة صور (مثال: جميع صور Python تشترك في نفس الطبقة الأساسية)
  • تخزين مؤقت الطبقات لتسريع عمليات البناء
  • تقليل مساحة القرص بتخزين كل طبقة مرة واحدة فقط

التخزين المؤقت في Docker

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

WARNINGالقاعدة الأساسية — إذا تغيرت طبقة، تُعاد بناء جميع الطبقات التالية، حتى لو لم تتغير. لذلك فإن ترتيب التعليمات أمر حاسم.

الترتيب السيئ مقابل الترتيب الجيد

سيئ: requirements بعد COPY . .

output
FROM python:3.11-slim
WORKDIR /app
COPY . .                            ← Tout le code source
RUN pip install -r requirements.txt ← Installation des dépendances
CMD ["python", "app.py"]
WARNINGالمشكلة — مع كل تعديل على الكود (حتى مسافة في app.py)، تتغير الطبقة COPY . .. وبما أنها قبل RUN pip install، يجب على Docker إعادة تثبيت جميع التبعيات في كل بناء. في مشروع يحتوي على الكثير من التبعيات، قد يستغرق ذلك عدة دقائق.

جيد: requirements قبل COPY . .

output
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .             ← Seulement les dépendances
RUN pip install -r requirements.txt ← Installation (caché si requirements.txt n'a pas changé)
COPY . .                            ← Le code source (change souvent)
CMD ["python", "app.py"]
TIPالميزة — عند تعديل كود المصدر، تتغير فقط الطبقة COPY . .. أما التبعيات (pip install) فتبقى مخزنة مؤقتاً ولا تُعاد تثبيتها. ينتقل وقت البناء من عدة دقائق إلى بضع ثوانٍ.

ترتيب سيئ

ترتيب جيد

عرض توضيحي: مراقبة التخزين المؤقت

TIPتمرين موجه — لنراقب التخزين المؤقت أثناء عمليتي بناء متتاليتين.

الخطوة 1: إنشاء المشروع

bash
mkdir ~/demo-cache
cd ~/demo-cache

أنشئ requirements.txt :

bash
touch requirements.txt
nano requirements.txt

بناء وتشغيل أول صورة

NOTEالهدف — بناء أول صورة Docker من Dockerfile، تشغيلها، وفهم دور ملف .dockerignore.
WARNINGقبل البدء — يفترض هذا المختبر أنك أكملت الوحدات السابقة. إذا واجهت تعارضات في الأسماء، أو منافذ مستخدمة بالفعل، أو إذا توقف Docker عن الاستجابة بشكل صحيح، استخدم هذه الأوامر للبدء من الصفر:
bash
# Arrêter TOUS les conteneurs en cours
docker stop $(docker ps -a -q)

# Supprimer TOUS les conteneurs
docker rm $(docker ps -a -q)

# Supprimer TOUTES les images (optionnel)
docker rmi $(docker images -q)

# Forcer la suppression si une image résiste
docker rmi -f $(docker images -q)
⚠ انتبه — هذه الأوامر تحذف كل شيء. لا تستخدمها إلا إذا أردت البدء من بيئة نظيفة. الخيار -f (force) يحذف حتى الصور المستخدمة من قبل الحاويات.

الأهداف التعليمية

TIPفي نهاية هذه الوحدة — ستكون قادراً على إتقان هذه المهارات الأساسية.

إنشاء المشروع

الخطوة 1: إنشاء مجلد المشروع

bash
mkdir ~/mon-premier-docker
cd ~/mon-premier-docker

الخطوة 2: إنشاء السكريبت Python

أنشئ ملف hello.py :

bash
touch hello.py
nano hello.py

الصق هذا المحتوى ثم احفظ (Ctrl + O، Entrée، Ctrl + X) :

output
print("Bonjour depuis Docker !")
TIPنصيحة سريعة — يمكنك إنشاء الملف مباشرة من الطرفية:
bash
echo 'print("Bonjour depuis Docker !")' > hello.py

تحقق من محتوى الملف :

bash
cat hello.py

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

أنشئ ملفاً باسم Dockerfile (بدون امتداد) :

bash
touch Dockerfile
nano Dockerfile

الصق هذا المحتوى ثم احفظ (Ctrl + O، Entrée، Ctrl + X) :

output
FROM python:3.11-slim
WORKDIR /app
COPY hello.py .
CMD ["python", "hello.py"]
va-plus-loin

يغطي هذا المقال أهم المقتطفات — الدورة الكاملة Docker Containerization (12 فصلاً، 41 درساً، تمارين محلولة ومشروع نهائي) تأخذك إلى النهاية.

./acceder-au-cours-complet cours gratuit : Maîtriser Claude Code

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

كم من الوقت يستغرق تعلم Docker Containerization؟
مع تقدم منظم (12 فصلاً، 41 درساً قصيراً وعملياً)، يمكن الوصول إلى مستوى تشغيلي في بضعة أسابيع بمعدل 30 إلى 60 دقيقة يومياً. المهم هو تطبيق كل مفهوم فوراً.
هل هناك متطلبات مسبقة؟
تكفي أساسيات الحاسوب. إذا كنت تعرف استخدام الطرفية وقراءة كود بسيط، فأنت جاهز.
من أين أبدأ عملياً؟
طبّق أوامر هذا المقال، ثم تابع الدورة الكاملة Docker Containerization: فهي تربط الـ41 درساً بالترتيب مع تمارين ومشروع نهائي.

📬 هل تريد تلقي هذا النوع من الأدلة كل أسبوع؟ اشترك مجاناً — كود حقيقي، بدون كلام زائد.