ما هو Docker؟

تحرير: فريق أفدني · تمت المراجعة التحريرية وفق المراجع التقنية والعلمية المعتمدة. · منهجية التوثيق

خلاصة سريعة: Docker منصة لبناء الحاويات وتشغيلها، تحوّل التطبيق ومكتباته إلى صورة قابلة للنقل تعمل على أي خادم يدعم التشغيل نفسه. ويصف Dockerfile خطوات بناء الصورة، وتُخزن الصور في سجل (Registry)، وتُحفظ البيانات الدائمة في وحدات تخزين (Volumes). وهو سهل البدء، لكنه لا يلغي حاجة الفريق إلى فهم الشبكات والتخزين والأمان.

ما هو Docker؟

Docker منصة مفتوحة المصدر لبناء الحاويات وتشغيلها وإدارتها. وقد أطلقه سولومون هايكس عام 2013، ثم صارت معيارًا عمليًا في نشر التطبيقات. وهي لا تخترع فكرة العزل، لكنها بسّطت استخدامها: فبدل إعداد بيئة يدويًا لكل خادم، تُوصف البيئة في ملف، وتُبنى منها صورة جاهزة.

ويتكون Docker من عدة أجزاء تعمل معًا: عميل سطر أوامر، وخادم يعمل في الخلفية (Docker Daemon)، ووقت تشغيل مسؤول عن إنشاء الحاويات، وسجل للصور. ويستطيع المطور تشغيل الأمر نفسه على حاسوبه وعلى خادم الإنتاج، فيحصل على النتيجة نفسها إن كانت الصورة نفسها.

والفرق بين Docker والجهاز الافتراضي أنه لا يحمل نظام تشغيل كاملًا. فالحاوية تشترك في نواة المضيف، وتضم التطبيق ومكتباته فقط. ولهذا تكون أخف وأسرع، لكن العزل يبقى أقل قوة من عزل جهاز افتراضي مستقل.

كيف يعمل Docker؟

تبدأ الدورة بأمر يرسله العميل إلى الخادم. يبحث الخادم عن الصورة محليًا، وإن لم يجدها سحبها من السجل، ثم أنشأ منها حاوية وبدأ تشغيلها. وتُسجل حالة الحاوية واسمها وشبكتها في الخادم، ويمكن متابعتها بأوامر مثل عرض الحاويات وقراءة سجلاتها.

والصورة مبنية من طبقات، كل طبقة تمثل تغييرًا في نظام الملفات. وعند بناء نسخة جديدة، يعيد Docker استخدام الطبقات التي لم تتغير، ويبني ما بعدها فقط. ولهذا يكون البناء الثاني أسرع من الأول، وتكون الصور المبنية على قواعد مشتركة أصغر في النقل.

أما التشغيل الفعلي فيتولاه وقت تشغيل منفصل، يعتمد على مكونات مثل containerd وrunc. وهذا الفصل يجعل Docker واجهة إدارة فوق معايير مفتوحة، لا تقنية مغلقة. وتستطيع منصات أخرى، مثل Kubernetes، تشغيل الصور نفسها دون تغيير.

ما الفرق بين الصورة والحاوية؟

الصورة قالب ثابت لا يتغير، يضم نظام الملفات والتطبيق وإعداداته. والحاوية نسخة تعمل من الصورة، ولها طبقة كتابة خاصة بها. فإذا حذفت الحاوية، اختفت التغييرات التي كُتبت في تلك الطبقة، وبقيت الصورة كما هي. ولهذا تُستخدم الصور لتكرار البيئة، وتُستخدم الحاويات للتشغيل.

ويمكن إنشاء حاويات عدة من صورة واحدة، لكل منها اسم وشبكة وحدود موارد. وهذا ما يجعل التوسع ممكنًا: تزداد نسخ الحاوية عند ارتفاع الطلب، ثم تُحذف عند انخفاضه، من دون إعادة بناء التطبيق.

ما وظيفة Dockerfile؟

Dockerfile ملف نصي يصف خطوات بناء الصورة. يبدأ عادة بتحديد صورة أساس (FROM)، ثم نسخ الملفات (COPY)، وتثبيت الحزم (RUN)، وضبط متغيرات البيئة (ENV)، وتحديد الأمر الذي يبدأ به التطبيق (CMD أو ENTRYPOINT). ويُبنى الملف بأمر واحد ينتج صورة تحمل اسمًا ووسمًا.

وجود الملف في المستودع يجعل البناء قابلًا للتكرار والمراجعة. فكل تغيير فيه يمر بمراجعة الشيفرة، ويُبنى تلقائيًا في خط النشر. ويُنصح بترتيب التعليمات من الأقل تغيرًا إلى الأكثر تغيرًا، ليستفيد البناء من الذاكرة المؤقتة، وباستخدام البناء متعدد المراحل (Multi-stage Build) لفصل أدوات البناء عن الصورة النهائية.

ما هي سجلات الصور؟

السجل (Registry) مكان لتخزين الصور وتوزيعها. وأشهره Docker Hub، وتستخدم المؤسسات سجلات خاصة داخل شبكتها أو لدى مزود سحابي. ويسحب الخادم الصورة من السجل عند النشر، ويدفع إليه النسخة الجديدة بعد البناء، بحسب صلاحيات كل مستخدم.

