البداية · فصل ٢

Docker بيشتغل إزاي من جوه؟

namespaces · cgroups · union filesystem · daemon · Docker Desktop vs Engine
🎯 الهدف: تعرف الـ ٣ building blocks اللي Docker مبني عليها، ومسار الأمر من الـ CLI للـ registry، والفرق بين Desktop و Engine.

التلات أعمدة اللي Docker مبني عليها

Docker مش سحر. هو بيجمّع ٣ مميزات موجودة أصلًا في Linux kernel:

🚪 Namespaces

العزل: كل container يشوف نفسه لوحده. ليه PID خاص، و hostname خاص، و IP وبورتات خاصة، وشجرة ملفات خاصة. ميعرفش إن في containers تانية جنبه.

⚖️ Control groups

الحدود: الـ cgroups بتقول الـ container ده مسموحله بكام RAM وكام CPU وقد إيه I/O. عشان container واحد طمعان ميوقّعش السيرفر كله.

📚 Union filesystem

الطبقات: الـ image مكوّنة من طبقات (layers) فوق بعض، و read-only. لو عشر containers من نفس الـ image، الطبقات دي مش بتتنسخ عشر مرات. كلهم بيقروا من نفس المكان، وكل container بياخد طبقة كتابة رفيعة فوق لوحده. الشائع على Linux اسمه overlay2.

الأمر بيمشي إزاي؟

لما تكتب docker run nginx:

  • الـ client: ممكن يكون الـ CLI أو الواجهة الرسومية بتاعة Docker Desktop.
  • الـ Docker daemon (dockerd): العقل. بياخد الأوامر، يبني الـ images، ينشئ الـ containers، ويكلّم الـ registry عشان pull و push.
  • الـ Credential helper: بيحفظ بيانات الدخول للـ registry في مكان آمن (keychain على mac مثلًا، أو pass على Linux) بدل ما تتكتب نص عادي.
  • الـ Registry: مخزن الـ images، زي Docker Hub أو GitHub Container Registry.

الـ images اللي بتنزّلها بتتخزّن محليًا. على Linux مكانها الافتراضي تحت /var/lib/docker/.

Docker Desktop على Windows و mac

الـ containers محتاجة Linux kernel. فـ Docker Desktop على Windows أو macOS بيشغّل Linux VM صغيرة في الخلفية، وجواها الـ daemon والـ containers (واختياريًا Kubernetes). الـ CLI اللي عندك على الجهاز بيكلّم الـ daemon اللي جوه الـ VM.

Docker Desktop ولا Docker Engine؟

🖥️ Docker Desktop🐳 Docker Engine
هو إيه؟تطبيق كامل: Engine + واجهة رسومية + أدوات زيادةالأساس بس لتشغيل الـ containers
بيشتغل فين؟Windows و macOS (بـ Linux VM جواه)، وفي نسخة LinuxLinux مباشرة من غير VM
مناسب لمين؟أسهل للبداية وللمطوّر على جهازهالسيرفرات والـ CI، شغل CLI
بييجي معاهKubernetes محلي، Credential helpers، Extensionsdockerd و CLI (والـ compose plugin بيتسطّب لوحده)

ركن جانبي: الـ firmware

كان عندي في المذكرة سؤال جانبي عن الـ firmware: ده software متسطّب على الـ hardware نفسه، وهو حلقة الوصل اللي بتشغّل الجهاز قبل الـ OS. شاشة “Press F2 to setup” جاية منه، وهو اللي بيقرر أنهي OS يقوم.

نوعين: BIOS القديم، و UEFI الأحدث. الويندوز القديم (٨ وأقل) كان ماشي مع BIOS في الغالب، والويندوز الحديث محتاج UEFI، أما Linux فيقوم على الاتنين. مالوش علاقة مباشرة بـ Docker، بس حلو تعرف الطبقات من تحت لفوق: firmware ← kernel ← container.

خلّصت الفصل لما

🧠 اختبر نفسك
١) container بياكل الـ RAM كله ووقّع السيرفر. أنهي block كان المفروض يمنع ده؟
الـ cgroups، بحد زي --memory 512m.
٢) ليه container مش شايف processes الـ containers التانية؟
عشان الـ PID namespace بتاعه منفصل.
٣) مين اللي بيسحب الـ image من Docker Hub: الـ CLI ولا الـ daemon؟
الـ daemon. الـ CLI بس بيبعتله الأمر.