لا يوجد شيءٌ اسمه «كونتينر».
الـ kernel لم يسمع بالكلمة قط. لا syscall اسمه create_container()،
ولا كائن، ولا ملف. حين تكتب docker run لا «يُخلَق» شيء — بل
عمليةٌ عادية تبدأ ولها رؤيةٌ مشوّهة للعالم. هذا المنهج يثبت ذلك:
نبني كونتينراً بأيدٍ عارية من مزايا الـ kernel، بلا Docker، حتى تصير
docker run شفّافةً تعرف كل خيطٍ تشدّه.
الكذبة، والأبعاد الأربعة
«الكونتينر» اسمٌ تسويقيّ لاتفاقٍ بين مزايا منفصلة في الـ kernel، رُكّبت معاً لتُنتج وهم العزل. Docker ليس «محرّك حاويات»؛ هو منسّق يكتب الإعدادات الصحيحة على هذه المزايا نيابةً عنك. وكل كونتينرٍ في الدنيا — Docker، Podman، containerd — هو تركيبٌ لأربعة أسئلةٍ يطرحها الـ kernel عن كل عملية:
لن نبدأ من Docker بل من الأسفل: البدائيات الأربع التي يُشتقّ منها كل شيء. أتقنها، وكل ما فوقها (المعمارية، الشبكة، البناء، التوزيع) يصبح اشتقاقاً لا حفظاً. هذا معنى «المبادئ الأولى» هنا: ألا تحفظ ما يفعله Docker، بل أن تكون قادراً على إعادة اختراعه لأنك تملك اللبنات.
الخريطة — تنكشف بالزيارة
كل إقليمٍ يفتح باباً لم تكن تعرف أنه مغلق. ادخل بالترتيب؛ الشجرة من القاع للقمة.
chroot عمره ٤٥ سنة، نكتشف لماذا يُكسَر، فنصعد عبر سبع طبقاتٍ من العزل حتى نبني عمليةً تظنّ أنها وحدها في الكون.docker0 بأكملها بأيدينا.Dockerfile طبقات؟ لماذا ترتيب الأسطر يقرّر سرعتك؟ وكيف يتشارك registry الطبقات عبر الشبكة دون إرسال بايتٍ مكرّر؟كيف تدرس هذا المنهج
- بالترتيب. الشجرة من القاع للقمة؛ كل إقليمٍ يفترض ما قبله. لا تقفز.
- بيدك على الـ keyboard. هذا ليس منهج قراءة. كل لغزٍ يُحَلّ بأوامرٍ حقيقية على kernel حقيقي.
- لا تفتح الحل قبل الكفاح. لا توجد حلولٌ جاهزة هنا — توجد موارد كافية لتشتقّ الحل بنفسك، وإشاراتٌ دقيقة حين تعلَق.
- بيئة آمنة. بعض التمارين (fork bomb، الهروب) خطيرة — نفّذها في VM يمكنك تدميره.
تأكّد أنك على cgroup v2 (الافتراضي الحديث):
bash check$ stat -fc %T /sys/fs/cgroup cgroup2fs # ✓ مطلوب. لو طبع tmpfs فأنت على v1 المختلط (انظر الإقليم II)
لماذا — في الإقليم I — ستكتشف أن chroot، أداة العزل الأصلية،
لم تُصمَّم أصلاً للعزل الأمني، وأن من يظنّها حاجزاً أمنياً يبني بيته
على رمل؟