วิธีตั้งค่าและใช้งาน Podman‑Compose แทน Docker‑Compose สำหรับคอนเทนเนอร์แบบ rootless บน Linux อย่างปลอดภัย

ที่มาภาพ: 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

Related

บทความที่เกี่ยวข้อง

วิธีติดตั้งและกำหนดค่าบริการ Git‑Based Wiki ด้วย Gitea บน Docker Compose อย่างปลอดภัยGrowth
24 กรกฎาคม 2569 เวลา 19:30

วิธีติดตั้งและกำหนดค่าบริการ Git‑Based Wiki ด้วย Gitea บน Docker Compose อย่างปลอดภัย

การมี **Wiki** ภายในระบบควบคุมเวอร์ชันทำให้ทีมพัฒนาสามารถจัดเก็บเอกสารเทคนิคได้แบบเดียวกับโค้ด การใช้ **Gitea** ร่วมกับ **Docker Compose** ช่วยให้การตั้งค่าเป็นเรื่องง่ายและสามารถปรับขนาดตามความต้องกา…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ11 นาที
วิธีตั้งค่า Azure OpenAI Service เพื่อสร้างแชทบอทใน Microsoft Teams อย่างปลอดภัยGrowth
24 กรกฎาคม 2569 เวลา 18:00

วิธีตั้งค่า Azure OpenAI Service เพื่อสร้างแชทบอทใน Microsoft Teams อย่างปลอดภัย

การสร้างแชทบอทบน Microsoft Teams ด้วย Azure OpenAI Service ต้องผสานหลายส่วนเข้าด้วยกัน ทั้งการจัดสรรทรัพยากรใน Azure การตั้งค่า Bot registration และการกำหนดสิทธิ์ให้ปลอดภัย บทความนี้จะพาคุณผ่านขั้นตอน…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ8 นาที
วิธีตั้งค่าและใช้ GitHub Codespaces เพื่อพัฒนาโค้ดบนคลาวด์อย่างปลอดภัยGrowth
24 กรกฎาคม 2569 เวลา 12:00

วิธีตั้งค่าและใช้ GitHub Codespaces เพื่อพัฒนาโค้ดบนคลาวด์อย่างปลอดภัย

GitHub Codespaces เป็นสภาพแวดล้อมพัฒนาแบบเต็มรูปแบบที่ทำงานบนคลาวด์ ทำให้คุณสามารถเขียน / คอมไพล์ / ดีบักโค้ดได้จากเบราว์เซอร์หรือ VS Code โดยไม่ต้องตั้งค่าเครื่องท้องถิ่นหลายครั้ง การใช้ Codespaces ช…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ5 นาที
วิธีตั้งค่า Cloudflare Zero‑Trust Browser Isolation เพื่อปกป้องการท่องเว็บแบบปลอดภัยบนองค์กรGrowth
23 กรกฎาคม 2569 เวลา 19:30

วิธีตั้งค่า Cloudflare Zero‑Trust Browser Isolation เพื่อปกป้องการท่องเว็บแบบปลอดภัยบนองค์กร

Cloudflare Zero‑Trust Browser Isolation (ZBI) เป็นเทคโนโลยีที่ทำให้การท่องเว็บของผู้ใช้ในองค์กรเกิดขึ้นบนคลาวด์ แทนที่จะรันโค้ดโดยตรงบนอุปกรณ์ปลายทาง ช่วยลดความเสี่ยงจากมัลแวร์ ฟิชชิง และช่องโหว่ต่าง…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
คัดลอกลิงก์แล้ว!