هل سبق لك أن احتجت إلى رؤية ما يحدث داخل حاوية Docker؟ الحاويات مصممة لتكون قابلة للتعيين: إذا كان هناك مشكلة، أعد نشر حاوية جديدة. غالبًا ما لا تكون الحياة بهذه البساطة. تحتاج إلى تشغيل الأوامر في الحاوية لتحديد المشكلة. هنا يأتي دور الأمر docker exec
في المساعدة.
سيقوم هذا المقال بتعليمك كيفية تشغيل الأوامر على حاوية Docker الجارية باستخدام أمر docker exec
.
المتطلبات المسبقة
لمتابعة الأمثلة في هذا المقال، ستحتاج إلى الالتزام بالشروط التالية.
- سيعمل أي إصدار حديث من Docker Desktop على نظام التشغيل Windows، Linux، أو macOS. يستخدم هذا البرنامج التعليمي الإصدار v3.1.0 على نظام Windows 10.
بدء تشغيل حاوية NGINX
يقوم Docker exec
بتشغيل الأوامر في الحاويات. ولكن، للقيام بذلك، يجب أن تكون لديك حاوية أولاً لتشغيل تلك الأوامر فيها. لنبدأ بتنزيل صورة Docker وإنشاء حاوية توضيحية.
- أنشئ دليلًا جديدًا، يستخدم هذا المقال الدليل C:\gitrepos\test لاحتواء الملفات المستخدمة للحاوية.
2. أنشئ ملفًا بالاسم dockerfile (بدون امتداد) يحتوي على الكود التالي. يحدد ملف Dockerfile الخطوات اللازمة لإنشاء حاوية.
3. بعد ذلك، قم بإنشاء ملف في نفس الدليل، وسمِّه index.html والذي يحتوي على الكود التالي. هذا ملف HTML الذي عند بدء تشغيل الحاوية، سيعرض رسالة Hello World.
4. الآن، قم بإنشاء حاوية Docker لـ Nginx. نظرًا لأن ملف Dockerfile موجود في دليل العمل الحالي، فحدد .
لتُعلِم محرك Docker بالبحث هناك. كما تأكد من وضع علامة على الحاوية باسم my-nginx
باستخدام المعامل t
لتسهيل الإشارة إليها في المستقبل.

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

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

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

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

تجنب إخراج السطر بأوامر دوكر
من خلال إعادة التحكم في القشرة على الفور إلى المستخدم، يتجنب العمليات الكبيرة ربط السطر. تجاهل إخراج السطر بخيار d
المفصول. الأمر أدناه ينشئ ملف /tmp/execWorks عبر أمر touch
داخل الحاوية ولا يعرض أي إخراج على السطر.
تنفيذ الأوامر التفاعلية باستخدام تنفيذ دوكر
حتى هذه النقطة، تعلمت كيفية تشغيل الأوامر غير التفاعلية في حاوية دوكر باستخدام docker exec
. ولكن، قد تواجه وقتًا تحتاج فيه إلى تصحيح خطأ في حاوية، على سبيل المثال، عندما تحتاج إلى إصدار أوامر للحاوية بشكل تفاعلي. في هذه الحالة، تحتاج إلى تشغيل الأوامر بشكل تفاعلي.
تشغيل الأوامر بشكل تفاعلي باستخدام docker exec
يتطلب خيارين، i
و t
. الخيار i
يبقي STDIN مفتوحًا، مما يسمح بإرسال الأوامر إلى الحاوية، والخيار t
يخصص نموذج الطرفية الوهمية (PTY)، قناة اتصال، لكتابة الأوامر.
انسخ والصق الأمر التالي لفتح موجه أوامر تفاعلي إلى حاوية دوكر التي تعمل مع Bourne (sh) shell، كما يشير ذلك التغيير في السطر إلى / #
.

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

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

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

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

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

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