تنفيذ دوكر: الأمر الخاص بك لتشغيل الأوامر في دوكر


هل سبق لك أن احتجت إلى رؤية ما يحدث داخل حاوية Docker؟ الحاويات مصممة لتكون قابلة للتعيين: إذا كان هناك مشكلة، أعد نشر حاوية جديدة. غالبًا ما لا تكون الحياة بهذه البساطة. تحتاج إلى تشغيل الأوامر في الحاوية لتحديد المشكلة. هنا يأتي دور الأمر docker exec في المساعدة.

سيقوم هذا المقال بتعليمك كيفية تشغيل الأوامر على حاوية Docker الجارية باستخدام أمر docker exec.

المتطلبات المسبقة

لمتابعة الأمثلة في هذا المقال، ستحتاج إلى الالتزام بالشروط التالية.

  • سيعمل أي إصدار حديث من Docker Desktop على نظام التشغيل Windows، Linux، أو macOS. يستخدم هذا البرنامج التعليمي الإصدار v3.1.0 على نظام Windows 10.

بدء تشغيل حاوية NGINX

يقوم Docker exec بتشغيل الأوامر في الحاويات. ولكن، للقيام بذلك، يجب أن تكون لديك حاوية أولاً لتشغيل تلك الأوامر فيها. لنبدأ بتنزيل صورة Docker وإنشاء حاوية توضيحية.

  1. أنشئ دليلًا جديدًا، يستخدم هذا المقال الدليل C:\gitrepos\test لاحتواء الملفات المستخدمة للحاوية.

2. أنشئ ملفًا بالاسم dockerfile (بدون امتداد) يحتوي على الكود التالي. يحدد ملف Dockerfile الخطوات اللازمة لإنشاء حاوية.

FROM nginx:alpine
 COPY index.html /usr/share/nginx/html/index.html

3. بعد ذلك، قم بإنشاء ملف في نفس الدليل، وسمِّه index.html والذي يحتوي على الكود التالي. هذا ملف HTML الذي عند بدء تشغيل الحاوية، سيعرض رسالة Hello World.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Hello World - Nginx Docker</title> 
    <style> 
       h1{ font-weight:lighter; font-family: Arial, Helvetica, sans-serif; 
       } 
    </style> 
    </head> 
    <body> 
       <h1> 
          Hello World 
       </h1> 

    </body> 
    </html>

4. الآن، قم بإنشاء حاوية Docker لـ Nginx. نظرًا لأن ملف Dockerfile موجود في دليل العمل الحالي، فحدد . لتُعلِم محرك Docker بالبحث هناك. كما تأكد من وضع علامة على الحاوية باسم my-nginx باستخدام المعامل t لتسهيل الإشارة إليها في المستقبل.

docker build -t my-nginx .
Creating a Docker container with the build command.

5. الآن بعد بناء الحاوية، ابدأ الحاوية باستخدام أمر Docker run.

# rm - يُبلِغ Docker بحذف الحاوية بعد توقفها 
# d - يُرجع التحكم إلى سطر الأوامر بعد تنفيذ الأمر 
# p - يعيِّن منفذ الحاوية الداخلي 80 بمنفذ خارجي 80 docker run --rm -d -p 80:80 my-nginx
Start the container with the Docker run command.

6. في النهاية، افتح متصفح الويب الخاص بك وانتقل إلى http://localhost/ لرؤية ما يلي.

Output of the running NGINX container.

تشغيل الأوامر باستخدام Docker Exec

عند تشغيل الأوامر في حاوية Docker، قد تحتاج إلى تشغيل أمر تفاعلي. تشغيل الأوامر تفاعليا يعني كتابة أمر، والحصول على رد، وكتابة أمر آخر، إلخ. تقوم الأوامر التفاعلية بالسيطرة على جلستك وتمنعك من فعل أي شيء آخر.

ولكن ماذا لو كنت تعرف بالفعل الأوامر التي يجب إرسالها إلى الحاوية مسبقا وتريد تشغيل الأوامر في الخلفية؟ في هذه الحالة، يمكنك تشغيل الأوامر غير التفاعلية. تسمح الأوامر غير التفاعلية لك بإرسال أمر إلى Docker وإعادة التحكم في وحدة التحكم على الفور.

العثور على اسم الحاوية ومعرفها

الآن بعد بناء الحاوية، يمكنك تنفيذ الأوامر داخل الحاوية. قبل تشغيل أمر، ابحث عن اسم حاوية NGINX أو معرفها. إما أن يعمل الاسم أو المعرف في أوامر Docker. ومع ذلك، قد يكون تذكر المعرف أكثر تحديا من الاسم!

لعرض أي معلومات حول الحاوية الجارية، قم بتشغيل الأمر Docker ps لإخراج المعلومات التالية.

docker ps
Displaying running Docker containers.

انسخ إما المعرف الفريد، e17e4b6be01a، أو الاسم المولد عشوائيا mystifying_chandrasekhar إلى الحافظة الخاصة بك للاستخدام لاحقا.

تشغيل أمر غير تفاعلي باستخدام Docker Exec

كمثال على تشغيل أمر غير تفاعلي، انسخ وشغل الأمر أدناه لإرجاع قائمة من الملفات في الدليل /var/log باستخدام الأمر ls -l. امرر كل شيء بعد اسم الحاوية، mystifying_chandrasekhar، إلى أمر Docker exec.

docker exec mystifying_chandrasekhar ls -l /var/log
Executing a directory listing within the NGINX container.

تجنب إخراج السطر بأوامر دوكر

