هل تريد معرفة ما تفعله تطبيقات Docker خلف الكواليس؟ السجلات هي النافذة الخفية التي تُظهر كل ما يجري داخل الحاويات، وهي أداة لا غنى عنها لتشخيص المشكلات. لكن قبل أن نبدأ، دعنا نلقي نظرة سريعة على Docker و Docker Compose.
يتيح لك Docker تغليف تطبيقاتك في حاويات خفيفة وتشغيلها على معظم أنظمة التشغيل دون الحاجة إلى أي تبعيات. الفكرة ببساطة: تضع تطبيقاتك في صناديق معزولة تُسمى الحاويات، فتعمل بنفس الطريقة في أي بيئة. إن فهم الحاويات شرط أساسي قبل التعمق في Docker Compose، لذا أنصحك بقراءة مقالتنا حول فوائد الحوسبة المعتمدة على الحاويات.
يأتي Docker Compose مدمجاً مع Docker، ويُبسّط تطوير تطبيقات متعددة الحاويات عبر ربط خدماتها وشبكاتها وتخزينها معاً. تُساعد سجلات حاويات Docker وسجلات Docker Compose المطورين على متابعة ما يجري داخل كل حاوية.
هل تريد التعمق في سجلات Docker Compose؟ أنت في المكان الصحيح. ستشرح هذه المقالة أساسيات هذه السجلات وتتناول تفاصيل أكثر تقدماً، لتستفيد من Docker Compose في مشاريعك بأفضل صورة.
أهمية سجلات Docker Compose
تخيّل مطوراً يشغّل تطبيقاً بـ Docker دون أن يهتم بإعداد السجلات. في البداية يبدو كل شيء على ما يرام، ثم تبدأ التقارير تصل: أخطاء متكررة وأداء متراجع. بدون سجلات Docker، لن يتمكن المطور من معرفة ما جرى داخل الحاويات. سجلات Docker Compose هي السجل التفصيلي لكل ما يحدث في تلك الحاويات، وهي الأداة الأولى للكشف عن المشكلات وحلها.
سواء كنت مطوراً أو مسؤول أنظمة، فأنت بحاجة إلى فهم ما يجري داخل التطبيقات متعددة الخدمات وفيما بينها. هنا يبرز دور سجلات Docker Compose. فلماذا هي ضرورية؟
-
تشخيص المشكلات وتصحيح الأخطاء
عندما يتوقف تطبيق عن العمل أو يواجه أخطاء، فإن سجلات docker هي أول مكان تبحث فيه. تُمكّنك هذه السجلات من تتبع المشكلة وتحديد جذرها بدقة، سواء كان خطأً في الكود، أو إعداداً خاطئاً، أو نقصاً في الموارد.
-
مراقبة صحة التطبيق
المراقبة المنتظمة لسجلات التطبيق تكشف عن الحالة العامة للخدمات. يمكن للسجلات رصد مؤشرات إنذار مبكر كتكرار الأخطاء وبطء الاستجابة، وهو ما يساعد على تفادي مشكلات أكبر قبل أن تتفاقم.
-
التدقيق والامتثال
بالنسبة للتطبيقات الخاضعة لمعايير محددة، تُمثّل سجلات docker الدليل الأول على مدى التزام التطبيق بتلك المعايير. كما تؤدي هذه السجلات دوراً محورياً في رصد الأنشطة المصرّح بها وغير المصرّح بها.
-
التحسين والضبط
السجلات موارد قيّمة لتحسين البرمجيات، إذ توفر بيانات دقيقة عن الأداء. فمن خلالها يستطيع المطورون تحديد الاستعلامات البطيئة، ومسارات الكود غير الكفؤة، والموارد غير المستغلة.
بناء بيئة Docker: نشر خادم ويب
في هذا القسم، سنتعلم معاً كيفية إنشاء وصفة Docker. نحتاج أولاً إلى بناء شيء نبدأ به رحلتنا مع Docker Compose logs. سنشغّل لهذا الغرض خادم ويب. لإنشاء ملف Docker، نفّذ الأمر nano ملف Dockerfile في المجلد المطلوب على جهازك VPS، بالمحتوى التالي، ثم احفظ الملف:
FROM nginx:alpine RUN rm /usr/share/nginx/html/index.html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
ماذا تفعل كل سطر من هذا الكود؟
- نبدأ بصورة أساسية خفيفة الوزن، nginx:alpine.
- بعد ذلك، نحذف صفحة الترحيب الافتراضية لـ Nginx.
- ثم نتأكد من أن خادم الويب يستمع على المنفذ 80.
- أخيراً، نشغّل خادم Nginx باستخدام CMD.
أصبح ملف Docker جاهزاً الآن، وسننتقل إلى الخطوة التالية وهي إنشاء ملف Docker Compose. إليك هيكل ملف docker-compose.yml :
version: '3.8' services: web: build: . ports: - "8080:80" volumes: - ./index.html:/usr/share/nginx/html/index.html
لنشرح كل جزء منه بالتفصيل:
- نستخدم الإصدار 3.8.
- في السطر التالي، نسمي خدمتنا «web“.
- ثم نأمر Docker ببناء خادم الويب من المجلد الحالي.
- نربط المنفذ 8080 على الجهاز المضيف بالمنفذ 80 داخل الحاوية، لتمكين خادم الويب من إنشاء اتصال.
- أخيراً، يعمل إعداد volumes على تعيين index.html من قرص الجهاز المضيف إلى الحاوية. يمكنك لاحقاً إنشاء ملف index.html بأي محتوى تريد، ووضعه في المكان الذي توجد فيه ملفات Dockerfile و docker-compose.yml .
حان الوقت الآن لتشغيل حاوية Docker باستخدام Docker Compose. ببساطة، نفّذ الأمر docker-compose up.

