مقدمة
دوكر هو أداة تحويل شائعة تُستخدم لتوفير تطبيقات البرمجيات بنظام ملفات يحتوي على كل ما يحتاجون إليه للتشغيل. باستخدام حاويات Docker ، يتأكد المستخدمون من أن البرنامج سيتصرف بنفس الطريقة ، بغض النظر عن المكان الذي يتم نشره فيه ، لأن بيئته التشغيلية متسقة تمامًا.
في هذا البرنامج التعليمي ، سنقدم نظرة عامة موجزة على العلاقة بين صور Docker وحاويات Docker. ثم ، سنلقي نظرة أكثر تفصيلًا على كيفية تشغيل وبدء وإيقاف وإزالة الحاويات.
نظرة عامة
يمكننا التفكير في صورة Docker كقالب غير فاعل يُستخدم لإنشاء حاويات Docker. تبدأ الصور عادةً بنظام ملفات جذري وتضيف تغييرات في نظام الملفات ومعلمات التنفيذ الخاصة بها في طبقات مرتبة للقراءة فقط. على عكس توزيع Linux النموذجي ، تحتوي صور Docker عادةً فقط على الأساسيات الضرورية لتشغيل التطبيق. الصور ليست لها حالة ولا تتغير. بل تشكل نقطة البداية لحاويات Docker.
تأتي الصور إلى الحياة باستخدام أمر docker run
، الذي ينشئ حاوية عن طريق إضافة طبقة قابلة للقراءة والكتابة على أعلى الصورة. هذا التوافق بين الطبقات القابلة للقراءة فقط مع طبقة قابلة للقراءة والكتابة يُعرف باسم نظام ملفات اتحادي. عندما يتم إجراء تغيير على ملف موجود بالفعل في حاوية تعمل، يتم نسخ الملف من المساحة القابلة للقراءة فقط إلى الطبقة القابلة للقراءة والكتابة، حيث يتم تطبيق التغييرات. النسخة في الطبقة القابلة للقراءة والكتابة تخفي الملف الأصلي ولكنها لا تقوم بإزالته. التغييرات في الطبقة القابلة للقراءة والكتابة تظهر فقط داخل نسخة الحاوية الفردية. عند حذف الحاوية، تضيع أي تغييرات ما لم يتم اتخاذ خطوات للحفاظ عليها.
كيفية العمل مع حاويات Docker
العمل مع الحاويات
في كل مرة تستخدم فيها أمر docker run
، ينشئ حاوية جديدة من الصورة التي تحددها. يمكن أن يكون هذا مصدرًا للالتباس، لذلك دعنا نلقي نظرة عليه مع بعض الأمثلة:
الخطوة 1: إنشاء حاويتين
سينشئ الأمر التالي docker run
حاوية جديدة باستخدام الصورة الأساسية ubuntu
. -t
سيمنحنا واجهة سطر الأوامر، و-i
سيسمح لنا بالتفاعل معها. سنعتمد على الأمر الافتراضي في ملف Docker الخاص بصورة قاعدة بيانات Ubuntu، bash
، ليدخلنا إلى القشرة.
يتغير مؤشر سطر الأوامر ليشير إلى أننا داخل الحاوية كمستخدم root، تليها معرف الحاوية المكون من 12 حرفًا.
سنقوم بإجراء تغيير عن طريق إرسال بعض النص إلى دليل الحاوية /tmp
، ثم استخدام cat
للتحقق من أنه تم حفظه بنجاح.
OutputExample1
الآن، دعونا نخرج من الحاوية.
تتوقف حاويات Docker عن العمل بمجرد اكتمال الأمر الذي أصدرته، لذلك توقفت حاويتنا عندما خرجنا من جلدة الباش. إذا قمنا بتشغيل docker ps
، الأمر لعرض الحاويات الجارية، فلن نرى حاويتنا.
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
إذا قمنا بإضافة علامة -a
، التي تظهر كافة الحاويات، سواءً كانت متوقفة أو جارية، فإن حاويتنا ستظهر في القائمة:
OutputCONTAINER 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 ثوانٍ
). إذا كانت الحاوية لا تزال قيد التشغيل، فسنرى الحالة “تم التشغيل”، تليها مدة تشغيلها.
إذا قمنا بتشغيل نفس الأمر مرة أخرى، سيتم إنشاء حاوية جديدة تمامًا:
يمكننا معرفة أنها حاوية جديدة لأن المعرف في سطر الأوامر مختلف، وعند البحث عن ملف Example1 الخاص بنا، لن نجده:
Outputcat: /tmp/Example1: No such file or directory
قد يبدو أن البيانات قد اختفت، ولكن هذا ليس الحال. سنخرج من الحاوية الثانية الآن لنرى أنها، وحاويتنا الأولى مع الملف الذي أنشأناه، موجودتان على النظام.
عندما نقوم بإدراج الحاويات مرة أخرى، تظهر كلتاهما:
OutputCONTAINER 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
لجعلها تفاعلية، تليها معرف الحاوية أو الاسم. تأكد من استبدال معرف الحاوية الخاص بك في الأمر أدناه:
نجد أنفسنا في سطر الأوامر bash للحاوية مرة أخرى وعندما نقوم بتشغيل cat
على الملف الذي أنشأناه سابقًا، لا يزال هناك.
OutputExample1
يمكننا الخروج من الحاوية الآن:
يوضح هذا الإخراج أن التغييرات التي تم إجراؤها داخل الحاوية تستمر من خلال إيقافها وإعادة تشغيلها. فمن الممكن حذف المحتوى فقط عند إزالة الحاوية. كما يوضح هذا المثال أيضًا أن التغييرات تقتصر على الحاوية الفردية. عندما بدأنا الحاوية الثانية، كانت تعكس الحالة الأصلية للصورة.
الخطوة 3: حذف كلتا الحاويتين
لقد أنشأنا حاويتين، وسنختتم دورتنا التعليمية القصيرة بحذفهما. يسمح أمر docker rm
، الذي يعمل فقط على الحاويات المتوقفة، لك بتحديد اسم أو معرف واحد أو أكثر من الحاويات، لذا يمكننا حذف كلاهما بالتالي:
Output11cc47339ee1
kickass_borg
كلتا الحاويات، وأي تغييرات قمنا بها داخلهما، قد اختفت الآن.
الختام
لقد قمنا بالنظر الدقيق إلى أمر docker run
لنرى كيف يقوم تلقائيًا بإنشاء حاوية جديدة في كل مرة يتم تشغيله. كما رأينا أيضًا كيفية تحديد موقع الحاوية المتوقفة، وتشغيلها، والاتصال بها. إذا كنت ترغب في معرفة المزيد حول إدارة الحاويات، قد تكون مهتمًا بالدليل، تسمية حاويات Docker: 3 نصائح للمبتدئين.
Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers