اذهب إلى المحتوى

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


Naser Dakhel

هل يمكنك الحصول على حاويات لينكس Linux Containers دون استخدام Docker أو OpebShift أو Kubernetes؟ نعم، يمكنك، فقد طوّر مشروع LXC مفهوم تشغيل نظام تشغيل افتراضي يعمل على نواة النظام، ومُحتوًى ضمن مجموعةٍ من التعليمات المعرفة مسبقًا، وذلك قبل سنوات عدّة من ظهور Docker وانتشار مصطلح الحاويات.

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

تثبيت LXC

إذا كنتَ تبحث عن مصدر سريع لفهم مشروع LXC، فزُر موقع المشروع الرسمي. إذا لم يكن LXC مثبتًا بعد على جهازك، فثبّته باستخدام مدير الحزم على لينكس. وبالنسبة لتوزيعة فيدورا Fedora والتوزيعات المشابهة، اكتب:

sudo dnf install lxc lxc-templates lxc-doc $

أما بالنسبة لتوزيعتي ديبيان Debian وأوبنتو Ubuntu والتوزيعات المشابهة، فاكتب:

sudo apt install lxc $

إنشاء جسر للشبكة

تفترض معظم الحاويات توافر اتّصال بالشبكة، كما تفترض معظم أدوات إدارة الحاويات أن المستخدم سينشئ شبكات افتراضية. يُعد جسر الشبكة network bridge من المكونات الأساسية في أيّ حاوية، وهو يكافئ إلى حدٍ ما مبدّل switch شبكة، إذ يعمل بمثابة مأخذ ذكي ذي مخرجين Y-Adapter، مثل مأخذ سماعات الرأس الذي يسمح لك ولصديقك بالاستماع للصوت في الوقت ذاته باستخدام سماعتين منفصلتين، والفرق هنا هو أنّ الإشارة التي تُنقل هي حزم البيانات وليس إشارة الصوت.

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

لإنشاء جسرٍ للشبكة على جهازك، عليك الحصول على الأذونات المطلوبة. ومن خلال تنفيذك للتعليمات في هذا الدليل، استخدم الأمر sudo الذي سيعطيك صلاحيات الجذر؛ بينما يقدم توثيق LXC طريقةً لتهيئة صلاحيات المستخدمين دون استخدام الأمر sudo.

sudo ip link add br0 type bridge $

يمكن التحقق من عملية إنشاء واجهة الشبكة الافتراضية بنجاح عن طريق:

sudo ip addr show br0 $
7: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc
 noop state DOWN group default qlen 1000
 link/ether 26:fa:21:5f:cf:99 brd ff:ff:ff:ff:ff:ff

بما أنّ br0 واجهة شبكة افتراضية Virtual Network Interface، فهو يتطلب عنوان بروتوكول الإنترنت الخاص به. لذلك، اختر عنوانًا محليًا صالحًا لا يتعارض مع أي عنوانٍ آخر موجود على شبكتك، واربطه مع جهاز الشبكة الافتراضية br0 على النحو التالي:

sudo ip addr add 192.168.168.168 dev br0 $

تأكّد في النهاية أن br0 يعمل بنجاح من خلال الأمر التالي:

sudo ip link set br0 up $

تهيئة تكوين الحاوية

قد يكون ملف ضبط Config حاوية LXC معقدًا بحسب الحاجة لتهيئة الحاوية على شبكتك ونظام المضيف، ولكن سيكون ملف الضبط في مثالنا التالي بسيطًا. أنشئ ملفًا باستخدام أي محرر نصوص تفضّله، وعرّف اسمًا للحاوية واكتب إعدادات الشبكة:

lxc.utsname = opensourcedotcom
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.hwaddr = 4a:49:43:49:79:bd
lxc.network.ipv4 = 192.168.168.1/24
lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596

احفظ هذا الملف في المسار الرئيسي Home باسم mycontainer.conf، وتكون تسمية lxc.utsname اختياريّة، إذ يمكنك تسمية الحاوية كما شئت، وستستخدم هذا الاسم لتشغيل وإيقاف الحاوية.

يُضبط نوع الشبكة إلى veth، وهو نوع من كابلات الإيثرنت Ethernet الافتراضية؛ إذ يتمحور مبدأ عملها في إرسال الاتصال من نوع veth من الحاوية إلى جهاز جسر الشبكة، المُعرّف بخاصية lxc.network.link، وبقيمة br0. يقع عنوان بروتوكول الإنترنت الخاص بالحاوية في شبكة جهاز التجسير نفسها، ولكنّه مختلف لتفادي أي تعارض.

جميع القيم متغيّرة ويمكن تعديلها حسب الحاجة، باستثناء نوع الشبكة veth وراية الشبكة up. ويمكن استعراض لائحة الخصائص عن طريق الأمر man lxc.container.conf؛ وإذا كان الأمر مفقودًا من نظامك، تفقّد مدير الحزم للحصول على حزم توثيق LXC منفصلة. هناك كثيرٌ من الأمثلة التي يمكنك مطالعتها لاحقًا على هيئة ملفات ضبط ضمن المسار usr/share/doc/lxc/examples.

تشغيل صدفة الحاوية

أنجزنا أكثر من نصف العمل اللازم لإنشاء حاوية؛ فقد أنشأنا بنية الشبكة التحتية، وثبتنا شريحة الاتصال الافتراضية على حاسوبنا الافتراضي؛ وبقي الآن تثبيت نظام التشغيل الخاص بالحاوية. ولكن يمكنك رؤية حاوية LXC تعمل بتشغيل الصدفة Shell ضمن مساحة الحاوية دون تثبيت نظام التشغيل، من خلال الأمر التالي:

 \ sudo lxc-execute --name basic $