بمجرد تنفيذ الأمر docker-compose up سيقوم Docker بتنزيل الصور المطلوبة من الإنترنت وضبط إعداداتها وفقاً لملفات الإعداد التي حددناها.
للتحقق من أن خادم الويب يعمل بشكل صحيح، افتح المتصفح، أدخل عنوان IP الخاص بـ VPS، ثم اطلب الوصول إلى المنفذ 8080.

كملاحظة جانبية، يمكنك استخدام docker-compose up -d لتشغيل الحاوية في الخلفية.
الوصول إلى السجلات عبر Docker Compose
خادم الويب الآن جاهز ويعمل بالكامل. يُنشئ سجلات بشكل مستمر ويحتفظ بها لاستخدامها لاحقاً. الاطلاع على سجلات docker compose أمرٌ ضروري لاستكشاف الأخطاء ومراقبة الأداء. فكيف نقرأ هذه السجلات؟ هنا يأتي دور سجلات docker-compose تأكد من أنك داخل المجلد الذي يحتوي على ملف الإعداد، ثم نفّذ هذا الأمر.

في بعض الأحيان، قد تحتاج إلى متابعة السجلات لحظةً بلحظة أثناء إنشائها. أضف -f في نهاية الأمر السابق ونفّذ docker-compose logs -f.

بعض التطبيقات المبنية على Docker قد لا تُدرج الطوابع الزمنية في سجلاتها. في هذه الحالة، استخدم docker-compose logs -t لإضافة توقيت مسجَّل لكل سطر في السجل.

يمكن لسجلات Docker أيضاً عرض أحدث المدخلات. لتحقيق ذلك، استخدم docker-compose logs –tail 10 لعرض آخر 10 إدخالات في السجل. تُعدّ خاصية tail في سجلات Docker Compose، وكذلك في docker logs، مفيدةً بشكل خاص حين تريد التحقق سريعاً من آخر النشاطات دون الحاجة إلى التمرير عبر كامل تاريخ السجل.

الغرض الأساسي من Docker Compose هو بناء تطبيقات متعددة الحاويات. لذا، قد تحتاج أحياناً إلى قراءة سجلات خدمة بعينها. للقيام بذلك، استخدم docker-compose logs -f SERVICEمع استبدال SERVICE باسم خدمتك الفعلية.

