
نُشر هذا المقال أصلاً في مجلة Fedora Magazine بقلم يزن المنشد.
في هذا المقال، سنستعرض مفهوم Podman Pods ونوضح كيفية استخدامه عملياً مع تطبيق بسيط مبني باستخدام Node.js. التطبيق سيكون خفيفاً وسهل الإعداد، مما يبرز قوة تشغيل وإدارة حاويات متعددة داخل Pod واحد.
ما هو Podman Pod؟
مجموعة Podman Pod هي عبارة عن تجميعة من الحاويات التي تتشارك نفس شبكة الاتصال (Network)، ووحدات التخزين (Storage)، ومساحة العمليات (Process Namespace). هذا المفهوم مستلهم مباشرة من وحدات الـ Pods في نظام Kubernetes.
تتيح لك الـ Pods تشغيل حاويات متعددة تحتاج إلى العمل والتعاون معاً بشكل وثيق — مثل خادم ويب وخادم تخزين مؤقت (Caching) مثل Redis — كـ وحدة واحدة معزولة.
توفر Podman Pods طريقة أصلية ومدمجة لتجميع الحاويات دون الحاجة إلى تثبيت بنية تحتية كاملة ومعقدة لـ Kubernetes، مما يجعلها مثالية لبيئات التطوير والتطبيقات صغيرة إلى متوسطة الحجم.
تثبيت Podman على Fedora
يأتي Podman مثبتاً بشكل افتراضي في نظام Fedora Linux، ولكن إذا لم يكن مثبتاً على نظامك، يمكنك تثبيته باستخدام الأمر التالي:
$ sudo dnf install podman -y
بالنسبة لمستخدمي Fedora Linux Silverblue، فإن Podman مدمج بالفعل في النظام. للتحقق من التثبيت، يمكنك تشغيل حاوية hello-world:
$ podman pull hello-world
$ podman run hello-world
إذا كانت كل الأمور على ما يرام، سيظهر لك في الطرفية:
Hello from Docker!
وهذا يؤكد أن محرك Podman يعمل وجاهز للخطوات التالية.
البدء بتطبيق Node.js بسيط
سنبدأ بإنشاء تطبيق ويب بسيط باستخدام Node.js. أولاً، أنشئ مجلداً للتطبيق:
$ mkdir webapp && cd webapp
داخل مجلد webapp، أنشئ ملف package.json لتعريف متطلبات المشروع:
{
"dependencies": {
"express": "*"
},
"scripts": {
"start": "node index.js"
}
}
بعد ذلك، أنشئ ملف index.js الذي يقدم استجابة “Hello World”:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send("Hello World!");
});
app.listen(8080, () => {
console.log("Listening on port 8080");
});
إنشاء ملف Dockerfile للتطبيق
الآن، أنشئ ملف باسم Dockerfile في نفس المجلد لبناء صورة الحاوية الخاصة بتطبيقك:
FROM node:alpine
WORKDIR /usr/app
COPY ./ ./
RUN npm install
CMD ["npm", "start"]
يقوم هذا الملف بسحب صورة خفيفة من Node.js، وتثبيت الاعتماديات، ثم تشغيل التطبيق.
بناء صورة الحاوية باستخدام Podman
لبناء صورة الحاوية للتطبيق، نفّذ الأمر التالي:
$ podman build -t webapp .
- الخيار
-tيعطي اسماً للصورة وهوwebapp. - النقطة
.تحدد المجلد الحالي كسياق للبناء.
إنشاء وتشغيل الـ Pod
بعد تجهيز صورة التطبيق، حان وقت إنشاء الـ Pod وتشغيل الحاوية داخله.
أولاً، قم بإنشاء الـ Pod وتوجيه المنفذ 8080:
$ podman pod create --name mypod -p 8080:8080
يقوم هذا الأمر بإنشاء Pod باسم mypod ويربط المنفذ 8080 من النظام المضيف (Host) إلى المنفذ 8080 داخل الـ Pod.
ثانياً، قم بتشغيل حاوية Node.js داخل هذا الـ Pod:
$ podman run -d --pod mypod --name webapp-container webapp
يحدد الخيار --pod mypod أن الحاوية يجب أن تعمل داخل الـ Pod المسمى mypod.
إضافة حاوية أخرى إلى نفس الـ Pod
من أبرز مزايا الـ Pods إمكانية تشغيل حاويات متعددة تشترك في الموارد ونفس مكدس الشبكة. على سبيل المثال، دعنا نضيف حاوية Redis إلى نفس الـ Pod:
$ podman run -d --pod mypod --name redis-container redis
الآن، تعمل كل من حاوية webapp وحاوية redis داخل نفس الـ Pod وتتشاركان نفس فضاء أسماء الشبكة (Network Namespace). هذا يعني أن تطبيق الويب يستطيع التواصل المباشر مع Redis عبر localhost دون الحاجة إلى إعدادات شبكة معقدة أو ربط يدوي للحاويات.
التحقق من حالة الـ Pod والحاويات
يمكنك استعراض حالة الـ Pod والحاويات التابعة له باستخدام الأوامر التالية:
$ podman pod ps
$ podman ps --pod
ستعرض لك هذه الأوامر حالة الـ Pod ومعرف الحاوية المشتركة (Infra Container) وجميع الحاويات التابعة له.
إيقاف وحذف الـ Pod
لإيقاف الـ Pod وجميع الحاويات المشغلة داخله بأمر واحد:
$ podman pod stop mypod
لحذف الـ Pod مع كافة حاوياته:
$ podman pod rm mypod
الخلاصة
تقدم Podman Pods طريقة سهلة وفعالة لتجميع وإدارة الحاويات المترابطة، مما يسهل تشغيل التطبيقات الموزعة أو الخدمات المصغرة محلياً. بفضل دعم Pods المدمج في Podman، يمكنك الاستفادة من مرونة أسلوب Kubernetes دون التعقيد الإضافي لإدارته.