وينبغي التعامل مع السجل كجزء من أمن سلسلة التوريد. فالصور تُفحص بحثًا عن الثغرات قبل النشر، وتُوقَّع للتحقق من مصدرها، وتُثبَّت الإصدارات بوسم واضح بدل الاعتماد على الوسم latest. كما تُحدَّث الصور الأساسية دوريًا، لأن الثغرة في مكتبة مشتركة تنتقل إلى كل صورة مبنية عليها.

كيف يحفظ Docker البيانات؟

الحاوية بطبيعتها مؤقتة: إذا حُذفت، ضاعت طبقة الكتابة. ولذلك تُحفظ البيانات التي يجب أن تبقى في وحدة تخزين (Volume)، وهي مساحة يديرها Docker خارج دورة حياة الحاوية. وتُستخدم وحدة التخزين لقواعد البيانات والملفات المرفوعة والسجلات التي يحتاج إليها التحليل.

وهناك أيضًا الربط المباشر (Bind Mount)، ويربط مجلدًا على المضيف بمجلد داخل الحاوية. وهو مفيد في التطوير لعرض التغييرات فورًا، لكنه أقل قابلية للنقل لأنه يعتمد على مسار موجود مسبقًا. أما بيانات الإنتاج فتستحق وحدة تخزين مع نسخ احتياطي منتظم واختبار استعادة، لا مجرد وجوده.

كيف يتعامل Docker مع الشبكات؟

ينشئ Docker شبكة افتراضية خاصة به عند التثبيت، ويصل كل حاوية إليها. وتستطيع الحاويات على الشبكة نفسها التواصل بأسمائها، بينما تُعزل الشبكات المختلفة عن بعضها. ويمكن ربط منفذ داخل الحاوية بمنفذ على المضيف عند الحاجة إلى وصول خارجي.

وفي التطبيقات متعددة الحاويات، تُستخدم شبكة مخصصة (User-defined Network) ليحصل كل تطبيق على نطاق أسماء خاص. ويتيح ذلك تشغيل قاعدة بيانات وخدمة تطبيق وموجه في بيئة واحدة، مع عنوان ثابت لكل خدمة داخل الشبكة. أما في الإنتاج فيُفضَّل تمرير الحركة عبر موازن أحمال أو وكيل عكسي، لا كشف منافذ الحاويات مباشرة.

متى لا يكون Docker الخيار المناسب؟

  • تطبيق سطح مكتب: الحاويات مخصصة لخدمات تعمل في الخلفية، وليست طريقة طبيعية لتوزيع برامج تعمل بواجهة رسومية.
  • حاجة إلى نواة مختلفة: من يحتاج نواة لينكس على مضيف ويندوز، أو العكس، يجد في الجهاز الافتراضي حلًا أنظف.
  • عزل أمني صارم: إذا كان العزل شرطًا أساسيًا بين أحمال غير موثوقة، فقد يكون الجهاز الافتراضي أو حاوية معززة أنسب.
  • فريق بلا خبرة تشغيلية: إدارة الصور والشبكات والتخزين تحتاج معرفة، وإلا انتقل التعقيد من الخادم إلى الحاوية.

ولا يعني ذلك أن Docker غير مناسب للإنتاج. فهو يعمل فيه على نطاق واسع، لكنه يحتاج إلى ضبط الشبكة والتخزين والمراقبة، وإلى خطة تحديث للصور الأساسية. والخطأ الشائع أن يُنظر إليه كأداة للمطورين فقط، ثم يُطلب من فريق التشغيل إدارته دون أدوات أو صلاحيات مناسبة.

أسئلة شائعة

ما هو Docker ببساطة؟

هو منصة لبناء الحاويات وتشغيلها. تغلف التطبيق ومكتباته في صورة واحدة، ثم تشغّل هذه الصورة في حاوية معزولة على أي خادم يدعم Docker، فتحصل على البيئة نفسها في التطوير والإنتاج.

ما الفرق بين Docker والجهاز الافتراضي؟

الحاوية تشترك في نواة نظام التشغيل المضيف وتحمل التطبيق ومكتباته فقط، بينما يحمل الجهاز الافتراضي نظام تشغيل كاملًا فوق طبقة محاكاة. الحاوية أخف وأسرع، والجهاز الافتراضي أقوى في العزل.

هل Docker مفتوح المصدر؟

المحرك الأساسي وأدوات سطر الأوامر مفتوحة المصدر، ويمكن استخدامها دون اشتراك. وتقدم الشركة أدوات إضافية للفرق الكبيرة، لكن بناء الحاويات وتشغيلها لا يتطلبها. ويكفي كثيرًا من الفرق المحرك مع سجل صور خاص.

أين تُحفظ بيانات الحاوية بعد حذفها؟

لا تُحفظ تلقائيًا. فطبقة الكتابة تُفقد مع الحاوية، وتبقى البيانات فقط إذا كانت في وحدة تخزين (Volume) أو في مجلد مربوط بالمضيف أو في قاعدة بيانات خارجية. ولهذا تُخطط بيانات الإنتاج قبل التشغيل.

هل أحتاج Kubernetes مع Docker؟

لا. يكفي Docker لتشغيل حاويات على خادم واحد أو عدد قليل من الخوادم. أما Kubernetes فيضيف تنسيقًا وتوسعًا واستشفاءً عبر مجموعة خوادم، ويصبح منطقيًا عندما يزيد عدد الخدمات والحاجة إلى إدارة مركزية.

مقالات ذات صلة

المصادر

اترك ردّاً

هذا الموقع يستخدم خدمة أكيسميت للتقليل من البريد المزعجة. اعرف المزيد عن كيفية التعامل مع بيانات التعليقات الخاصة بك processed.