إضافة فهرس Elasticsearch خلال بناء Docker: دليل شامل
في عملية بناء صورة دوكر الخاصة بك، تحتاج إلى فهم كيفية إضافة فهرس Elasticsearch بشكل فعّال خلال عملية البناء. عند استخدام صورة دوكر الرسمية لـ Elasticsearch، يمكن أن يكون الإضافة الفعّالة لفهرس مخصص خلال عملية البناء تحديًا قليلاً.
في المحاولة التي ذكرتها في ملف Dockerfile الخاص بك، قمت بمحاولة تنفيذ طلب API باستخدام curl للاتصال بخدمة Elasticsearch على عنوان 127.0.0.1:9200
. ومع ذلك، يبدو أن هناك مشكلة في الاتصال أثناء عملية البناء، حيث يتم رفض الاتصال (Connection refused
).
هذا يحدث لأن خدمة Elasticsearch لا تكون مشغلة بعد خلال عملية البناء، وبالتالي يتعذر على curl الاتصال بها. لحل هذه المشكلة، يمكنك اتباع أحد الطرق التالية:
-
تأخير الطلب: يمكنك تأخير تنفيذ الطلب حتى تبدأ خدمة Elasticsearch. يمكنك استخدام أمر
sleep
قبل تنفيذ الأمر curl في Dockerfile، ولكن هذا الحل ليس مثلى بسبب عدم اليقين في وقت بدء خدمة Elasticsearch.DockerfileRUN sleep 30 && curl -XPUT 'http://elasticsearch:9200/myindex' -d @index.json
-
استخدام healthcheck: يمكنك إضافة صحة لخدمة Elasticsearch باستخدام healthcheck. يقوم healthcheck بالانتظار حتى يتم تشغيل Elasticsearch قبل أن يستمر البناء.
DockerfileHEALTHCHECK --interval=5s --timeout=3s CMD curl -f http://elasticsearch:9200 || exit 1 RUN curl -XPUT 'http://elasticsearch:9200/myindex' -d @index.json
عليك أن تضع اسم المستضيف الصحيح لخدمة Elasticsearch بدلاً من elasticsearch
في عنوان URL.
يجب أن يكون لديك ملف index.json
المحلي بنفس مجلد Dockerfile لتحديد تكوين الفهرس الخاص بك. يمكن أن يحتوي الملف على التعاريف الخاصة بفهرسك بتنسيق JSON.
مع هذه الخطوات، يجب أن تكون قادرًا على إضافة فهرس Elasticsearch بنجاح خلال عملية بناء Docker.
المزيد من المعلومات
في إطار إضافة المزيد من المعلومات حول عملية إضافة فهرس Elasticsearch خلال عملية بناء Docker، يمكننا التركيز على الخطوات الإضافية التي يمكن اتخاذها لضمان نجاح هذا الإجراء بشكل أفضل.
-
تحديد الإصدار والمكتبة:
يجب عليك التحقق من استخدام إصدار متوافق من Elasticsearch ومكتبة curl خلال عملية البناء. ذلك يضمن التوافق وتجنب مشاكل الاعتماد.DockerfileFROM docker.elastic.co/elasticsearch/elasticsearch:7.10.0
-
إعداد ملف
index.json
:
تأكد من وجود ملفindex.json
بشكل صحيح ويحتوي على التعاريف المطلوبة لفهرس Elasticsearch الخاص بك.json{ "mappings": { "properties": { "field1": { "type": "text" }, "field2": { "type": "keyword" } } } }
-
التحقق من الاتصال بخدمة Elasticsearch:
يمكنك استخدام أمرtelnet
في عملية البناء للتحقق من توفر خدمة Elasticsearch قبل تنفيذ الأمر curl.DockerfileRUN apk add --no-cache busybox-extras RUN until telnet elasticsearch 9200; do sleep 1; done
-
تحسين التحكم بالوقت:
قد تحتاج إلى زيادة أو تقليل وقت الانتظار حسب متطلبات النظام الخاص بك. يمكنك تعديل الفترة في أمرsleep
أوHEALTHCHECK
وفقًا لاحتياجاتك. -
استخدام Docker Compose:
يمكن أن يكون استخدام Docker Compose أكثر سهولة لتكوين تبادل الخدمات وضمان أن Elasticsearch يكون قد بدأ قبل بدء عملية بناء الصورة.yamlversion: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0 your-app: build: context: .
في هذا المثال، ستتأكد خدمة Docker Compose من بدء Elasticsearch قبل بدء بناء الصورة.
مع هذه الخطوات، يمكنك تحسين عملية إضافة فهرس Elasticsearch خلال عملية بناء Docker وضمان نجاح التكامل بين الخدمات المختلفة.