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

يعني إيه Docker وليه مهم؟

container · image · OCI · container runtime · VM
🎯 الهدف: تفهم المشكلة اللي Docker بيحلها، وتفرّق الـ container عن الـ VM، وتعرف مين OCI ومين الـ runtime.

المشكلة اللي قبل Docker

تخيّل تيم فرونت شغال على شاشة محتاجة الـ API. كل مرة يحتاج يجرّب حاجة جديدة، لازم الباك اند يرفع نسخة على سيرفر الـ test. ولو حد حاول يشغّل الباك اند على جهازه: نسخة Node مختلفة، Postgres مش متسطّب، متغيّر بيئة ناقص… والجملة المشهورة: “على جهازي شغالة!”

سنة ٢٠١٣ Docker طلع بفكرة بسيطة: بدل ما أشرح لكل واحد يسطّب إيه، أعمل image فيها كل اللي التطبيق محتاجه: الـ OS الخفيف، Node، الكود، والـ dependencies. أرفعها على Docker Hub، والفرونت ينزّلها ويشغّلها بأمر واحد.

المنافسين و OCI

Docker مش اللعيب الوحيد. في أدوات تانية بتعمل نفس الشغل، أشهرها:

Podman — من غير daemoncontainerd — الـ runtime اللي Docker نفسه بيستخدمهCRI-O — معمول لـ Kubernetes

طب إزاي image اتبنت بـ Docker تشتغل على Podman؟ هنا ييجي دور OCI (Open Container Initiative). دي منظمة اتعملت بمشاركة Docker و Google و Microsoft وغيرهم، وحطّت مواصفات ثابتة لشكل الـ image وإزاي تتشغّل. أي أداة ماشية على المواصفات دي تقدر تشغّل أي image ماشية عليها.

الـ Container runtime

الـ container runtime هو الحتة اللي بتشغّل الـ container فعلًا من الـ image. في طبقتين:

⬆️ high-level

زي containerd و CRI-O: بيسحبوا الـ images، يديروا التخزين والشبكة، ويسلّموا الشغل للطبقة اللي تحت.

⬇️ low-level

زي runc: هو اللي بيكلّم الـ kernel ويعمل العزل نفسه ويشغّل الـ process.

Container ولا Virtual Machine؟

الـ virtual machine نظام كامل منفصل: OS خاص بيه، و RAM و CPU متقسومين له، وفوقهم التطبيق. أما الـ container فـ بيشارك الـ host في الـ kernel وبياخد من الـ RAM والـ CPU على قد احتياجه.

Virtual MachineContainer
الـ OSنظام كامل لكل VMبيشارك kernel الـ host
الحجمجيجاتميجات في الغالب
وقت التشغيلدقايقثواني أو أقل
العزلأقوى (hardware متقسّم)كويس بس أخف (على مستوى الـ kernel)
الاستخدامتشغيل OS مختلف تمامًاتشغيل تطبيقات كتير خفيفة

الـ Orchestrators والـ Node

لما يبقى عندك containers كتير على أكتر من سيرفر، محتاج حد يدير الحكاية: يشغّل، يعيد التشغيل لو حاجة وقعت، يوزّع الحمل. ده الـ orchestrator، زي Kubernetes و Docker Swarm.

في عالمهم، كل ماكينة (حقيقية أو VM) بتشغّل containers اسمها node.

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

🧠 اختبر نفسك
١) ليه الـ container أخف من الـ VM؟
عشان بيشارك kernel الـ host ومش بيحمّل OS كامل لوحده.
٢) image اتبنت بـ Docker، ينفع تتشغّل بـ Podman؟
أيوه، طالما الاتنين ماشيين على مواصفات OCI.
٣) مين اللي فعلًا بيعمل العزل ويشغّل الـ process؟
الـ low-level runtime زي runc.