من خلال إعادة التحكم في القشرة على الفور إلى المستخدم، يتجنب العمليات الكبيرة ربط السطر. تجاهل إخراج السطر بخيار d المفصول. الأمر أدناه ينشئ ملف /tmp/execWorks عبر أمر touch داخل الحاوية ولا يعرض أي إخراج على السطر.

docker exec -d mystifying_chandrasekhar touch /tmp/execWorks

تنفيذ الأوامر التفاعلية باستخدام تنفيذ دوكر

حتى هذه النقطة، تعلمت كيفية تشغيل الأوامر غير التفاعلية في حاوية دوكر باستخدام docker exec. ولكن، قد تواجه وقتًا تحتاج فيه إلى تصحيح خطأ في حاوية، على سبيل المثال، عندما تحتاج إلى إصدار أوامر للحاوية بشكل تفاعلي. في هذه الحالة، تحتاج إلى تشغيل الأوامر بشكل تفاعلي.

تشغيل الأوامر بشكل تفاعلي باستخدام docker exec يتطلب خيارين، i و t. الخيار i يبقي STDIN مفتوحًا، مما يسمح بإرسال الأوامر إلى الحاوية، والخيار t يخصص نموذج الطرفية الوهمية (PTY)، قناة اتصال، لكتابة الأوامر.

انسخ والصق الأمر التالي لفتح موجه أوامر تفاعلي إلى حاوية دوكر التي تعمل مع Bourne (sh) shell، كما يشير ذلك التغيير في السطر إلى / #.

docker exec -it mystifying_chandrasekhar sh
Running an interactive Docker shell.

بمجرد دخولك إلى القشرة، قم الآن بتشغيل الأوامر أدناه لعرض قائمة الملفات من داخل الحاوية. أخيرًا، قم بتشغيل الأمر exit للخروج من القشرة التفاعلية.

ls -l /var/log
exit
Open an interactive command prompt to the container.

لفتح موجه تفاعلية في دليل محدد، قم بتمرير المسار إلى الخيار w مع Docker لبدء الشل في دليل محدد.

تمرير المتغيرات البيئية إلى حاوية قيد التشغيل

تستخدم العديد من البرامج المتغيرات البيئية لتعيين التكوينات عند البدء. على سبيل المثال، تتطلب معظم تطبيقات Java المتغير البيئي JAVA_HOME لتعيين مسار Java.

يمكنك تمرير المتغيرات البيئية إلى جلسة باستخدام الخيار e. على سبيل المثال، ربما تحتاج إلى ملء متغير بيئي يُسمى MYVAR في حاوية قيد التشغيل. للقيام بذلك، استخدم الخيار e وقدم زوج المفتاح/القيمة MYVAR="<some value>" كما هو موضح أدناه.

docker exec -it -e MYVAR="hello" mystifying_chandrasekhar sh
echo $MYVAR
Pass environment variables

تمرير المتغيرات البيئية باستخدام ملف

إذا كان لديك العديد من المتغيرات البيئية أو تكوين مشترك، فقد يكون من الأسهل تخزين تلك المتغيرات في ملف. قم بتمرير الملف عبر مسار نسبي أو مطلق إلى Docker باستخدام الخيار --env-file. يُستخدم هذا التقنية غالبًا لتوفير بيانات اعتماد آمنة لحاوية. تأكد من عدم تضمين بيانات الاعتماد أبدًا في نظام التحكم بالنسخ!

أنشئ ملف نصي يسمى env-vars.txt يحتوي على المتغيرات البيئية التي يتعين تمريرها وقيمها. يمكن تسمية هذا الملف بأي اسم تريده ولا يحتاج إلى امتداد ملف .txt.

Text file with environmental variables defined.

قم بتمرير المتغيرات البيئية إلى Docker باستخدام الخيار env-file. تحقق من توفر المتغيرات باستخدام أمر echo كما هو موضح في اللقطة الشاشة أدناه.

# قم بتمرير ملف env-vars.txt وافتح نافذة تفاعلية
docker exec -it --env-file env-vars.txt mystifying_chandrasekhar sh
# تحقق من توافر المتغيرات البيئية في حاوية Docker
echo $MYVAR
echo $FOO
echo $SOMETHING
Passing a environmental variables file to Docker and verifying the environment variables exist in the container.

التفاعل مع حاوية تعمل كمستخدم مختلف

في الإنتاج، تعمل التطبيقات غالبًا كمستخدم محدد لتقييد وصولها. إذا كنت تقوم بتشغيل التطبيقات كمستخدم محدد في الإنتاج، يجب عليك أيضًا فعل ذلك أثناء اختبار الأوامر.

في هذا المثال، يتم تشغيل حاوية Docker كمستخدم nginx. قم بتمرير اسم المستخدم إلى الخيار w لإخبار Docker بتشغيل الحاوية بصفتها حساب nginx. تؤكد الأمر whoami، المشغل من داخل الحاوية، أن المستخدم nginx هو المستخدم المستخدم فعليًا.

docker exec -it -u nginx mystifying_chandrasekhar sh
whoami
Running the container as the nginx user.

الخطوات التالية

لقد تعلمت كيفية تنفيذ الأوامر داخل حاوية تعمل باستخدام الأمر docker exec. باستخدام الأمر exec لدخول واستجواب الحاويات الجارية، لديك أداة جديدة قوية في مجموعة أدواتك لتصحيح المشاكل في حاويات Docker.

جرب الآن أن تأخذ ما تعلمته خطوة إضافية واستخدم تحكم الإصدار Git لسحب موقع ويب ثابت إلى الحاوية، بدلاً من نسخ ملف واحد. إذا كان Git جديدًا بالنسبة لك، فإن المقالة دليل المبتدئين لمحرر Visual Studio Code وGit هي مكان رائع للبدء.

Source:
https://adamtheautomator.com/docker-exec/