پرش به محتوا

کانتینر بدون root با Podman و Quadlet

Podman ابزار پیش‌فرض کانتینر در خانواده‌ی RHEL است. یک کانتینر را با کاربر عادی اجرا کنید و با Quadlet به سرویس systemd تبدیلش کنید.

AlmaLinux 9سطح: متوسطبرای: Rocky Linux 10، AlmaLinux 10، CentOS Stream 10، Rocky Linux 9، AlmaLinux 9به‌روزرسانی: ۱۶ آبان ۱۴۰۵

Podman با دستورهای Docker سازگار است، ولی daemon ندارد و می‌تواند کانتینر را بدون root اجرا کند. Quadlet روش رسمی تعریف کانتینر به‌صورت سرویس systemd است.

۱. نصب

bash
sudo dnf install -y podman
podman --version

۲. کاربر سرویس و ماندگاری

bash
sudo useradd -m webapp
sudo loginctl enable-linger webapp
sudo machinectl shell webapp@     # ورود به نشست کامل این کاربر

enable-linger باعث می‌شود سرویس‌های این کاربر بدون ورود او و پس از بوت هم اجرا شوند.

۳. فایل Quadlet

داخل نشست کاربر webapp:

bash
mkdir -p ~/.config/containers/systemd
nano ~/.config/containers/systemd/whoami.container
ini
[Unit]
Description=whoami demo container

[Container]
Image=docker.io/traefik/whoami:v1.10
PublishPort=127.0.0.1:8081:80
AutoUpdate=registry

[Service]
Restart=on-failure

[Install]
WantedBy=default.target

۴. اجرا

bash
systemctl --user daemon-reload
systemctl --user start whoami
systemctl --user status whoami --no-pager
curl -s http://127.0.0.1:8081

Quadlet از روی فایل .container یک سرویس عادی systemd می‌سازد؛ لاگ‌ها با journalctl --user -u whoami دیده می‌شوند.

۵. به‌روزرسانی خودکار ایمیج

bash
systemctl --user enable --now podman-auto-update.timer

کانتینرهایی که AutoUpdate=registry دارند، روزانه بررسی و در صورت وجود نسخه‌ی جدید، به‌روز می‌شوند.

۶. پورت‌های زیر ۱۰۲۴

کاربر عادی نمی‌تواند پورت 80 را باز کند. راه درست این است که کانتینر روی پورت بالا گوش دهد و Nginx یا HAProxy جلوی آن قرار بگیرد.