البرمجة

تنفيذ أوامر Docker عند تشغيل الحاوية للمرة الأولى

لتحقيق هذا الغرض في Docker، يمكنك استخدام متغير بيئي (environment variable) لتحديد ما إذا كان السكربت (init.sh) قد تم تنفيذه بالفعل أم لا. يمكنك تعيين قيمة افتراضية لهذا المتغير وتحقق من قيمته داخل السكربت لتحديد ما إذا كان يجب تنفيذ السكربت أم لا.

على سبيل المثال، يمكنك تحديد متغير بيئي بإسم INITIALIZED وتعيين قيمته إلى false افتراضيًا. ثم يمكنك تعديل السكربت (init.sh) ليحتوي على شرط يتحقق من قيمة المتغير INITIALIZED قبل تنفيذ الأوامر الأولية، وإذا كانت قيمته false، يتم تنفيذ الأوامر ومن ثم تعيين قيمة INITIALIZED إلى true. عندما يتم إعادة تشغيل الحاوية، ستكون قيمة INITIALIZED محفوظة ولن تتم تنفيذ الأوامر الأولية مرة أخرى.

إليك مثالًا على كيفية تنفيذ ذلك في السكربت (init.sh):

bash
#!/bin/bash if [ "$INITIALIZED" != "true" ]; then # Perform initialization tasks echo "Initializing..." # Set the initialized flag to true export INITIALIZED=true fi # Other commands for your entrypoint

يجب أن تقوم بتعيين المتغير INITIALIZED بقيمة false عند تشغيل الحاوية لأول مرة، ويمكنك تحقيق ذلك عن طريق تمرير متغير بيئي إلى الحاوية عند تشغيلها. على سبيل المثال، يمكنك تشغيل الحاوية بهذا الشكل:

bash
docker run -e INITIALIZED=false my_image

بهذه الطريقة، ستتم عملية التهيئة فقط عندما تكون قيمة INITIALIZED هي false، ولن تتم تكرارها عند إعادة تشغيل الحاوية.

المزيد من المعلومات

بالتأكيد! لتنفيذ هذا النوع من التحكم في تنفيذ الأوامر عند تشغيل حاوية Docker للمرة الأولى فقط، يمكنك استخدام متغير بيئي لتحديد حالة تنفيذ الأوامر. عندما تقوم بتشغيل الحاوية للمرة الأولى، سيكون المتغير بيئيًا غير معرف به (undefined)، وبالتالي يمكنك فحص حالة المتغير وتنفيذ الأوامر اللازمة. وعندما تقوم بإعادة تشغيل الحاوية، سيظل المتغير بيئيًا معرفًا بقيمته السابقة، وبالتالي يمكنك تجاهل تنفيذ الأوامر.

في سياق Docker، يمكنك تعيين قيمة المتغير البيئي من خلال الأمر ENV في Dockerfile، واستخدام الأمر RUN في السكربت لتنفيذ الأوامر الضرورية بناءً على قيمة المتغير البيئي.

فيما يلي مثال على كيفية تحقيق ذلك:

Dockerfile:

dockerfile
FROM some-base-image ENV INITIALIZED=false COPY init.sh /init.sh RUN if [ "$INITIALIZED" = "false" ]; then \ /bin/bash /init.sh; \ export INITIALIZED=true; \ fi CMD ["start-service"]

في هذا المثال، يتم نسخ ملف السكربت init.sh إلى الحاوية ويتم تنفيذه باستخدام /bin/bash /init.sh فقط إذا كان المتغير البيئي INITIALIZED يساوي false. بعد تنفيذ السكربت، يتم تعيين قيمة INITIALIZED إلى true باستخدام export، وذلك لمنع تنفيذ السكربت مرة أخرى عند إعادة تشغيل الحاوية.

زر الذهاب إلى الأعلى