پادمن یا داکر :‌ نبرد مدیران کانتینر

پادمن یا داکر :‌ نبرد مدیران کانتینر
podman vs docker : container managers WAR :)

وقتی صحبت از Container ها میشه، معمولاً اسم Docker سریع میاد وسط. ولی یه رقیب جدی و باحال به اسم Podman هست که این روزا خیلیا دارن در موردش حرف میزنن و کم کم داره جای خودشو باز میکنه. حالا سوال اینه: Podman یا Docker؟ اصلاً چرا باید به مهاجرت از Docker به Podman فکر کنیم؟ بیاید با هم یه نگاهی بندازیم ببینیم چرا :)


مزایای Podman نسبت به Docker

1.Rootless و Daemonless بودن

یکی از خفن ترین ویژگی های Podman اینه که Rootless کار میکنه. یعنی چی؟ یعنی برای اجرای Container ها نیاز نیست با کاربر root کار کنیم. ولی Docker معمولاً با دسترسی های سطح بالا (root) کار میکنه که این میتونه یه ریسک امنیتی بزرگ باشه. حالا اگه یه Container یا Image مشکل امنیتی داشته باشه یا خراب بشه، تو Docker ممکنه این مشکل به بیرون از Container هم کشیده بشه و باعث بشه کل سیستم بره رو هوا! ولی تو Podman این کار خیلی سخت تره، چون مکانیزم ایزولیشن (Isolation) تو Podman هوشمندانه تر و قوی تره.

علاوه بر این، Podman Daemonless هست. یعنی لازم نیست یه سرویس دائماً تو پس زمینه سیستم در حال اجرا باشه. ولی تو Docker همیشه یه سرویس (docker daemon) باید اجرا باشه تا Container ها رو مدیریت کنه. نبود این سرویس تو Podman یعنی سطح حمله (Attack Surface) کمتر میشه و در نتیجه احتمال آسیب پذیری هم پایین تر میاد. خلاصه اینکه Podman کمتر پشت سیستم واستاده تا گاف بده!

2.Pod و تعامل سرویس ها

فرض کن میخوای چند تا سرویس رو کنار هم بالا بیاری. مثلاً یه دیتابیس، یه API و یه Queue. اینا با هم در ارتباطن. تو Docker معمولاً docker-compose استفاده میکنی، ولی Podman یه راه خفن داره به اسم Pod! تو Podman میتونی این سرویس ها رو تو یه Pod راه بندازی که دقیقاً شبیه Pod تو Kubernetes هست. یعنی چی؟ یعنی این سرویس ها یه جورایی همسایه دیوار به دیوار میشن و راحت با هم حرف میزنن.

حتی باحال تر اینه که اگه یه روزی بخوای این سرویس ها رو ببری تو Kubernetes، Podman راحت میتونه برات manifest و config بسازه. دیگه دردسر نوشتن yaml از صفر نداری!

3.امنیت بالاتر

با توجه به Rootless و Daemonless بودن، امنیت Podman یه لول بالاتره. این یعنی اگه دنبال یه محیط امن تر هستی و حوصله ماجراهای privilege escalation رو نداری، Podman یه انتخاب منطقیه. مخصوصاً تو محیط های حساس مثل سرورهای Production، این قضیه خیلی مهم میشه.

4.سازگاری با Docker

نگران این نباش که Container هایی که با Docker ساختی تو Podman کار نکنه. تقریباً هر چیزی که با Docker ساختی، تو Podman هم کار میکنه. Podman حتی alias ای داره به اسم docker، که اگه بزنی podman docker، دستورات docker رو هم میتونی بزنی و انگار داری با Docker کار میکنی. خلاصه سوییچ کردن از Docker به Podman اونقدرا هم سخت نیست.
حتی میتونی این حرکت رو هم بزنی :))))))

echo "alias docker=podman" >> .bashrc 

5.استاندارد OCI

ایمیج هایی که برای Container ها ساخته میشن، طبق یه استاندارد جهانی به اسم OCI (Open Container Initiative) هستن. یعنی چی؟ یعنی فرقی نمیکنه شما از Docker استفاده میکنی یا Podman یا یه چیز دیگه. مهم اینه که ایمیج ها استاندارد OCI داشته باشن. پس نگران نباش، یه ایمیج که با Docker build شده، راحت تو Podman هم اجرا میشه و بالعکس.


البته Docker هنوز یسری جاها جلوتره!

نمیخوایم بگیم Docker بده یا باید بندازیمش دور. Docker یه اکوسیستم قوی داره و کلی ابزار، پلاگین و Extension براش ساخته شده. خیلی از تیم ها و شرکت ها هنوز با Docker راحت ترن و Podman بعضی وقتا با همه این ابزارها 100% سازگار نیست. ولی این فاصله داره کمتر میشه و Podman روز به روز داره بهتر میشه.

حالا این سوال پیش میاد که پس چرا مهاجرت به Podman؟

  • امنیت بیشتر (به خاطر Rootless و Daemonless بودن)
  • تعامل بهتر با Kubernetes و ساخت Pod
  • کاهش سطح حمله و آسیب پذیری
  • راحتی در ساخت manifest برای Kubernetes
  • سازگاری با Docker و امکان استفاده از دستورات Docker

خلاصه که اگه دنبال یه جایگزین امن تر و آینده نگر برای Docker هستی، Podman گزینه خیلی خوبیه. شاید الان کامل جای Docker رو نگرفته باشه، ولی سرعت پیشرفتش بالاست و ارزش داره که جدی بهش فکر کنیم.

به نظرتون وقتش نشده یه تستی با Podman بزنیم؟ یه دونه container بالا بیارید ببینید چقدر راحت و امنه!

Podman