التلات أعمدة اللي Docker مبني عليها
Docker مش سحر. هو بيجمّع ٣ مميزات موجودة أصلًا في Linux kernel:
العزل: كل container يشوف نفسه لوحده. ليه PID خاص، و hostname خاص، و IP وبورتات خاصة، وشجرة ملفات خاصة. ميعرفش إن في containers تانية جنبه.
الحدود: الـ cgroups بتقول الـ container ده مسموحله بكام RAM وكام CPU وقد إيه I/O. عشان container واحد طمعان ميوقّعش السيرفر كله.
الطبقات: الـ 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 جواه)، وفي نسخة Linux | Linux مباشرة من غير VM |
| مناسب لمين؟ | أسهل للبداية وللمطوّر على جهازه | السيرفرات والـ CI، شغل CLI |
| بييجي معاه | Kubernetes محلي، Credential helpers، Extensions | dockerd و 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 كان المفروض يمنع ده؟
--memory 512m.