DOCKER::ROOT منهج المبادئ الأولى · 8 أقاليم · linux kernel live
FIRST PRINCIPLES bottom-up hands-on · linux only

لا يوجد شيءٌ اسمه «كونتينر».

الـ kernel لم يسمع بالكلمة قط. لا syscall اسمه create_container()، ولا كائن، ولا ملف. حين تكتب docker run لا «يُخلَق» شيء — بل عمليةٌ عادية تبدأ ولها رؤيةٌ مشوّهة للعالم. هذا المنهج يثبت ذلك: نبني كونتينراً بأيدٍ عارية من مزايا الـ kernel، بلا Docker، حتى تصير docker run شفّافةً تعرف كل خيطٍ تشدّه.

الكذبة، والأبعاد الأربعة

«الكونتينر» اسمٌ تسويقيّ لاتفاقٍ بين مزايا منفصلة في الـ kernel، رُكّبت معاً لتُنتج وهم العزل. Docker ليس «محرّك حاويات»؛ هو منسّق يكتب الإعدادات الصحيحة على هذه المزايا نيابةً عنك. وكل كونتينرٍ في الدنيا — Docker، Podman، containerd — هو تركيبٌ لأربعة أسئلةٍ يطرحها الـ kernel عن كل عملية:

ماذا تـرى؟
namespaces
الإقليم I
كم تـستهلك؟
cgroups
الإقليم II
مِمّ تتكوّن؟
overlay fs
الإقليم III
ماذا تـفعل؟
caps · seccomp
الإقليم IV
ليش هذا الترتيب

لن نبدأ من Docker بل من الأسفل: البدائيات الأربع التي يُشتقّ منها كل شيء. أتقنها، وكل ما فوقها (المعمارية، الشبكة، البناء، التوزيع) يصبح اشتقاقاً لا حفظاً. هذا معنى «المبادئ الأولى» هنا: ألا تحفظ ما يفعله Docker، بل أن تكون قادراً على إعادة اختراعه لأنك تملك اللبنات.

الخريطة — تنكشف بالزيارة

كل إقليمٍ يفتح باباً لم تكن تعرف أنه مغلق. ادخل بالترتيب؛ الشجرة من القاع للقمة.

REGION I
العزل — ماذا ترى العملية؟
namespaces
من chroot عمره ٤٥ سنة، نكتشف لماذا يُكسَر، فنصعد عبر سبع طبقاتٍ من العزل حتى نبني عمليةً تظنّ أنها وحدها في الكون.
4 syscalls · 7 lensesافتح
REGION II
الحدود — كم تستهلك؟
cgroups
بنيت عمليةً معزولة... ثم أطلقت فيها fork bomb فسقط جهازك كله. العزل في الرؤية لا يعني العزل في الموارد. هنا نلجم الوحش.
v2 unified · OOMافتح
REGION III
الجذر — مِمّ يتكوّن العالم؟
overlayfs · OCI images
عندك ٥٠ كونتينر من نفس القاعدة. هل تنسخ ٥٠ مرة؟ هنا تتعلّم لماذا الصورة طبقات، ولماذا «الحذف» قناعٌ لا حذف.
Merkle · whiteoutافتح
REGION IV
الصلاحية — ماذا يُسمح أن تفعل؟
capabilities · seccomp · LSM
عمق الأمان. نفكّك كلمة «root» إلى ٤٠ قطعة، ثم — لنفهم لماذا الدفاعات موجودة — نرتكب جريمة: نهرب من كونتينرٍ مُساء إعداده.
userns · the escapeافتح
REGION V
المحرّك — لماذا أربعة شياطين؟
runc · containerd · shim · dockerd
بنيت كل شيءٍ بيدك. فلماذا يحتاج Docker أربعة برامج daemon متراكبة؟ كل طبقةٍ تداوي ألماً حقيقياً — سنعيش الألم لنفهم الدواء.
OCI runtime specافتح
REGION VI
الشبكة — كيف تتكلّم المعزولات؟
veth · bridge · iptables
العزل كان أسهل جزء. الوصل هو الفن: كابلٌ افتراضي، مبدّلٌ افتراضي، وقاعدة NAT. نبني docker0 بأكملها بأيدينا.
NAT · DNAT · vethافتح
REGION VII
البناء والتوزيع
BuildKit · registry
كيف يصير Dockerfile طبقات؟ لماذا ترتيب الأسطر يقرّر سرعتك؟ وكيف يتشارك registry الطبقات عبر الشبكة دون إرسال بايتٍ مكرّر؟
cache = hash chainافتح
REGION VIII
اليقين — كل إعداد وبدائيته
synthesis · trust
الغاية: جدولٌ يربط كل علامة في Docker و Compose و daemon.json بالبدائية التي تحرّكها. لا يبقى إعدادٌ تلمسه وأنت لا تدري ماذا يفعل تحت.
the big tableافتح

كيف تدرس هذا المنهج

  • بالترتيب. الشجرة من القاع للقمة؛ كل إقليمٍ يفترض ما قبله. لا تقفز.
  • بيدك على الـ keyboard. هذا ليس منهج قراءة. كل لغزٍ يُحَلّ بأوامرٍ حقيقية على kernel حقيقي.
  • لا تفتح الحل قبل الكفاح. لا توجد حلولٌ جاهزة هنا — توجد موارد كافية لتشتقّ الحل بنفسك، وإشاراتٌ دقيقة حين تعلَق.
  • بيئة آمنة. بعض التمارين (fork bomb، الهروب) خطيرة — نفّذها في VM يمكنك تدميره.
تحقّق من بيئتك

تأكّد أنك على cgroup v2 (الافتراضي الحديث):

bash check
$ stat -fc %T /sys/fs/cgroup cgroup2fs # ✓ مطلوب. لو طبع tmpfs فأنت على v1 المختلط (انظر الإقليم II)
بذرة الغموض الأولى

لماذا — في الإقليم I — ستكتشف أن chroot، أداة العزل الأصلية، لم تُصمَّم أصلاً للعزل الأمني، وأن من يظنّها حاجزاً أمنياً يبني بيته على رمل؟