تُعدُّ تعليمة ENTRYPOINT
في Docker أداةً قويةً لتحديد العملية الرئيسية لحاويتك. إتقان استخدامها، بالاقتران مع تعليمة CMD
، أمرٌ أساسي لبناء صور Docker قوية وقابلة لإعادة الاستخدام. تستكشف هذه المقالة ENTRYPOINT
وتطبيقاتها العملية.
جدول المحتويات
- فهم تعليمة
ENTRYPOINT
- تمرير الوسائط إلى
ENTRYPOINT
ENTRYPOINT
مقابلCMD
: مقارنة مفصلة- أمثلة عملية وأفضل الممارسات
- خاتمة
فهم تعليمة ENTRYPOINT
تعين تعليمة ENTRYPOINT
في ملف Dockerfile الملف التنفيذي الرئيسي الذي يتم تشغيله عند بدء الحاوية. وهي تحدد الوظيفة الأساسية للحاوية. على عكس CMD
، لا يتم تجاوز الوسائط المُقدّمة إلى ENTRYPOINT
بواسطة أوامر docker run
؛ بل يتم دمجها مع وسائط وقت التشغيل. هذا يضمن عملية أساسية ثابتة، قابلة للتنبؤ بها مع السماح بالتخصيص في وقت التشغيل.
على سبيل المثال، قد تستخدم صورة خادم ويب ما يلي:
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
هذا يضمن تشغيل Apache في المقدمة، بغض النظر عن كيفية بدء الحاوية. الوسائط -D FOREGROUND
متأصلة في الصورة.
تمرير الوسائط إلى ENTRYPOINT
تكمن القوة الحقيقية لـ ENTRYPOINT
في قدرتها على قبول الوسائط من أمر docker run
. يتم إلحاق هذه الوسائط بأمر ENTRYPOINT
، مما يسمح بالتخصيص دون تغيير الصورة.
ضع في اعتبارك ملف Dockerfile
هذا:
ENTRYPOINT ["/bin/sh", "-c"]
CMD ["echo $1 && date"]
سيؤدي تشغيل docker run my-image "Hello from ENTRYPOINT!"
إلى طباعة “Hello from ENTRYPOINT!” متبوعًا بالتاريخ والوقت الحاليين. يتم تمرير الوسائط “Hello from ENTRYPOINT!” إلى shell ويتم تنفيذها بواسطة أمر echo
. كما يتم تنفيذ أمر date
من CMD
.
مثال أكثر تطوراً هو برنامج نصي يأخذ رقم منفذ:
#!/bin/bash
PORT="${1:-8080}" # استخدام 8080 كقيمة افتراضية إذا لم يتم تقديم أي وسيط.
echo "Starting server on port: $PORT"
# ... منطق الخادم باستخدام $PORT ...
ENTRYPOINT
مقابل CMD
: مقارنة مفصلة
يحدد ENTRYPOINT
العملية الرئيسية؛ يوفر CMD
وسائط افتراضية لتلك العملية. إذا كان كلاهما موجودًا، فسيتم إلحاق وسائط docker run
بأمر ENTRYPOINT
، مما يتجاوز وسائط CMD
. إذا تم تحديد CMD
فقط، فإنه يعمل كعملية رئيسية. استخدم ENTRYPOINT
للوظيفة الأساسية و CMD
للخيارات الافتراضية أو الخيارات التي يمكن تجاوزها بسهولة.
أمثلة عملية وأفضل الممارسات
مثال 1: تطبيق Python بسيط
COPY . /app
WORKDIR /app
ENTRYPOINT ["python3", "my_app.py"]
هذا يشغل تطبيق Python الخاص بك مباشرةً. أي وسائط لـ docker run
سيتم تمريرها إلى my_app.py
.
مثال 2: استخدام shell لأوامر أكثر تعقيدًا
ENTRYPOINT ["/bin/bash", "-c"]
CMD ["npm start"]
هنا، يمكنك البدء باستخدام shell ثم تشغيل أي أمر تحتاج إليه، إما افتراضيًا (npm start
) أو تجاوزه من docker run
.
أفضل الممارسات:
- استخدم
ENTRYPOINT
للأمر الأساسي. - استخدم
CMD
للوسائط الافتراضية أو الإعدادات التي يمكن تغييرها بسهولة. - تعامل دائمًا مع الوسائط بأمان داخل برنامجك النصي
ENTRYPOINT
، مع التحقق من الصحة وتقديم رسائل خطأ إعلامية.
خاتمة
ENTRYPOINT
هي تعليمة Docker أساسية، تُمكّن من إنشاء صور حاويات قوية وقابلة لإعادة الاستخدام وقابلة للتكيّف. إن فهم تفاعلها مع CMD
أمرٌ بالغ الأهمية لتطوير تطبيقات حاويات فعّالة. من خلال صياغة تعليمات ENTRYPOINT
و CMD
بعناية، يمكنك بناء صور Docker أكثر موثوقية وقابلية للصيانة.