العمل مع حاويات Docker

مقدمة

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

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

نظرة عامة

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

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

كيفية العمل مع حاويات Docker

  1. إنشاء حاويتين Docker
  2. إعادة تشغيل الحاوية الأولى
  3. حذف كلتا الحاويتين

العمل مع الحاويات

في كل مرة تستخدم فيها أمر docker run، ينشئ حاوية جديدة من الصورة التي تحددها. يمكن أن يكون هذا مصدرًا للالتباس، لذلك دعنا نلقي نظرة عليه مع بعض الأمثلة:

الخطوة 1: إنشاء حاويتين

سينشئ الأمر التالي docker run حاوية جديدة باستخدام الصورة الأساسية ubuntu. -t سيمنحنا واجهة سطر الأوامر، و-i سيسمح لنا بالتفاعل معها. سنعتمد على الأمر الافتراضي في ملف Docker الخاص بصورة قاعدة بيانات Ubuntu، bash، ليدخلنا إلى القشرة.

  1. docker run -ti ubuntu

يتغير مؤشر سطر الأوامر ليشير إلى أننا داخل الحاوية كمستخدم root، تليها معرف الحاوية المكون من 12 حرفًا.

سنقوم بإجراء تغيير عن طريق إرسال بعض النص إلى دليل الحاوية /tmp، ثم استخدام cat للتحقق من أنه تم حفظه بنجاح.

  1. echo "Example1" > /tmp/Example1.txt
  2. cat /tmp/Example1.txt
Output
Example1

الآن، دعونا نخرج من الحاوية.

  1. exit

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

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

إذا قمنا بإضافة علامة -a، التي تظهر كافة الحاويات، سواءً كانت متوقفة أو جارية، فإن حاويتنا ستظهر في القائمة:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi

عند إنشاء الحاوية، تم تعيين معرف الحاوية واسمًا مولدًا عشوائيًا لها. في هذه الحالة، 11cc47339ee1 هو معرف الحاوية و small_sinoussi هو الاسم الذي تم إنشاؤه عشوائيًا. تعرض ps -a تلك القيم، بالإضافة إلى الصورة التي تم بناء الحاوية عليها (ubuntu)، وزمن إنشاء الحاوية (قبل ست دقائق)، والأمر الذي تم تشغيله فيها (/bin/bash). كما توفر النتائج أيضًا حالة الحاوية (توقفت) ومدة دخول الحاوية في تلك الحالة (قبل 6 ثوانٍ). إذا كانت الحاوية لا تزال قيد التشغيل، فسنرى الحالة “تم التشغيل”، تليها مدة تشغيلها.

إذا قمنا بتشغيل نفس الأمر مرة أخرى، سيتم إنشاء حاوية جديدة تمامًا:

  1. docker run -ti ubuntu

يمكننا معرفة أنها حاوية جديدة لأن المعرف في سطر الأوامر مختلف، وعند البحث عن ملف Example1 الخاص بنا، لن نجده:

  1. cat /tmp/Example1
Output
cat: /tmp/Example1: No such file or directory

قد يبدو أن البيانات قد اختفت، ولكن هذا ليس الحال. سنخرج من الحاوية الثانية الآن لنرى أنها، وحاويتنا الأولى مع الملف الذي أنشأناه، موجودتان على النظام.

  1. exit

عندما نقوم بإدراج الحاويات مرة أخرى، تظهر كلتاهما:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg 11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi

الخطوة 2: إعادة تشغيل الحاوية الأولى

لإعادة تشغيل الحاوية الحالية، سنستخدم أمر start مع العلم -a للالتصاق بها والعلم -i لجعلها تفاعلية، تليها معرف الحاوية أو الاسم. تأكد من استبدال معرف الحاوية الخاص بك في الأمر أدناه:

  1. docker start -ai 11cc47339ee1

نجد أنفسنا في سطر الأوامر bash للحاوية مرة أخرى وعندما نقوم بتشغيل cat على الملف الذي أنشأناه سابقًا، لا يزال هناك.

  1. cat /tmp/Example1.txt
Output
Example1

يمكننا الخروج من الحاوية الآن:

  1. exit

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

الخطوة 3: حذف كلتا الحاويتين

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

  1. docker rm 11cc47339ee1 kickass_borg
Output
11cc47339ee1 kickass_borg

كلتا الحاويات، وأي تغييرات قمنا بها داخلهما، قد اختفت الآن.

الختام

لقد قمنا بالنظر الدقيق إلى أمر docker run لنرى كيف يقوم تلقائيًا بإنشاء حاوية جديدة في كل مرة يتم تشغيله. كما رأينا أيضًا كيفية تحديد موقع الحاوية المتوقفة، وتشغيلها، والاتصال بها. إذا كنت ترغب في معرفة المزيد حول إدارة الحاويات، قد تكون مهتمًا بالدليل، تسمية حاويات Docker: 3 نصائح للمبتدئين.

Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers