شرح Docker Containerization ببساطة (مع مخططات وكود حقيقي)
Docker Containerization: الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة مكونة من 41 درسًا.
دليل مباشر ومختصر: Docker Containerization مشروح بالرسوم البيانية والأمثلة العملية والأوامر المجربة. كل المحتوى مستمد من دورة منظمة تضم 12 فصلاً — وإليكم أفضل ما فيها.
- تثبيت آلة افتراضية UBUNTU
- اكتشاف دوكر
- الأوامر الأساسية
- Dockerfile
- تحويل Flask إلى حاوية
تشريح ملف Dockerfile
# 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) يحذف حتى الصور المستخدمة من قبل الحاويات.الأهداف التعليمية
ما هو ملف Dockerfile؟
ملف Dockerfile هو ملف نصي يحتوي على سلسلة من التعليمات لبناء صورة Docker. إنه يشبه وصفة الطبخ: كل تعليمة تمثل خطوة تحول الصورة الأساسية إلى صورتك المخصصة.
- FROM = المكونات الأساسية (الدقيق، الزبدة...)
- WORKDIR = سطح العمل (طاولة المطبخ)
- COPY = إضافة المكونات (السكر، البيض...)
- RUN = التحضير (الخلط، الطهي...)
- EXPOSE = تحديد طريقة التقديم (طبق التقديم)
- CMD = تقديم الطبق (الأمر النهائي)
الصورة الأساسية
يبدأ Dockerfile دائماً من صورة موجودة (FROM). لا نبدأ من الصفر أبداً.
التعليمات
كل سطر هو تعليمة تعدل الصورة: نسخ الملفات، تثبيت الحزم، التكوين...
الصورة النهائية
النتيجة هي صورة مخصصة جاهزة للتشغيل باستخدام docker run.
التعليمات الرئيسية
FROM – الصورة الأساسية
أول تعليمة في أي Dockerfile. تحدد الصورة التي نبدأ منها البناء.
FROM python:3.11-slim
slim (نسخة خفيفة بدون الأدوات غير الضرورية). هذا يمنحنا نظام لينكس مع Python 3.11 مثبتاً مسبقاً.WORKDIR – مجلد العمل
يحدد دليل العمل داخل الحاوية. ستُنفذ جميع التعليمات اللاحقة (COPY، RUN، CMD) داخل هذا المجلد.
WORKDIR /app
WORKDIR بدلاً من RUN cd /app. ينشئ WORKDIR المجلد تلقائياً إن لم يكن موجوداً ويستمر لجميع التعليمات اللاحقة.COPY – نسخ الملفات
ينسخ الملفات من جهازك (سياق البناء) إلى الحاوية.
COPY . .
النقطة الأولى . = المجلد الحالي على جهازك. النقطة الثانية . = WORKDIR داخل الحاوية (/app).
الطبقات، التخزين المؤقت والممارسات الجيدة
# 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) يحذف حتى الصور المستخدمة من قبل الحاويات.الأهداف التعليمية
كل تعليمة = طبقة واحدة
عندما ينفذ Docker ملف Dockerfile، تنشئ كل تعليمة (FROM، RUN، COPY، إلخ) طبقة جديدة. صورة Docker هي كومة من الطبقات المتراكمة.
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)
- مشاركة الطبقات المشتركة بين عدة صور (مثال: جميع صور Python تشترك في نفس الطبقة الأساسية)
- تخزين مؤقت الطبقات لتسريع عمليات البناء
- تقليل مساحة القرص بتخزين كل طبقة مرة واحدة فقط
التخزين المؤقت في Docker
يخزن Docker كل طبقة مؤقتاً. أثناء إعادة البناء، يتحقق Docker مما إذا تغيرت طبقة. إذا لم يتغير شيء، يعيد استخدام الطبقة المخزنة مؤقتاً بدلاً من إعادة بنائها.
الترتيب السيئ مقابل الترتيب الجيد
سيئ: requirements بعد COPY . .
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"]
app.py)، تتغير الطبقة COPY . .. وبما أنها قبل RUN pip install، يجب على Docker إعادة تثبيت جميع التبعيات في كل بناء. في مشروع يحتوي على الكثير من التبعيات، قد يستغرق ذلك عدة دقائق.جيد: requirements قبل COPY . .
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"]
COPY . .. أما التبعيات (pip install) فتبقى مخزنة مؤقتاً ولا تُعاد تثبيتها. ينتقل وقت البناء من عدة دقائق إلى بضع ثوانٍ.ترتيب سيئ
ترتيب جيد
عرض توضيحي: مراقبة التخزين المؤقت
الخطوة 1: إنشاء المشروع
mkdir ~/demo-cache cd ~/demo-cache
أنشئ requirements.txt :
touch requirements.txt nano requirements.txt
بناء وتشغيل أول صورة
.dockerignore.# 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) يحذف حتى الصور المستخدمة من قبل الحاويات.الأهداف التعليمية
إنشاء المشروع
الخطوة 1: إنشاء مجلد المشروع
mkdir ~/mon-premier-docker cd ~/mon-premier-docker
الخطوة 2: إنشاء السكريبت Python
أنشئ ملف hello.py :
touch hello.py nano hello.py
الصق هذا المحتوى ثم احفظ (Ctrl + O، Entrée، Ctrl + X) :
print("Bonjour depuis Docker !")echo 'print("Bonjour depuis Docker !")' > hello.pyتحقق من محتوى الملف :
cat hello.py
الخطوة 3: إنشاء Dockerfile
أنشئ ملفاً باسم Dockerfile (بدون امتداد) :
touch Dockerfile nano Dockerfile
الصق هذا المحتوى ثم احفظ (Ctrl + O، Entrée، Ctrl + X) :
FROM python:3.11-slim WORKDIR /app COPY hello.py . CMD ["python", "hello.py"]
يغطي هذا المقال أهم المقتطفات — الدورة الكاملة Docker Containerization (12 فصلاً، 41 درساً، تمارين محلولة ومشروع نهائي) تأخذك إلى النهاية.
./acceder-au-cours-complet cours gratuit : Maîtriser Claude Codeالأسئلة الشائعة
كم من الوقت يستغرق تعلم Docker Containerization؟
هل هناك متطلبات مسبقة؟
من أين أبدأ عملياً؟
📬 هل تريد تلقي هذا النوع من الأدلة كل أسبوع؟ اشترك مجاناً — كود حقيقي، بدون كلام زائد.