- 1 1. المقدمة
- 2 2. ما هو Podman؟
- 3 3. كيفية تثبيت Podman على Ubuntu
- 4 4. أساسيات Dockerfile واستخدامه مع Podman
- 5 5. عمليًا: إنشاء حاوية مبنية على Ubuntu
- 6 6. ميزات ونصائح مفيدة في Podman
- 7 7. دليل الانتقال من Docker إلى Podman
- 8 8. الأسئلة الشائعة (FAQ)
- 8.1 س1. ما الفروق الرئيسية بين Podman وDocker؟
- 8.2 س2. ما الفرق بين Dockerfile وContainerfile؟
- 8.3 س3. هل يمكن استخدام Docker Compose مع Podman؟
- 8.4 س4. هل يعمل Podman بثبات على Ubuntu؟
- 8.5 س5. هل هناك قيود على الوصول للحاوية في وضع rootless؟
- 8.6 س6. هل يمكن لـPodman سحب نفس صور Docker Hub؟
- 8.7 س7. هل يمكن استخدام Podman في بيئات الإنتاج؟
- 9 روابط مرجعية
1. المقدمة
تطور تقنية الحاويات وخلفية الاهتمام بها
في السنوات الأخيرة، ازدادت أهمية تقنية الحاويات بسرعة في مجال تطوير وتشغيل التطبيقات. خاصة أن توحيد بيئة التطوير وبيئة الإنتاج يحقق إمكانية إعادة إنتاج الأداء، مما يجذب دعم العديد من المهندسين.
ومن بين تقنيات الحاويات، تعد Docker الأشهر، لكن في السنوات الأخيرة برزت Podman (بودمان) كخيار بديل. يوفر Podman واجهة أوامر (CLI) مشابهة جدًا لـ Docker، بالإضافة إلى ميزات تشغيل بدون خادم (Daemonless) وإمكانية التشغيل بدون صلاحيات الجذر (Rootless).
لماذا “Podman + Dockerfile + Ubuntu”؟
في هذا المقال، سنشرح كيفية الجمع بين Podman وDockerfile وUbuntu لإدارة الحاويات الحديثة على بيئة لينكس.
- Ubuntu هو أحد أشهر توزيعات لينكس، يُستخدم من المبتدئين حتى المحترفين،
- Dockerfile يعتبر بمثابة مخطط لبناء صورة الحاوية،
- أما Podman فهو أداة من الجيل الجديد لإدارة هذه الحاويات بشكل أكثر مرونة وأمانًا.
وبشكل خاص، مع تزايد الوعي الأمني، أصبح استخدام Podman على Ubuntu مع الاستفادة من Dockerfile نهجًا متبعًا بين المطورين والشركات.
هدف المقال والجمهور المستهدف
هدف هذا المقال هو شرح خطوة بخطوة كيفية استخدام Podman على Ubuntu لبناء Dockerfile وإنشاء حاويات عملية.
الفئة المستهدفة تشمل:
- من لديهم خبرة في Docker ويرغبون في تجربة Podman
- مستخدمي Ubuntu الذين يريدون إدارة الحاويات في بيئة آمنة
- المهندسين الذين يرغبون في دمج تقنيات الحاويات في أعمالهم
- المبتدئين الذين يريدون تعلم كتابة Dockerfile والبناء باستخدام Podman
يغطي المقال من الاستخدامات الأساسية إلى نصائح لتجنب المشاكل، بالإضافة إلى توضيح الفروقات وطريقة الانتقال من Docker إلى Podman.
2. ما هو Podman؟
نظرة عامة على Podman
Podman (مدير الحاويات) هو أداة لإدارة الحاويات تم تطويرها من قبل مجتمع تقوده Red Hat. مثل Docker، يدعم Podman بناء وتشغيل وإدارة الحاويات المتوافقة مع OCI (مبادرة الحاويات المفتوحة)، لكنه يتميز بفلسفة وتصميم مختلفين.
الميزة الأكبر لـPodman أنه لا يحتاج إلى Daemon. وهذا يسمح بتشغيل خفيف وآمن. كما يدعم وضع التشغيل بدون جذر (rootless)، بحيث يمكن للمستخدمين العاديين إدارة الحاويات دون رفع الصلاحيات. توافق CLI عالي جدًا، والأوامر الأساسية متشابهة جدًا مع Docker.
الميزات الرئيسية لـPodman
فيما يلي بعض الميزات البارزة لـPodman:
تشغيل بدون خادم (Daemonless)
لا يعتمد Podman على عملية خادمة (Daemon) لإدارة الحاويات، مما يتيح بيئة تشغيل فعالة من حيث استهلاك الموارد دون عمليات خلفية غير ضرورية.
دعم التشغيل بدون صلاحيات الجذر (Rootless)
يمكن للمستخدمين العاديين تشغيل وإدارة الحاويات باستخدام Podman، ما يوفر بيئة آمنة بشكل خاص في بيئات الخوادم أو الأنظمة متعددة المستخدمين ويقلل المخاطر الأمنية بشكل كبير.
واجهة أوامر متوافقة مع Docker
يعتمد Podman على نفس بنية أوامر Docker تقريبًا. على سبيل المثال، تعمل الأوامر التالية بشكل مشابه تمامًا:
podman build -t myimage .
podman run -it myimage bash
لذلك، من لديهم خبرة مع Docker يمكنهم الانتقال بسهولة.
دعم مفهوم “Pod”
يعتمد مفهوم “Pod” من Kubernetes، ما يسمح بإدارة عدة حاويات كوحدة منطقية واحدة. بذلك، يزداد التوافق مع Kubernetes، ويمكن الانتقال بسلاسة من بيئة التطوير المحلية إلى بيئة السحابة.
التوافق مع Ubuntu
بينما يعتمد Podman بشكل أساسي في Fedora وRHEL، فهو يعمل بثبات أيضًا على Ubuntu. يمكن تثبيته من المستودعات الرسمية، والإعداد سهل نسبيًا. وخاصة في Ubuntu 20.04 LTS وما بعدها، أصبحت الحزم محدثة وسهل التثبيت.
3. كيفية تثبيت Podman على Ubuntu
قبل البدء: أشياء يجب التأكد منها قبل التثبيت
قبل تثبيت Podman على Ubuntu، تحقق أولاً من إصدار Ubuntu المستخدم. يوصى باستخدام Podman على Ubuntu 20.04 LTS أو أحدث. في الإصدارات القديمة قد لا تتوفر الحزم اللازمة في المستودعات الرسمية.
يمكنك التحقق من إصدار Ubuntu باستخدام الأمر التالي:
lsb_release -a
تحتاج أيضًا إلى صلاحية sudo
لتثبيت Podman. حتى لو كنت ستستخدم وضع rootless، تحتاج لحقوق المسؤول أثناء التثبيت.
خطوات تثبيت Podman (من مستودع Ubuntu الرسمي)
في Ubuntu 20.04 أو 22.04 وما بعدها، يمكن تثبيت Podman بسهولة باستخدام APT:
sudo apt update
sudo apt install -y podman
بعد التثبيت، تحقق من نجاح التثبيت من خلال:
podman --version
كيفية استخدام أحدث إصدار (إضافة PPA الرسمي)
عادةً ما يكون إصدار Podman في مستودع Ubuntu أقدم قليلاً. إذا كنت تريد أحدث الميزات، يمكنك استخدام PPA الرسمي (Personal Package Archive):
. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt update
sudo apt install -y podman
بهذه الطريقة، يمكنك استخدام أحدث إصدار من Podman مثل المستخدمين على Red Hat أو Fedora.
اختبار التشغيل الأساسي لـPodman
بعد التثبيت، اختبر التشغيل بالأوامر التالية:
podman info
يعرض هذا الأمر إصدار Podman والإعدادات والميزات المدعومة مثل rootless.
كما يمكنك جلب حاوية Alpine Linux الرسمية وتجربة تشغيلها:
podman run --rm -it alpine sh
إذا عملت القشرة بنجاح، فإن Podman يعمل بشكل سليم.
4. أساسيات Dockerfile واستخدامه مع Podman
ما هو Dockerfile؟
Dockerfile هو ملف نصي يُستخدم كمخطط لبناء صورة الحاوية. يصف أي صورة أساسية سيتم استخدامها، وما الحزم التي سيتم تثبيتها، وما الملفات التي ستُنسخ، وغيرها من التعليمات بشكل مرتب.
تعتمد أدوات الحاويات مثل Podman أو Docker على Dockerfile لإنشاء بيئة موحدة تلقائيًا.
أمثلة لأوامر شائعة في Dockerfile:
FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]
بهذا، يتم تثبيت الحزم الضرورية ووضع السكريبت وتحديد أمر التشغيل الافتراضي.
كيفية استخدام Dockerfile مع Podman
يمكنك بناء صور الحاوية باستخدام Podman تمامًا مثل Docker باستخدام Dockerfile.
1. تجهيز الدليل
جهز الملفات كما يلي:
project/
├── Dockerfile
└── app.sh
وليكن app.sh
كالتالي:
#!/bin/bash
echo "Hello from Podman container!"
ثم أعطِ الملف صلاحية التنفيذ:
chmod +x app.sh
2. البناء باستخدام Podman
من نفس الدليل الذي يحوي Dockerfile:
podman build -t mypodmanapp .
سيتم إنشاء صورة باسم mypodmanapp
.
3. التحقق من الصور
لعرض الصور:
podman images
4. تشغيل الحاوية
لتشغيل الحاوية التي بنيتها:
podman run --rm mypodmanapp
إذا تم الإعداد بشكل صحيح، سترى المخرجات: Hello from Podman container!
الفرق بين Dockerfile وContainerfile
يمكن تسمية ملف التعليمات بـContainerfile بدلاً من Dockerfile. والهدف اعتماد اسم غير متعلق بـDocker فقط، ولكن لا يوجد فرق وظيفي بينهما. يمكن لـPodman قراءة أي اسم باستخدام خيار -f
:
podman build -f Containerfile -t myimage .
5. عمليًا: إنشاء حاوية مبنية على Ubuntu
كتابة Dockerfile يعتمد على Ubuntu
الآن، سنشرح خطوة بخطوة كيفية كتابة Dockerfile يعتمد على Ubuntu وبناء صورة الحاوية وتشغيلها باستخدام Podman.
ابدأ بكتابة Dockerfile
بسيط كالتالي:
FROM ubuntu:22.04
RUN apt update && apt install -y curl && apt clean
COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh
CMD ["/usr/local/bin/hello.sh"]
يفعل هذا Dockerfile ما يلي:
- يستخدم صورة Ubuntu 22.04 الرسمية
- يثبت حزمة
curl
- ينسخ
hello.sh
من الجهاز المضيف إلى الحاوية - يحدد
hello.sh
كأمر التشغيل الافتراضي
ثم أنشئ سكريبت hello.sh
بسيط:
#!/bin/bash
echo "مرحبًا، هذه رسالة من داخل حاوية Podman!"
ثم أعطه صلاحية التنفيذ:
chmod +x hello.sh
خطوات البناء باستخدام Podman
بعد تجهيز الملفات، نفذ الأمر التالي للبناء:
podman build -t ubuntu-hello .
حيث -t ubuntu-hello
لتسمية الصورة.
لعرض الصور:
podman images
تشغيل الصورة والتحقق
لتشغيل الحاوية:
podman run --rm ubuntu-hello
مثال المخرجات:
مرحبًا، هذه رسالة من داخل حاوية Podman!
الخيار --rm
يحذف الحاوية بعد التشغيل تلقائيًا.
تشغيل تفاعلي للحاوية
لتشغيل الحاوية بشكل تفاعلي والدخول إلى Bash:
podman run -it ubuntu-hello bash
يمكنك بذلك استخدام بيئة تطوير مبنية على Ubuntu.
6. ميزات ونصائح مفيدة في Podman
نقاط قوة Podman: المرونة والأمان
Podman يوفر ميزات أكثر مرونة وأمانًا مع الحفاظ على التوافق مع Docker. إليك بعض الميزات العملية والنصائح المفيدة:
تشغيل آمن بوضع rootless
من أهم ميزات Podman هي وضع rootless، حيث يمكن للمستخدمين العاديين تشغيل وإدارة الحاويات دون صلاحيات مسؤول.
مثلًا، يمكنك استخدام Podman بدون sudo:
podman run -it ubuntu bash
يتم تقييد التشغيل داخل مجلد المستخدم، مما يقلل من التأثير على النظام.
التكامل مع systemd للتشغيل التلقائي
Podman يتكامل بشكل أصلي مع systemd، بحيث يمكنك تشغيل الحاويات كخدمات نظام:
مثلًا، يمكنك توليد ملفات خدمة systemd من حاوية Podman:
podman generate systemd --name mycontainer --files --restart-policy=always
سيتم إنشاء ملف في ~/.config/systemd/user/
. لتفعيل الخدمة:
systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service
وبذلك، تُعاد الحاويات تلقائيًا بعد إعادة تشغيل الخادم.
إدارة عدة حاويات مع podman-compose
بالإضافة لتشغيل حاوية واحدة، يمكنك إدارة عدة حاويات بسهولة باستخدام podman-compose، الذي يعمل بشكل مشابه لـ Docker Compose.
تثبيته باستخدام pip:
pip install podman-compose
تستطيع استخدام نفس ملفات docker-compose.yml
تقريبًا.
لتشغيل التكوين:
podman-compose up -d
وبذلك تستفيد من إعادة بناء بيئة التطوير بسرعة.
أوامر ونصائح إضافية
تنظيف الصور والحاويات غير المستخدمة
podman system prune -a
لحذف الصور والملفات المؤقتة غير المستخدمة.
إعداد الإكمال التلقائي للأوامر (bash/zsh)
يمكنك تثبيت سكريبت الإكمال التلقائي لـPodman:
sudo apt install podman-docker
سيتيح لك ذلك استخدام الإكمال التلقائي مع أوامر podman كما في docker.
7. دليل الانتقال من Docker إلى Podman
لماذا تزداد أهمية الانتقال إلى Podman؟
كان Docker هو الاسم الرئيسي في تقنيات الحاويات لفترة طويلة، لكن اتجهت العديد من المؤسسات لاستخدام Podman لخفته وأمانه. خاصة في Red Hat Enterprise Linux (RHEL) وFedora، حيث أصبح Podman الخيار الافتراضي.
تتناول هذه الفقرة كيفية الانتقال من Docker إلى Podman بسهولة والنقاط المهمة.
توافق أوامر Docker وPodman
تدعم Podman معظم أوامر Docker كما هي:
Docker | Podman |
---|---|
docker build -t myapp . | podman build -t myapp . |
docker run -it myapp | podman run -it myapp |
docker images | podman images |
docker ps | podman ps |
وبذلك يمكنك الانتقال دون تغيير طريقة العمل.
كيفية جعل Podman متوافقًا تمامًا مع أوامر Docker (podman-docker)
إذا كان لديك سكريبتات أو أنظمة CI/CD تعتمد على أوامر “docker”، يمكنك تثبيت podman-docker
لجعل Podman يتصرف كبديل مباشر:
sudo apt install podman-docker
سيتم ربط الأمر docker
بـpodman
تلقائيًا:
which docker
# → /usr/bin/docker → podman (رابط رمزي)
وهكذا تعمل سكريبتات Docker دون تعديل.
بديل docker-compose: استخدام podman-compose
لمشاريع متعددة الحاويات، استخدم podman-compose
بدلًا من Docker Compose.
رغم أن التوافق مرتفع، هناك بعض الفروق (مثلاً depends_on
وبعض خصائص healthcheck قد تختلف)، لكن معظم التكوينات البسيطة ستعمل بسلاسة.
نقل الصور والحجوم
صور Docker المحلية لا تظهر في Podman افتراضيًا. يجب سحب الصور أو تصديرها ثم استيرادها.
الخيار 1: سحب الصورة من جديد عبر Podman
podman pull ubuntu:22.04
الخيار 2: تصدير من Docker ثم استيراد في Podman
# تصدير الصورة من Docker
docker save myimage > myimage.tar
# استيراد في Podman
podman load < myimage.tar
وهكذا يمكنك استخدام صور Docker مع Podman.
نقاط أخرى يجب الانتباه لها
- اختلاف دعم rootless: Docker يفترض العمل كجذر، بينما Podman يدعم التشغيل بدون صلاحيات الجذر افتراضيًا
- اختلاف بنية التشغيل الخلفية: Podman بدون Daemon، في حين أن Docker يعتمد على Daemon
- مواقع التخزين والسجلات قد تختلف، لذا تأكد من إعداداتك عند الانتقال
8. الأسئلة الشائعة (FAQ)
س1. ما الفروق الرئيسية بين Podman وDocker؟
ج1. أهم فرق هو أن Podman يعمل بدون Daemon (بدون عملية دائمة)، ما يجعله أخف وأكثر أمانًا. كما يدعم وضع rootless للمستخدمين العاديين، وتوافق أوامره مع Docker مرتفع جدًا.
س2. ما الفرق بين Dockerfile وContainerfile؟
ج2. لا يوجد فرق وظيفي إطلاقًا. كلاهما ملف تعليمات لبناء الحاوية بنفس البنية. تم تفضيل اسم Containerfile لمزيد من الحياد، لكن يمكنك استخدام أي اسم في الممارسة العملية.
س3. هل يمكن استخدام Docker Compose مع Podman؟
ج3. ليس مدعومًا بشكل مباشر، لكن يمكنك استخدام podman-compose
، وهي أداة Python تقرأ ملفات docker-compose.yml
. لكن بعض الخيارات مثل depends_on
قد لا تعمل كما في Docker، لذا تحقق جيدًا إذا كان التكوين معقدًا.
س4. هل يعمل Podman بثبات على Ubuntu؟
ج4. نعم، ابتداءً من Ubuntu 20.04 LTS يعمل Podman بثبات، ويمكن تثبيته مباشرة من المستودع. إذا كنت بحاجة إلى نسخة أحدث، استخدم الـPPA الرسمي.
س5. هل هناك قيود على الوصول للحاوية في وضع rootless؟
ج5. في وضع rootless، بعض العمليات الخاصة (مثل استخدام منافذ أقل من 1024) غير متاحة. لكن يمكنك تخطي ذلك باستخدام إعادة توجيه المنافذ، وغالبية الحالات العملية لا تتأثر.
س6. هل يمكن لـPodman سحب نفس صور Docker Hub؟
ج6. نعم، Podman يمكنه سحب الصور من Docker Hub مباشرة. أحيانًا يجب تحديد اسم المستودع بالكامل مثل docker.io/library/ubuntu
:
podman pull docker.io/library/ubuntu
كما يدعم Podman مستودعات أخرى مثل Quay.io وGitHub Container Registry.
س7. هل يمكن استخدام Podman في بيئات الإنتاج؟
ج7. نعم، يوفر Podman دعمًا لمفهوم Pod المتوافق مع Kubernetes، ويعمل مع systemd، وله سجل من الاستخدام في الإنتاج خاصة في الأنظمة ذات المتطلبات الأمنية العالية.
Red Hat Enterprise Linux وFedora يستخدمان Podman كخيار افتراضي في الإنتاج.