Podman (Pod Manager) เป็น container engine แบบ daemonless ตรงข้ามกับ Docker ที่ต้องการ daemon (dockerd) รันเป็น root Podman รันได้แบบ rootless → สูงกว่า, เบากว่า, เข้ากันได้กับ Docker CLI/Images
Container คืออะไร?
Virtualization ระดับ OS: แยก process, network, filesystem, users แต่ง kernel เดียวกัน เบากว่า VM มาก เริ่มในวินาที
Podman vs Docker
| คุณสมบัติ | Docker | Podman |
|---|---|---|
| Architecture | Client-Server (daemon) | Daemonless (fork/exec) |
| Root required | ใช่ (ปกติ) | ไม่ (rootless mode) |
| Security | Root escape risk | Rootless = user namespace isolation |
| CLI Compatibility | มาตรฐาน | เกือบเหมือน Docker (alias docker=podman) |
| Pods | Docker Compose/Swarm | Built-in Pod concept (คล้าย Kubernetes) |
ติดตั้ง Podman
# Ubuntu/Debian sudo apt install podman # Fedora/RHEL/CentOS/AlmaLinux sudo dnf install podman # Arch/Manjaro sudo pacman -S podman # openSUSE sudo zypper install podman
ใช้งานพื้นฐาน
รัน Container (Apache httpd ตัวอย่าง):
podman run -dt -p 8080:8080/tcp \ -e HTTPD_VAR_RUN=/run/httpd \ -e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \ -e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \ -e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \ registry.fedoraproject.org/f29/httpd /usr/bin/run-httpd
ดู Container ที่รันอยู่:
podman ps
ทดสอบเว็บเซิร์ฟเวอร์:
curl https://localhost:8080
จัดการ Images
# ค้นหา image podman search ubuntu # ดึง image (แนะนำระบุ full registry path) podman pull docker.io/library/ubuntu:22.04 # ดู images local podman images # ลบ image podman rmi ubuntu:22.04
ควบคุม Container
# หยุด container ล่าสุด podman stop -l # หยุดทั้งหมด podman stop -a # ลบ container podman rm container_id # ดู logs podman logs container_id # เข้า shell ใน container podman exec -it container_id /bin/bash
Rootless Containers (ความปลอดภัยสูง)
Podman สร้าง user namespace เอง UID/GID ใน container map ไป user จริง หาก attacker escape ออกมาได้แค่ user ธรรมดา ไม่ใช่ root
ตั้งค่า (ปกติ distro สมัยใหม่ตั้งให้แล้ว):
# /etc/subuid, /etc/subgid ต้องมี entry สำหรับ user # ตัวอย่าง: user:100000:65536 # เปิดใช้งาน linger (รัน container ได้ตอนไม่ login) loginctl enable-linger $USER
Pods (คล้าย Kubernetes Pod)
กลุ่ม container ที่ share network, IPC, cgroups:
# สร้าง pod podman pod create --name mypod -p 8080:80 # รัน container ใน pod podman run -dt --pod mypod nginx podman run -dt --pod mypod redis
Alias Docker → Podman
echo 'alias docker=podman' >> ~/.bashrc source ~/.bashrc
คำสั่ง docker ทั้งหมดจะรันผ่าน podman แทน
สรุป
Podman = Docker-compatible, daemonless, rootless, pod-native เหมาะสำหรับ developer, CI/CD, production ที่เน้น security ลองเล่นดูได้เลยด้วย podman run -it ubuntu bash