ทำไมต้องเลือก Podman?
Podman เป็น Container Runtime ที่ออกแบบมาเพื่อ DevOps สมัยใหม่ ไม่จำเป็นต้องมี Daemon และรองรับ Rootless Mode
Rootless Mode
รัน containers ได้โดยไม่ต้องใช้สิทธิ์ root ปลอดภัยกว่า Docker มาก เพราะไม่ต้องรัน daemon ด้วย root
No Daemon Required
ไม่มี containerd daemon ที่ต้องรันตลอดเวลา ลด memory footprint และ complexity ของระบบ
Startup Speed
Podman มี startup time เร็วกว่า Docker มาก เหมาะสำหรับ CI/CD และ development workflow
Podman vs Docker
เปรียบเทียบ Container Runtimes สำหรับ Development
| Feature | Podman | Docker |
|---|---|---|
| Root Required | No | Yes |
| Daemon Process | No | Yes |
| CLI Compatibility | 100% | N/A |
| Systemd Integration | Built-in | No |
| Memory Usage | Lower | Higher |
| Rootless Default | Yes | No |
ติดตั้ง Podman
คำสั่งติดตั้งสำหรับ Ubuntu/Debian และ macOS
Ubuntu / Debian / Linux
sudo apt update && sudo apt install -y podman
Note: Podman อาจไม่มีใน repository บาง distro ให้ใช้ command:
curl -L -o /tmp/podman.tgz https://github.com/containers/podman/releases/latest/download/podman-remote-linux-amd64.tar.gz && sudo tar -xvf /tmp/podman.tgz -C /usr/local
macOS
brew install podman
Note: macOS ไม่รองรับ rootless mode โดยธรรมชาติ ต้องใช้ VM หรือ Docker Desktop for Mac
ตรวจสอบการติดตั้ง
podman --version
ผลลัพธ์ที่คาดหวัง:
Podman version 4.x.x
ใช้งานแบบ Docker CLI Compatible
Podman มี CLI ที่ identical กับ Docker ทำให้ migration หรือ alias ได้ง่ายมาก
สร้าง Alias ระหว่าง Docker และ Podman
เพิ่มบรรทัดนี้ใน ~/.bashrc, ~/.zshrc หรือ ~/.profile:
alias docker=podman
ประโยชน์: เมื่อตั้ง alias แล้ว คำสั่งใดๆ ที่ใช้ docker จะทำงานกับ podman ได้เลย
docker run -it alpine
→ podman run -it alpine
docker ps -a
→ podman ps -a
คำสั่งที่ใช้บ่อย (Docker → Podman)
| Docker Command | Podman Equivalent | Description |
|---|---|---|
| docker run | podman run | Run a command in a new container |
| docker build | podman build | Build an image from a Dockerfile |
| docker pull | podman pull | Pull an image from a registry |
| docker push | podman push | Push an image to a registry |
| docker ps | podman ps | List containers |
| docker images | podman images | List images |
| docker stop | podman stop | Stop a container |
| docker rm | podman rm | Remove a container |
| docker rmi | podman rmi | Remove an image |
| docker-compose | podman-compose | Orchestrate containers |
ตัวอย่างการใช้งาน
รัน Container
docker run --rm -it alpine sh
--rm = auto-remove, -it = interactive terminal
ดู Container
docker ps -a
ดู container ทั้งหมด (รวม stopped)
Build Image
docker build -t myapp:latest .
Build จาก Dockerfile ใน current directory
Inspect Container
docker inspect container_id
ดู metadata และ configuration ของ container
Buildah & Skopeo - Podman Ecosystem
Podman มี companion tools ที่ออกแบบมาสำหรับ specific use cases
Buildah
Buildah ถูกออกแบบมาเพื่อ build container images โดยไม่ต้องรัน daemon
เหมาะสำหรับ CI/CD pipeline เพราะมีความปลอดภัยสูงและทำงานด้วย user permissions
Buildah Commands
buildah from docker.io/alpine
buildah run alpine-working-container -- apk add nginx
buildah commit alpine-working-container my-nginx
Skopeo
Skopeo ถูกออกแบบมาสำหรับ copy, inspect, etag, delete container images
โดยไม่ต้อง pull/push หรือ extract images ทั้งหมด
Skopeo Commands
skopeo inspect docker://docker.io/library/alpine
skopeo copy docker://docker.io/library/nginx docker://myregistry.io/nginx
skopeo delete docker://myregistry.io/image:old-tag
Performance Comparison
เปรียบเทียบ hiệu suấtระหว่าง Podman และ Docker
Startup Time
เวลาที่ใช้ในการเริ่มต้น container runtime
Podman
~300ms
startup แบบ rootless
Docker
~500ms
startup พร้อม daemon
Result: Podman เร็วกว่า ~40% สำหรับ rootless containers
Memory Footprint
หน่วยความจำที่ใช้เมื่อไม่มี container ทำงาน
Podman
~50MB
memory footprint
Docker
~150MB
with containerd daemon
Result: Podman ใช้ memory น้อยกว่า ~67% (ไม่มี daemon)
CI/CD Pipeline ตัวอย่าง
ใช้ Podman แทน Docker ใน CI/CD pipeline
stages:
- build
- test
- push
variables:
IMAGE_TAG: "myapp:$CI_COMMIT_SHA"
build:
stage: build
image: quay.io/podman/stable
script:
- podman build -t $IMAGE_TAG .
- podman save $IMAGE_TAG -o image.tar
test:
stage: test
image: quay.io/podman/stable
script:
- podman load -i image.tar
- podman run --rm $IMAGE_TAG npm test
push:
stage: push
image: quay.io/podman/stable
script:
- podman load -i image.tar
- podman push $IMAGE_TAG docker://registry.example.com/myapp:$CI_COMMIT_SHA
only:
- main
quay.io/podman/stable image สำหรับ CI/CD pipeline
FAQ & Troubleshooting
คำถามที่พบบ่อย
Podman กับ Docker ต่างกันที่อะไร?
Podman ไม่มี daemon process ทำงานด้วย rootless mode โดย default และมี startup time เร็วกว่า Docker มาก แต่ Docker มี ecosystem และ documentation ที่กว้างกว่า
Podman รองรับ Docker Compose ไหม?
Podman 3.x มี integration กับ podman-compose ซึ่งเป็น Docker Compose CLI แบบ drop-in replacement ทำให้ใช้ไฟล์ docker-compose.yml ได้ทันที
podman-compose up -d
สามารถใช้ Podman บน macOS ได้ไหม?
Podman สามารถติดตั้งบน macOS ได้ผ่าน Homebrew แต่ rootless mode จะไม่ทำงานเต็มรูปแบบเพราะ macOS ไม่มี cgroups v2 สนับสนุนการใช้งานร่วมกับ Docker Desktop หรือ Podman Desktop
Podman รองรับ container image ของ Docker ไหม?
รองรับ 100%! Podman ใช้ container image format แบบ OCI (Open Container Initiative) เดียวกับ Docker ทำให้ pull/push image ได้ทุก registry ที่รองรับ OCI
สรุป
Podman เป็น container runtime ที่เหมาะสำหรับนักพัฒนาที่ต้องการ:
- ความปลอดภัยที่สูงขึ้น (rootless mode)
- ประสิทธิภาพที่ดีขึ้น (startup speed, memory)
- Workflow ที่ง่ายขึ้น (docker CLI compatible)
- ไม่มี daemon ที่ต้องรันตลอด
เริ่มต้นใช้งานวันนี้ ด้วยคำสั่ง: sudo apt install podman