تسجيل أحداث Docker
قد تصبح بيئة Docker أكثر تعقيداً في التطبيقات المدمجة، لا سيما في البيئات الكبيرة. وكما هو معروف، يُنتج كل حاوية سجلاتها الخاصة. لذلك، تتولى آلية تُعرف بـ Logging Driver استقبال هذه السجلات وتوصيلها وتخزينها. يستخدم Docker ملفات JSON افتراضياً لهذا الغرض، غير أنه يدعم أيضاً عدداً من المشغّلات الأخرى، لكلٍّ منها مزاياه وعيوبه.
لا خلاف على أن السجلات ضرورية في مجالات عدة، من بينها تشخيص الأعطال وتحسين أداء النظام. فيما يلي، سنتناول جانبين رئيسيين من جوانب استخدام سجلات الحاويات:
- المراقبة: تتمثل الوظيفة الأساسية للسجلات في المراقبة، إذ تكشف عموماً عن الحالة الصحية العامة لتطبيقاتنا المعتمدة على الحاويات.
- تشخيص الأعطال: عند ظهور مشكلات، تساعدنا السجلات في رصد الأخطاء التي تطرأ على التطبيقات.
نظراً لأن سجلات docker logs وdocker compose logs تتراكم باستمرار، فقد تستهلك كامل مساحة تخزين VPS. لذلك، نحتاج إلى آلية لإدارة مساحة القرص تُعرف بسياسة تدوير السجلات (Log Rotation Policy). لإنشاء هذه السياسة وتفعيلها، ارجع إلى الملف docker-compose.yml وافتحه، ثم أضف قسم التسجيل بالإعدادات التالية:
version: '3.8' services: web: build: . ports: - "8080:80" volumes: - ./index.htm:/usr/share/nginx/html/index.htm logging: driver: json-file options: max-size: "200k" max-file: "10"
يمكنك تعديل القيمتين max-size و max-file في أي وقت وفق احتياجاتك.
نماذج تسليم سجلات Docker
قد يلجأ المهندسون في البيئات المتقدمة إلى نماذج تسجيل مختلفة عن مشغّل JSON الافتراضي، مثل Syslog وfluentd وغيرهما. غير أنه تجدر الإشارة إلى أن مشغّل JSON-file يُلبّي متطلبات معظم سيناريوهات التسجيل، وقد لا تكون ثمة حاجة للخروج عن الإعداد الافتراضي.
قد تفرض عليك متطلبات بنية تطبيقك أو احتياجات مؤسستك اعتماد حلول تسجيل مركزية تُعرف بـ Log Aggregators. هذه الخدمات، ومنها ElasticsearchوLogstash وKibana وغيرها، مصمَّمة لاستقبال السجلات من مصادر متعددة وتجميعها وتخزينها وتحليلها في مكان مركزي واحد.
في المقابل، ينبغي تخزين سجلاتك باستخدام حلول تخزين أقل كلفة. تأمّل مثلاً الحالة التي يعتمد فيها VPS على تخزين عالي السرعة ومرتفع التكلفة؛ فمن غير المجدي اقتصادياً توظيف هذه الموارد المتميزة لتخزين سجلات قد لا تحتاج إليها إلا للرجوع إليها مستقبلاً.
تتوفر نماذج تسجيل عديدة، لكل منها مزاياه وعيوبه. من الضروري تقييم كل نموذج بعناية واختيار ما يناسب احتياجاتك تحديداً.
احصل على VPS اقتصادي أو متميز يعمل بنظام Linux لاستضافة موقعك الإلكتروني أو سطح المكتب البعيد، بأفضل الأسعار المتاحة. يعمل VPS على Linux KVM لكفاءة أعلى، ويستند إلى أجهزة قوية مع تخزين NVMe SSD لسرعة أكبر.
اقرأ المزيدخلاصة
فهم سجلات Docker Compose أمر جوهري لإدارة تطبيقات Docker وتشخيص أعطالها بفعالية. إتقان الوصول إلى هذه السجلات ومراقبتها يُحسّن قدرتك على حل المشكلات ويرفع أداء تطبيقك وأمانه. سواء كنت في مرحلة التطوير أو إدارة الأنظمة، فإن الاستفادة من سجلات Docker Compose ضرورة لا غنى عنها لضمان إدارة فعّالة للحاويات.
الأسئلة الشائعة
كيف أُصفّي سجلات Docker Compose حسب الوقت؟
لا يوفر Docker Compose طريقة مباشرة لتصفية السجلات حسب الوقت. بيد أنك تستطيع تصفيتها عبر توجيهها إلى grep لمطابقة الأنماط. على سبيل المثال، يمكنك استخدام: docker-compose logs | grep "2023-04-06"، مع استبدال "2023-04-06" بالتاريخ أو نمط الوقت الذي تبحث عنه.
كيف أوقف الحاويات التي شغّلتها بـ Docker Compose؟
انتقل إلى المجلد الذي يحتوي على ملف docker-compose.yml ونفّذ الأمر docker-compose down.
كيف أحذف ملفات السجلات يدوياً؟
بدلاً من ضبط تدوير السجلات في ملف docker-compose.yml، يمكنك حذف ملفات سجلات Docker JSON يدوياً من المسار /var/lib/docker/containers/<container_id>/. قبل ذلك، تأكد من تحديد معرّف حاوية Docker باستخدام docker ps -a.
هل يمكن متابعة سجلات Docker بشكل مستمر؟
نعم، يمكنك ذلك. استخدم أمر docker logs مع الخيار -f أو --follow، وسيتيح لك هذا متابعة سجلات Docker بشكل مباشر.