التعامل مع الحاويات التي تعمل في الخلفية - Detached Containers
مقدمة
نلاحظ من تعاملنا مع Docker في الدروس السابقة أن الحاوية يتم اغلاقها بمجرد انتهاء الأمر الذي تم تمريره لها.
عندما نفذنا أمراً باستخدام PHP Cli في المقال الثالث، بعد طباعة الجملة التي كتبناها في ملف PHP، تنتهي عملية تنفيذ الأمر ويتم اغلاق الحاوية، بينما في الأوامر التي قمنا بتنفيذها في المقال الرابع، نلاحظ أن الأمر الرئيسي عبارة عن تشغيل لـ Web Server، فالأمر يبقى يعمل إلى أن تقوم بإيقافه يدويا.
تشغيل الحاوية في الخلفية
يمكن باستخدام الخيار -d
أو --detached
السماح للحاوية بالعمل في الخلفية دون الحاجة لإبقاء الـ Terminal مفتوحا دائما، هذا الخيار سيكون مفيدا عند التعامل مع عمليات (Processes) تعمل لفترة طويلة.
سنجرب هذا الخيار مع الأمر الأخير الذي قمنا بتنفيذه في المقال السابق:
لاحظ أن الأمر لم يقم بإرجاع النتيجة الاعتيادية، بل قام بطباعة الـ ID الخاص بالحاوية، إضافة إلى أنه شغل الحاوية في الخلفية، فيمكنني إقفال برنامج الـ Terminal دون أن يكون لذلك تأثير على الحاوية.
جرب الآن تنفيذ الأمر docker ps
وهذا الأمر يستخدم لعرض الحاويات التي تعمل حاليا:
نتيجة الأمر هي جدول يشبه الجدول الموضح في الصورة، سنحتاج الـ Container ID للتعامل مع الحاوية لاحقا.
إيقاف تشغيل الحاوية وإعادة التشغيل
لنجرب الآن ايقاف تشغيل الحاوية التي قمنا بتشغيلها مسبقا، يمكنك ايقاف التشغيل باستخدام الأمر docker stop
:
كذلك يمكننا إعادة تشغيل نفس الحاوية باستخدام الأمر docker start
دون الحاجة لإعادة تعريف الـ Volumes والـ Port Bindings:
التعامل مع الحاوية من خلال الإسم
كما لاحظت سابقا، كنا نتعامل مع الحاوية من خلال الـ ID الخاص بها، يمكنك أيضا استخدام نفس الأوامر باستخدام الاسم، لاحظ وجود اسم عشوائي للحاوية يمكنك رؤيته في الجدول الخاص بـ docker ps
، ويمكن التعامل مع الحاوية باستخدام الاسم بنفس الطريقة:
لكن استخدام الاسم العشوائي لا يسهل التعامل مع الحاوية، لذلك يمكننا تحديد الاسم اثناء تشغيل الحاوية لأول مرة باستخدام docker run
عن طريق الخيار --name
:
مراقبة الـ Logs للبحث عن الأخطاء
لقد قمنا بتنفيذ الأمر السابق في الخلفية باستخدام الخيار -d
، وإضافة هذا الخيار لن يمكنك من رؤية نتيجة الأمر في الـ Terminal، لكن أحيانا قد تحتاج لمعرفة نتيجة الأمر، لذلك يمكن استخدام docker logs
:
الأمر docker logs
شبيه بالأمر tail
يمكن استخدام الخيار -f
لمراقبة الـ logs لمدة طويلة بدلا من طباعة الـ logs الأخيرة فقط، كما يمكن استخدام الخيار -n
لتحديد عدد الاسطر الأخيرة التي تريد قراءتها:
تنفيذ أوامر داخل الحاوية
في حال احتجت لتشغيل أوامر داخل الحاوية، يمكنك تشغيلها بحيث تتمكن من تنفيذ الأوامر بداخلها، لنفترض مثلا أنك شغلت حاوية MySql باستخدام الأمر التالي:
1docker run --name my_database -d -e MYSQL_ROOT_PASSWORD=123456 -p 5000:3306 mysql
تحتاج الآن للدخول للـ CLI الخاص بـ MySql لتتمكن من التعامل مع قاعدة البيانات، طبعا يتم الدخول للـ CLI الخاص بـ MySql عن طريق الأمر التالي:
1mysql -u root -p
لكننا نحتاج لتنفيذ هذا الأمر داخل الحاوية، وهنا سنستخدم الأمر docker exec
:
1docker exec -it my_database mysql -u root -p
يستخدم الأمر docker exec
لتنفيذ أوامر داخل الحاوية، تلاحظ تمرير الخيار i
والخيار t
لهذا الأمر، وظيفة الخيار t
يقوم بانشاء جلسة Terminal جديدة داخل الحاوية مما يمكنك من التعامل مع الـ Output الخاص بالـ Terminal.
بينما الأمر i
يقوم بالسماح بأخذ Input من الـ Terminal الخاص بك وتحويلها إلى الحاوية، بشكل عام ستحتاج بالغالب لاستخدام الأمرين معا دائما، إلا في حالة تنفيذ أمر دون الحاجة لمعرفة الـ Output أو التفاعل مع الـ Terminal.
كما يمكنك استخدام الأمر bash
للوصول إلى الحاوية في حال احتجت تنفيذ أكثر من أمر:
1docker exec -it my_database bash
مراجعة الأوامر الموجودة في المقال
- لتشغيل الحاوية في الخلفية ستحتاج لتمرير الخيار
-d
للأمرdocker run
، الحاويات في الخلفية سيتم اغلاقها في حال توقف الأمر الذي تمريره عند تشغيل الحاوية (التفاصيل). - يمكنك استخدام الأمر
docker start
(التفاصيل) والأمرdocker stop
(التفاصيل) مع ID أو اسم الحاوية للتحكم بايقافها وتشغيلها. - يمكن استخدام الأمر
docker logs
لمراجعة الـ Output الخاص بالأمر الذي تم تمريره للحاوية مما يساعد في اكتشاف الأخطاء (التفاصيل). - الأمر
docker exec
يستخدم لتنفيذ أوامر داخل الحاوية (التفاصيل).