กลับหน้าหลัก
DevOps Performance

Podman สำหรับนักพัฒนา
Container Runtime ที่เร็วกว่า

ใช้ Lightweight Containers เพื่อ Dev Cycle ที่เร็วขึ้นด้วย Rootless Mode และ Overhead ต่ำกว่า Docker

ทำไมต้องเลือก 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

Copy
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

Copy
brew install podman

Note: macOS ไม่รองรับ rootless mode โดยธรรมชาติ ต้องใช้ VM หรือ Docker Desktop for Mac

ตรวจสอบการติดตั้ง

Copy
podman --version

ผลลัพธ์ที่คาดหวัง:

Podman version 4.x.x

ใช้งานแบบ Docker CLI Compatible

Podman มี CLI ที่ identical กับ Docker ทำให้ migration หรือ alias ได้ง่ายมาก

สร้าง Alias ระหว่าง Docker และ Podman

เพิ่มบรรทัดนี้ใน ~/.bashrc, ~/.zshrc หรือ ~/.profile:

Copy
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

Copy
docker run --rm -it alpine sh

--rm = auto-remove, -it = interactive terminal

ดู Container

Copy
docker ps -a

ดู container ทั้งหมด (รวม stopped)

Build Image

Copy
docker build -t myapp:latest .

Build จาก Dockerfile ใน current directory

Inspect Container

Copy
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

Official Site

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 ทั้งหมด

GitHub Repository

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

.gitlab-ci.yml
GitLab CI/CD Example
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
Using 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 ได้ทันที

Copy
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