قررت أن أصنع وقت تشغيل الحاويات الخاص بي للمتعة، وعلى الرغم من أنني ما زلت في مرحلة مبكرة، فقد تعلمت أن Docker غريب. إليك بعض الأمور الغريبة التي تعلمتها عن Docker.
الحاويات ليست حقيقية. على عكس الأجهزة الافتراضية، الحاويات هي مجرد عمليات ذات قيود خاصة. النواة لديك لا تزال تشغّل تلك العملية، ويمكنك العثور عليها في /proc. لا توجد ميزة واحدة للحاويات في Linux، فالحاويات هي في الحقيقة 5 ميزات مختلفة في نواة Linux مرتدية معطفًا واقيًا. تُخفي مساحات الأسماء ما يمكن للمضيف والحاوية رؤيته، وتحد cgroups من استخدام الموارد، وتعزل آلية الشبكات المتقدمة شبكة الحاوية.
الصور مجرد مجلدات. يضعها Docker في مكان ما ويستدعي chroot (أو pivot_root) لجعل ذلك المجلد هو الدليل الجذر الجديد للحاوية. لغة Go هي نوعًا ما لغة سيئة لوقت تشغيل الحاويات. وقت تشغيل Docker، runc، مكتوب بلغة Go، وخيارات تصميم Go تجعلها أقل ملاءمة. وقت تشغيل Go متعدد الخيوط بطبيعته، لكن كثيرًا من استدعاءات نظام Linux تحتاج إلى بيئة أحادية الخيط، لذا يحتوي runc على وحدة C تعمل قبل تهيئة Go. كما أن Go لا تملك fork، لذلك يستخدم runc الأمر exec على /proc/self/exe لتقريب عملية fork.
يتطلب Docker صلاحيات root. تتطلب كثير من واجهات نواة Linux صلاحيات root، لذلك يعمل خادم Docker عادةً بصلاحيات root. قد تضطر أوقات التشغيل التي لا تحتاج root إلى إعادة تنفيذ مكدس الشبكات بالكامل في فضاء المستخدم. التعلم ممتع! كتابة نسختك الخاصة من أداة تستخدمها طريقة رائعة للتعرف عليها.
المصدر: Hacker News · لخّصه HeadlinesBriefing