
ที่มาภาพ: Unknown Source
วิธีตั้งค่าและใช้งาน Podman‑Compose แทน Docker‑Compose สำหรับคอนเทนเนอร์แบบ rootless บน Linux อย่างปลอดภัย
⚡ สรุป 30 วิ
การใช้คอนเทนเนอร์แบบ **rootless** บน Linux ช่วยลดความเสี่ยงจากการทำงานด้วยสิทธิ์ผู้ดูแลระบบ แต่หลาย ๆ ทีมยังคุ้นเคยกับ `docker‑compose` อยู่ วันนี้เราจะมาดูวิธี **ติดตั้งและใช้งาน Podman‑Compose แทน…
บทนำ
การใช้คอนเทนเนอร์แบบ rootless บน Linux ช่วยลดความเสี่ยงจากการทำงานด้วยสิทธิ์ผู้ดูแลระบบ แต่หลาย ๆ ทีมยังคุ้นเคยกับ `docker‑compose` อยู่ วันนี้เราจะมาดูวิธี ติดตั้งและใช้งาน Podman‑Compose แทน Docker‑Compose อย่างปลอดภัย
Overview – ภาพรวม
Podman เป็น daemonless container engine ที่ทำงานได้แบบ rootless โดยตรง ส่วน `podman‑compose` ให้ความสามารถคล้ายกับ Docker‑Compose สำหรับจัดการหลายคอนเทนเนอร์ในไฟล์เดียว
- ไม่มี daemon ทำให้ระบบปลอดภัยกว่า
- รองรับ Docker‑compatible CLI มากส่วนใหญ่
- สามารถใช้ไฟล์ `docker‑compose.yml` เดิมได้โดยไม่ต้องแก้ไขมาก
**Tip: ก่อนเริ่ม ควรตรวจสอบว่า Linux kernel ของคุณรองรับ user namespaces (kernel ≥ 3.8)
Prerequisites – สิ่งที่ต้องเตรียม
เพื่อให้การติดตั้งเป็นไปอย่างราบรื่น ตรวจสอบสิ่งต่อไปนี้ก่อน
- ระบบปฏิบัติการ Linux รุ่นล่าสุด (Fedora, CentOS 8+, Ubuntu 20.04+)
- ผู้ใช้ที่มี sudo สิทธิ์สำหรับการติดตั้งแพกเกจแรกเริ่ม
- Kernel รองรับ user namespaces (`sysctl kernel.unprivileged_userns_clone=1`)
Install Podman – การติดตั้ง Podman
Podman มีให้ใน repository ของหลายดิสโตริบิวชัน เพียงรันคำสั่งเดียว
- บน Fedora / CentOS 8+
``` sudo dnf install -y podman ```
- บน Ubuntu 20.04+
``` sudo apt-get update sudo apt-get install -y podman ```
หลังติดตั้ง ตรวจสอบเวอร์ชันและการทำงานแบบ rootless
``` podman --version podman info | grep rootless ```
ผลลัพธ์ควรแสดง rootless = true
Install Podman‑Compose – การเพิ่ม podman‑compose
`podman‑compose` ยังไม่มีในทุก repository จึงติดตั้งด้วย `pip` หรือจาก source
- วิธีที่ง่ายที่สุด (ใช้ pip)
``` sudo apt-get install -y python3-pip # Ubuntu sudo dnf install -y python3-pip # Fedora sudo pip3 install podman-compose ```
- ตรวจสอบเวอร์ชัน
``` podman‑compose --version ```
**Tip: หากต้องการอัพเดตในภายหลัง ใช้ `sudo pip3 install --upgrade podman-compose`
Convert Docker‑Compose File – แปลงไฟล์ docker‑compose.yml
ส่วนใหญ่ไฟล์ `docker‑compose.yml` สามารถใช้ได้โดยตรง แต่บางฟีเจอร์ยังไม่สนับสนุนเต็ม
- ตรวจสอบว่าไม่มีคำสั่ง build ที่อ้างถึง Dockerfile ที่ต้องการ privileged mode
- หากมี volume แบบ `named` ควรตรวจสอบสิทธิ์ของโฟลเดอร์บน host ให้เป็นของผู้ใช้ปัจจุบัน
ตัวอย่างไฟล์ง่าย ๆ
```yaml version: "3.9" services: web: image: nginx:alpine ports:
- "8080:80"
```
บันทึกเป็น `podman-compose.yml` (หรือใช้ชื่อเดิมก็ได้) แล้วรันต่อไป
Run the Stack – เริ่มต้นคอนเทนเนอร์
- **ขั้นตอนที่ 1: ตรวจสอบไฟล์ YAML
``` podman‑compose -f podman-compose.yml config ```
- **ขั้นตอนที่ 2: สร้างและเริ่มคอนเทนเนอร์ในโหมด rootless
``` podman‑compose -f podman-compose.yml up -d ```
- **ขั้นตอนที่ 3: ตรวจสอบสถานะของพอดส์ (pods) และคอนเทนเนอร์
``` podman pod ps podman ps ```
เมื่อต้องการหยุดและลบทั้งหมด ใช้คำสั่งเดียวกันกับ `down`
``` podman‑compose -f podman-compose.yml down ```
**Tip: ใส่ flag `--log-level=debug` หากเจอปัญหา เพื่อดูรายละเอียดของขั้นตอน
Managing Pods – การจัดการ Pod
Podman แบ่งคอนเทนเนอร์เป็น pods (กลุ่มคอนเทนเนอร์ที่แชร์ network namespace)
- ดูรายละเอียด pod
``` podman pod inspect <pod-id> ```
- เพิ่มคอนเทนเนอร์เข้า pod ที่มีอยู่แล้วโดยใช้ `--pod` flag เมื่อสร้างใหม่
``` podman run -d --pod <pod-id> redis:alpine ```
การจัดการด้วย `podman‑compose` จะทำให้ pod ถูกสร้างอัตโนมัติตามไฟล์ YAML
Security Considerations – ข้อควรระวังด้านความปลอดภัย
- User namespaces ควรเปิดใช้งานและไม่จำกัดโดย `/etc/subuid` / `/etc/subgid` ของผู้ใช้
- ตรวจสอบว่าโฟลเดอร์ที่แมพเป็น volume มีสิทธิ์ 600/700 เพื่อลดการเข้าถึงจากคอนเทนเนอร์อื่น
- ปิดการใช้งาน `cap_add: ALL` หรือ `privileged: true` ในไฟล์ compose
| ด้าน | Docker‑Compose (daemon) | Podman‑Compose (rootless) |
|---|---|---|
| Daemon | มี daemon ทำงานด้วย root | ไม่มี daemon, ทำงานโดยผู้ใช้ |
| สิทธิ์ | มักต้องรันเป็น root | ทำงานแบบ rootless ตลอด |
| ความเสี่ยง | เกิดจากการทำงานของ daemon | ลดเพราะไม่มี process พิเศษ |
| รองรับ | ครอบคลุมฟีเจอร์ทั้งหมด | ยังไม่ครบ 100% |
Troubleshooting – แก้ไขปัญหาพบทั่วไป
- **Error: “cannot allocate memory for user namespace”
ตรวจสอบค่า `max_user_namespaces` ใน `/proc/sys/kernel/` และเพิ่มถ้าจำเป็น
- Port conflict เมื่อใช้ `ports:` บนหลายคอนเทนเนอร์เดียวกัน
ใช้รูปแบบ `127.0.0.1:8081:80` เพื่อจำกัดการฟังเฉพาะ localhost
- ไฟล์ volume ไม่พบ ตรวจสอบว่าโฟลเดอร์บน host มีอยู่และเป็นของผู้ใช้ที่รัน podman
**Tip: คำสั่ง `podman logs <container-id>` ให้ข้อมูลดีเยี่ยมสำหรับ debugging
Summary – สรุปสาระสำคัญ
- ติดตั้ง Podman และ podman‑compose ผ่าน package manager หรือ pip
- ใช้ไฟล์ `docker‑compose.yml` เดิมได้ส่วนใหญ่ เพียงตรวจสอบฟีเจอร์ที่ไม่สนับสนุน
- รันด้วยคำสั่ง `podman‑compose up -d` เพื่อสร้าง pod แบบ rootless อย่างปลอดภัย
- ตรวจสอบสิทธิ์ของ user namespaces, volume และ network เพื่อหลีกเลี่ยงช่องโหว่
**สิ่งที่ควรจำ: Podman‑Compose ให้ความสะดวกคล้าย Docker‑Compose แต่เพิ่มระดับความปลอดภัยด้วยการทำงานแบบ rootless และไม่มี daemon คอยทำงานเบื้องหลัง ทำให้เป็นตัวเลือกที่เหมาะสำหรับสภาพแวดล้อมที่ต้องการความมั่นคงสูงบน Linux.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีตั้งค่าและใช้งาน Podman‑Compose แทน Docker‑Compose สำหรับคอนเทนเนอร์แบบ rootless บน Linux อย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 24 กรกฎาคม 2569 เวลา 19:50



