استخدام دوكر لإيقاف الحاويات بدون تعطيل الأمور!

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

تابع القراءة لمزيد من المعلومات!

المتطلبات

لمتابعة هذا البرنامج التعليمي، تأكد من أن لديك ما يلي:

  • Windows 10 – يستخدم البرنامج التعليمي Windows لتشغيل Docker، ولكن يمكنك أيضًا تطبيق الخطوات العامة نفسها على Linux أو macOS.
  • Docker Desktop – يستخدم هذا البرنامج التعليمي الإصدار 3.5.2. يتوفر محرك Docker إذا كنت تستخدم Linux حيث لا يتوفر الواجهة الرسومية.
  • A running Docker container or containers.

إنهاء الحاويات باستخدام أمر إيقاف الحاويات docker stop

لنبدأ بالأمر الأول: أمر إيقاف الحاويات docker stop وكيفية إيقاف الحاويات باستخدامه.

على سبيل المثال، ربما تحتاج إلى إيقاف حاوية تعمل بالاسم mystifying_hofstadter وتحتوي على معرف fb66ed502096. كما هو موضح في المثال أدناه، قم بإيقاف الحاوية باستخدام أمر docker stop containers.

# أوقف الحاوية عبر الاسم
docker stop mystifying_hofstadter
# أوقف الحاوية عبر الهوية (نفس الحاوية)
docker stop fb66ed50209
Stopping a single Docker container via the container name or container ID.

ماذا لو كان لديك العديد من الحاويات الجارية وترغب في إيقافها؟ يدعم أمر إيقاف الحاويات docker stop إيقاف عدة هويات حاويات، واحدة في كل مرة.

أولاً، قم بإدراج جميع الحاويات عبر أمر docker ps وقم بتمرير هويات الحاويات إلى أمر docker stop كما هو موضح أدناه.

# قائمة جميع الحاويات الجارية
docker ps
# قم بإيقاف حاويات Docker التالية عبر هوية الحاوية
docker stop a427a21c5558 e9dbd816f24c 31269ef5999e
Listing all running containers and then stopping them

ماذا لو كنت ترغب في إيقاف جميع الحاويات الجارية دون استرجاع هويات الحاويات يدويًا وتمريرها إلى docker stop? سينجز أمر docker ps -q ذلك. يقوم المعامل -q لأمر docker ps بإخراج فقط هويات الحاويات.

# قم بإنشاء ثلاث حاويات. يفصل فاصل منفصل كل أمر
docker run -d -t ubuntu; docker run -d -t ubuntu; docker run -d -t ubuntu
# قائمة جميع الحاويات الجارية
docker ps -q
# استرجاع جميع هويات الحاويات الجارية وتمريرها إلى docker stop
docker stop $(docker ps -q)
Stopping multiple Docker containers at once.

البنية $(docker ps -q) أعلاه هي تعبير فرعي في كل من Bash على نظام Linux وPowerShell على نظام Windows. يُعلم الفرع الفرع القشرة بمعالجة مجموعة من الأوامر، docker ps -q، أولاً ثم إرجاع مجموعة النتائج إلى الأمر الأصلي docker stop.

أمر docker stop containers يستخدم إشارة SIGTERM. تعلم الإشارات في Linux العملية بحدوث حدث، ولكن يتوقف الأمر على العملية لتقرر كيفية التصرف في إشارة معينة.

عند استخدام إشارة SIGTERM، يستخدم Docker الإشارة لإيقاف العملية بشكل متقن عن طريق الانتظار لمدة افتراضية 10 ثوانٍ قبل إرسال إشارة SIGKILL، التي تنهي العملية فورًا.

إيقاف حاوية باستخدام إشارات العملية

لقد تعلمت عن السلوك الافتراضي لـ Docker (إشارة الإيقاف)، باستخدام أمر docker stop containers عند إيقاف حاوية. ولكن قد لا ترغب في السلوك الافتراضي. بدلاً من ذلك، يمكنك توجيه Docker لاستخدام إشارات إيقاف بديلة.

مع تحديد العلم --stop-signal في أوامر docker run، يمكنك تحديد إشارة الإيقاف عند بدء تشغيل الحاوية. يقوم هذا العلم بتعيين الإشارة التي سيتم إرسالها إلى الحاوية الجارية عندما ترغب في إيقافها.

في المثال أدناه، تأخذ العلمة --stop-signal قيمة SIGQUIT، مما يخبر Docker بإرسال إشارة SIGQUIT عندما يحين الوقت لإيقاف الحاوية. يستخدم المثال أيضًا المعلمات التالية:

  • d – Runs the container in detached (background) mode. The detached mode will not allow the container to be immediately interacted with by the user since the process is running in the background.
  • t – allocates a Pseudo-TTY (PTY) console, which emulates a real terminal console in the container and stops the Ubuntu container from immediately exiting. The Ubuntu container in the example requires a PTY console to stay active in the background.
  • “اسم الصورة” – ما هي صورة Docker لإنشاء الحاوية منها، في هذه الحالة، صورة ubuntu.
docker run -d -t --stop-signal SIGQUIT ubuntu
Specifying SIGQUIT as the signal when starting and then stopping a Docker container.

يمكنك أيضًا تحديد إشارة الإيقاف باستخدام Dockerfile، الذي يخبر Docker كيفية بناء حاوية. يمكنك إضافة إدخال إلى Dockerfile يحدد إشارة الإيقاف باستخدام STOPSIGNAL SIGQUIT، على سبيل المثال. يمكنك تبديل SIGQUIT مع أي إشارة إيقاف ترغب فيها.

