لتحقيق هذا الغرض في 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
عند تشغيل الحاوية لأول مرة، ويمكنك تحقيق ذلك عن طريق تمرير متغير بيئي إلى الحاوية عند تشغيلها. على سبيل المثال، يمكنك تشغيل الحاوية بهذا الشكل:
bashdocker run -e INITIALIZED=false my_image
بهذه الطريقة، ستتم عملية التهيئة فقط عندما تكون قيمة INITIALIZED
هي false
، ولن تتم تكرارها عند إعادة تشغيل الحاوية.
المزيد من المعلومات
بالتأكيد! لتنفيذ هذا النوع من التحكم في تنفيذ الأوامر عند تشغيل حاوية Docker للمرة الأولى فقط، يمكنك استخدام متغير بيئي لتحديد حالة تنفيذ الأوامر. عندما تقوم بتشغيل الحاوية للمرة الأولى، سيكون المتغير بيئيًا غير معرف به (undefined)، وبالتالي يمكنك فحص حالة المتغير وتنفيذ الأوامر اللازمة. وعندما تقوم بإعادة تشغيل الحاوية، سيظل المتغير بيئيًا معرفًا بقيمته السابقة، وبالتالي يمكنك تجاهل تنفيذ الأوامر.
في سياق Docker، يمكنك تعيين قيمة المتغير البيئي من خلال الأمر ENV
في Dockerfile، واستخدام الأمر RUN
في السكربت لتنفيذ الأوامر الضرورية بناءً على قيمة المتغير البيئي.
فيما يلي مثال على كيفية تحقيق ذلك:
Dockerfile:
dockerfileFROM 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
، وذلك لمنع تنفيذ السكربت مرة أخرى عند إعادة تشغيل الحاوية.