تشغيل الحاويات
تشغيل الحاويات
معرفة كيفية سحب صورة هي مجرد أساسيات. المهارة الحقيقية تكمن في معرفة كيفية إطلاق الحاوية وفحصها والتحكم فيها وتصحيح أخطائها في بيئة الإنتاج — والسبب وراء كل خيار. على نطاق الشركات الكبرى، يؤدي سوء فهم خيار واحد إلى عملية جامحة تستنزف الموارد، أو تسريب سر في السجلات، أو حاوية تتوقف بصمت دون إعادة تشغيل. تغطي هذه الدرس دورة حياة الحاوية الكاملة عبر docker run وأدواته المساعدة.
بنية أمر docker run الكاملة
كل استدعاء لـ docker run يُنشئ حاوية جديدة من صورة، ويشغّل عملية واحدة (PID 1)، وينتهي عند انتهاء تلك العملية. الصيغة هي:
أهم الخيارات التي يجب استيعابها:
-d/--detach— التشغيل في الخلفية؛ طباعة معرّف الحاوية والعودة إلى الطرفية. هذا هو الوضع الافتراضي للخدمات التي تعمل باستمرار.-it— تخصيص طرفية وهمية (-t) وإبقاء STDIN مفتوحاً (-i). يُستخدمان معاً للأصداف التفاعلية. لا تجمعهما مع-dللخدمات.--name— تعيين اسم محدد. بدونه يُولّد Docker اسماً عشوائياً — يصعب إدارته على نطاق واسع.--rm— إزالة الحاوية تلقائياً عند انتهائها. ضروري لحاويات التصحيح المؤقتة وعمليات CI لمنع امتلاء القرص.-p HOST:CONTAINER— نشر منفذ.-p 8080:80يربط منفذ المضيف 8080 بمنفذ الحاوية 80.-e KEY=VALUE— حقن متغير بيئة. الطريقة المفضلة لتمرير الإعدادات؛ لا تُضمّن الأسرار في الصور أبداً.--env-file FILE— حقن جماعي لمتغيرات البيئة من ملف. استخدمه لقوائم الإعدادات الطويلة أو الأسرار في CI.--restart— سياسة إعادة التشغيل:no(الافتراضي)،always،on-failure[:N]،unless-stopped. تستخدم خدمات الإنتاجunless-stoppedكي تنجو من إعادة تشغيل المضيف مع إمكانية إيقافها عمداً.--memory/--cpus— حدود صارمة للموارد. بدونها، يمكن لحاوية واحدة جامحة أن تُجوّع الحاويات المجاورة على نفس المضيف.--user— تجاوز UID/GID وقت التشغيل. استخدمه لتجنب التشغيل بصلاحيات root داخل الحاوية.--read-only— تركيب نظام ملفات الحاوية للقراءة فقط. يُجبر العملية على الكتابة فقط في وحدات التخزين المُركّبة صراحةً — وهو إجراء أمني متعمق.
@sha256:abc123…) في إعدادات الإنتاج. latest مؤشر متغير يتبدل بصمت ويجعل التراجع عن التغييرات مستحيلاً.
دورة حياة الحاوية
تمر الحاوية بحالات محددة جيداً. فهم هذه الحالات ضروري لكتابة فحوصات الصحة ومنطق إعادة التشغيل.
أوامر دورة الحياة الأساسية:
docker stop مقابل docker kill: افضل دائماً stop. فهو يرسل SIGTERM أولاً، مما يمنح تطبيقك الوقت لمسح المخازن المؤقتة وإغلاق اتصالات قاعدة البيانات وإتمام الطلبات الجارية. kill يرسل SIGKILL فوراً وقد يُفسد الحالة. المهلة الافتراضية 10 ثوانٍ غالباً قصيرة جداً لقواعد البيانات — اضبطها لكل خدمة باستخدام --time.
بث السجلات
يقرأ الأمر docker logs من مشغّل السجلات المُهيَّأ للحاوية. المشغّل الافتراضي (json-file) يكتب stdout/stderr في ملف JSON على المضيف. في الإنتاج، تنتقل إلى مشغّل يشحن السجلات إلى نظام مركزي (Loki، Splunk، CloudWatch)، لكن docker logs يبقى لا غنى عنه في التصحيح المحلي.
تنفيذ أوامر في حاوية قيد التشغيل
يُولّد docker exec عملية جديدة داخل فضاء أسماء حاوية تعمل بالفعل. لا يمس PID 1. هذه هي الأداة الصحيحة لتصحيح الأخطاء الحية — وليس إعادة تشغيل الحاوية.
curl أو strace أو tcpdump في حاوية إنتاج تعمل يوسّع سطح الهجوم بشكل كبير. خطّط لاستراتيجية مراقبتك قبل وقوع الحوادث.
فحص حالة الحاوية
يُعيد docker inspect التمثيل الكامل بتنسيق JSON لحاوية أو صورة — وحدات التركيب، إعداد الشبكة، متغيرات البيئة، حدود الموارد، حالة فحص الصحة، رموز الخروج، والمزيد. وهو المصدر الموثوق للحقيقة حول تهيئة الحاوية الحية.
docker ps للتحقق من الحالة، (2) docker logs لقراءة المخرجات الأخيرة، (3) docker inspect للتحقق من الإعدادات (متغيرات البيئة، وحدات التركيب، عداد إعادة التشغيل)، (4) docker stats لاستبعاد استنزاف الموارد، (5) docker exec للتحقيق الحي إذا كانت الحاوية لا تزال تعمل.
نسخ الملفات من وإلى الحاويات
أحياناً تحتاج إلى سحب ملف إعداد أو نتيجة عملية من حاوية تعمل للفحص، أو دفع ملف مؤقت للداخل للاختبار. يتعامل docker cp مع ذلك بدون وحدة تخزين مُركّبة.
تجميع كل شيء: أمر تشغيل مُقوّى للإنتاج
هذا ما يبدو عليه أمر docker run الآمن والجاهز للإنتاج لواجهة API ويب — كل خيار مقصود:
هذا النمط — صلاحيات Linux الدنيا، نظام ملفات للقراءة فقط، سقوف صريحة للموارد، ربط المنافذ بحلقة الاسترجاع فقط — هو خط الأساس الذي تطبقه المنظمات الهندسية الواعية أمنياً على كل حاوية إنتاج قبل أن تفكر في طبقة المُنسّق (Kubernetes) فوقها.