الخروج الفوري من الحاويات باستخدام docker kill

سيكون هناك أوقات ترغب فيها في الخروج من الحاويات دون منحها فترة سماح. الأمر docker kill يوقف الحاوية فورًا.

المثال أدناه يمرر الحاوية بالمعرف 2aa318273db5 إلى docker kill. ستخرج الحاوية على الفور عبر إشارة SIGKILL. لن يسمح بخروج الحاوية بطريقة مهذبة. نتيجة للأمر، ستخرج الحاوية، وسيتم عرض معرف الحاوية.

docker kill 2aa318273db5

قتل جميع الحاويات باستخدام الأمر docker kill $(docker ps -q). لاحظ أن (docker ps -q) هو تعبير فرعي هنا.

إيقاف وإزالة حاوية باستخدام docker rm

بشكل افتراضي، عند إنشاء حاوية، تُبنى تلك الحاوية بنفس الطريقة كما كانت من قبل: فهي تتمتع بالخواص الضرورية. إزالة الحاوية ستكون لها تأثير بسيط، وبذلك في الاعتبار، يمكن لأمر docker rm أن يُجبر على إيقاف وإزالة الحاوية. تُرسل Docker إشارة SIGKILL إلى العملية الرئيسية وتقوم بإزالة الحاوية من قائمة الحاويات المتاحة في تثبيت Docker الخاص بك.

إذا كانت الحاوية يجب أن تحتفظ بالملفات الداخلية المغيرة أو يجب الاحتفاظ بحالتها، فإن إزالة الحاوية ستدمر تلك التغييرات. احترس من الأخطاء المحتملة!

في المثال التالي، ربما قمت ببدء حاوية تم تعيين اسمها kind_galileo. قبل إزالة الحاوية، يجب إيقاف الحاوية، كما هو موضح أدناه. يُعرض أمر docker ps -a حالة Exited لحاوية المثال.

Listing all containers, including stopped containers.

الآن بعد أن تم إيقاف الحاوية، سيقوم أمر docker rm بإزالة الحاوية بالكامل.

docker rm kind_galileo

بدلاً من إيقاف الحاوية ثم إزالة الحاوية، فإن التركيبة المكونة من --force و docker rm ستقوم بإيقاف وإزالة الحاوية في عملية واحدة. بعد ذلك، لن تكون الحاوية بعنوان laughing_elion متاحة للتشغيل.

docker rm --force laughing_elion

إذا لم تقم بتحديد أمر --force، ستواجه رسالة خطأ Error response from daemon: You cannot remove a running container...

Stopping and removing a container.

إيقاف حاويات Docker باستخدام Docker Compose

تُستخدم أوامر Docker عادةً على حاوية واحدة، لكن يمكنك إنشاء خدمة بعدة حاويات تعمل معًا بتناغم. يتيح لك أداة Docker Compose تكوين خدمة تتألف من عدة حاويات للعمل معًا.

بما أن الحاويات ضمن خدمة مصممة للعمل معًا، فمن الأفضل إيقاف الخدمة بأكملها بشكل منتظم بدلاً من أي حاوية فردية.

إذا كان لديك خدمة تعمل بعدة حاويات، [docker-compose stop] يوقف الخدمة دون إزالة الحاويات أو الخدمة. تابع القراءة أدناه لإنشاء خدمة Docker Compose، وبدء الخدمة، وفي نهاية المطاف إيقاف الخدمة بشكل منتظم.

1. إنشاء دليل لتخزين ملف التكوين. في هذا المثال، سيخزن الدليل C:\Articles\Ubuntu الملف.

mkdir C:\Articles\Ubuntu

2. بعد ذلك، قم بإنشاء الملف docker-compose.yml، الذي يحتوي على التكوين التالي. ينشئ ملف Docker Compose أدناه خدمة بحاويتين Ubuntu، وعند تشغيلهما، لا تخرج الحاويات فورًا.

# إصدار مواصفات docker-compose
version: "3.9"
# مجموعة التطبيقات التي تشكل هذه الخدمة
services:
  # حاوية Ubuntu الأولى
  container1:
    image: ubuntu
    # نفس خيار -t وتخصيص Psuedo-TTY، حتى لا تخرج الحاوية فورًا.
    tty: true
  # حاوية Ubuntu الثانية
  container2:
    image: ubuntu
    tty: true

3. في جلسة تيرمنال، انتقل إلى دليل تكوين Docker المخصص الخاص بك، والذي في هذا المثال هو C:\Articles\Ubuntu. قم بتشغيل الأمر docker-compose up -d لإنشاء وبدء الخدمة التي تم إنشاؤها في الخطوة السابقة في الخلفية كما هو موضح بالخيار -d.

Starting a Docker Compose service.

4. في نفس جلسة التيرمنال والدليل، قم بإصدار الأمر docker-compose stop لإنهاء الخدمة والحاويات بسلاسة.

Stopping a Docker Compose service.

الأمر docker-compose، مثل الأمر docker، يحتوي أيضًا على المعلمات rm --force و kill. المعلمات docker-compose تعمل على الخدمة بدلاً من حاوية واحدة. يأخذ أمر docker-compose kill أيضًا خيار -s لتحديد إشارة التوقف.

الختام

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

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

Source:
https://adamtheautomator.com/docker-stop-containers/