\ rcfile ~/mycontainer.conf /bin/bash--
logfile mycontainer.log--
#

في هذه المرحلة من بناء الحاوية، ألقِ نظرةً على إعدادات الشبكة، إذ ستكون مشابهةً لتلك الموجودة في الأسفل ولكن بقيم فريدة:

/usr/sbin/ip addr show #
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state [...]
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
[...]
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> [...] qlen 1000
link/ether 4a:49:43:49:79:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.168.167/24 brd 192.168.168.255 scope global eth0
    valid_lft forever preferred_lft forever
inet6 2003:db8:1:0:214:1234:fe0b:3596/64 scope global
    valid_lft forever preferred_lft forever
[...]

تميِّز الحاوية بنية الشبكة المزيفة، ونواة النظام المستخدمة:

uname -av #
Linux opensourcedotcom 4.18.13-100.fc27.x86_64 #1 SMP Wed Oct 10 18:34:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

استخدم الأمر exit لمغادرة الحاوية:

exit #

تثبيت نظام تشغيل الحاوية

تُعَد عملية بناء بيئة مُحتواة كاملة من البداية معقدةً أكثر موازنةً بمرحلة تهيئة الشبكة الافتراضية وضبطها، لذا يمكننا استخدام قوالب حاويات جاهزة من LXC. وإذا لم يحتو جهازك على أيّ قالب، فألقِ نظرةً على حزمة قوالب LXC الموجودة ضمن مستودع برمجيّتك. ويكون المسار الافتراضي لقوالب LXC هو usr/share/lxc/templates.

ls -m /usr/share/lxc/templates/ $
lxc-alpine, lxc-altlinux, lxc-archlinux, lxc-busybox, lxc-centos, lxc-cirros, lxc-debian, lxc-download, lxc-fedora, lxc-gentoo, lxc-openmandriva, lxc-opensuse, lxc-oracle, lxc-plamo, lxc-slackware, lxc-sparclinux, lxc-sshd, lxc-ubuntu, lxc-ubuntu-cloud

اختر قالبك المفضل، وأنشئ الحاوية. استخدمنا في مثالنا هذا قالب Slackware.

sudo lxc-create --name slackware --template slackware $

ستعلّمك مشاهدة عملية تنفيذ القالب عن كثب الكثير عن كيفية عمل القوالب، وكأنّك تبني قالبًا من الصفر بيديك؛ إذ تُوصَف عملية التنفيذ بأنها واضحة ومسهبة، وتستطيع ملاحظة أن lxc-createيضبط جذر Root الحاوية للمسار var/lib/lxc/slackware/rootfs، كما يمكن تحميل وتثبيت كثيرٍ من الحزم في هذا المسار أيضًا.

تمنحك قراءة ملفات القالب فهمًا أكبر لكيفية عمل شجرة الأجهزة الدنيا minimal device tree وملفات تخزين البيانات المؤقتة Spool الشائعة وملف جدول الأنظمة fstab وملفات init وغيرها، كما تمنع القوالب بعض الخدمات التي لا تحتوي على فائدة مرجوّة في الحاويات من العمل، مثل udev للتعرُّف على العتاد الصلب. ونظرًا لاحتواء القوالب على عددٍ كبيرٍ من إعدادات لينكس التقليدية، فمن الأفضل بناء القالب مع التقيُّد بقالبٍ مشابه للقالب الذي تبنيه (إذا أردت بناء قالبٍ من الصفر)، وذلك تجنّبًا للأخطاء والعثرات التي قد تحدث، مثل بعض الأخطاء التي كُشف عنها وعولجت من قِبل مشروع LXC.

بعد تهيئة بيئة نظام التشغيل الأساسيّة، تستطيع بدء الحاوية من خلال الأمر التالي:

 \ sudo lxc-start --name slackware $
rcfile ~/mycontainer.conf--

بكتابتك للأمر السابق، تكون قد بدأت تشغيل الحاوية، ولكنك لم تربطها بعد؛ فبعكس المثال السابق، أنت لا تتعامل مع الحاوية في سطر الأوامر Shell، وإنما تتعامل مع نظام تشغيل محتوى، لهذا اربط الحاوية بالاسم، عن طريق الأمر:

 sudo lxc-attach --name slackware $
#

تأكد أن عنوان بروتوكول الإنترنت التابع للحاوية وعنوان بروتوكول الإنترنت في ملف الضبط Config متماثلان، عن طريق:

usr/sbin/ip addr SHOW | grep eth/ # 
34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 [...] 1000
link/ether 4a:49:43:49:79:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.168.167/24 brd 192.168.168.255 scope global eth0

اُخرُج من الحاوية، وأغلقها عن طريق:

exit #
sudo lxc-stop slackware $

استخدام حاويات LXC في التطبيقات الواقعية

يسهّل لنا مشروع LXC عملية إنشاء وتشغيل حاوية آمنة. تطورت الحاويات كثيرًا منذ ظهورها أول مرة بواسطة LXC في عام 2008، وننصحك بالاستفادة من خبرات مطوّريها لمصلحتك.

على الرغم من وضوح توجيهات دليل LXC، إلّا أن هدفنا في هذا الدليل هو توفير فهمٍ أعمق لما يحصل خلال تنفيذ هذه الأوامر خلف الكواليس.

ترجمة -وبتصرف- للمقال Behind the scenes with Linux containers لصاحبه Seth Kenlon

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...