Podman Rootless Containers Guide AI

Podman Rootless Containers Guide

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

Podman Rootless Containers Guide คืออะไร / ทำไมถึงสำคัญ

น้องๆ เคยเจอปัญหาลงโปรแกรมทับกันมั้ย? หรืออยากลอง AI ตัวใหม่ แต่กลัวเครื่องพัง? Podman Rootless Containers นี่แหละคือพระเอกของเรา! มันคือการสร้าง "ห้อง" เล็กๆ ให้โปรแกรม AI แต่ละตัวอยู่ เหมือนคอนโดที่แต่ละห้องแยกจากกัน ไม่กวนกัน แถมยังปลอดภัย เพราะทำทุกอย่างด้วยสิทธิ์ user ธรรมดา ไม่ต้องเป็น root ให้เสี่ยงโดนแฮก

สมัยผมทำร้านเน็ต SiamCafe นี่ตัวดีเลย! เด็กๆ ชอบลงโปรแกรมแปลกๆ มาลอง บางทีก็ติดไวรัส กว่าจะแก้ได้แต่ละที... ถ้ามี Podman ตั้งแต่ตอนนั้น ชีวิตคงง่ายขึ้นเยอะ

ทำไมต้อง Rootless?

ปกติเวลาใช้ Container ทั่วไป เราต้องใช้สิทธิ์ root ซึ่งก็คือสิทธิ์สูงสุดของเครื่อง ถ้า Container โดนแฮก คนร้ายก็จะได้สิทธิ์ root ไปด้วย ทีนี้ล่ะ งานเข้า! แต่ Rootless Container ไม่ต้องใช้สิทธิ์ root ไง แค่ user ธรรมดาก็สร้าง Container ได้ สบายใจกว่าเยอะ

Podman คืออะไร?

Podman ก็คือเครื่องมือที่ช่วยให้เราจัดการ Container ได้ง่ายๆ เหมือน Docker นั่นแหละ แต่ Podman มันเน้นเรื่องความปลอดภัยมากกว่า และออกแบบมาให้ทำงานแบบ Rootless ได้ดีกว่า

พื้นฐานที่ต้องรู้

Container คืออะไร?

Container ก็เหมือนกล่องที่บรรจุโปรแกรมและทุกอย่างที่โปรแกรมนั้นต้องการไว้ข้างใน (เช่น libraries, dependencies) แล้วเอาไปรันที่ไหนก็ได้ ไม่ต้องกังวลว่าเครื่องปลายทางจะมีอะไรขาดหายไป เพราะทุกอย่างอยู่ในกล่องหมดแล้ว

สมัยก่อนเวลาลงโปรแกรมทีนึง ต้องมานั่งไล่ลง dependencies ให้ครบ บางทีก็เจอปัญหา dependencies เวอร์ชั่นไม่ตรงกัน Container ช่วยแก้ปัญหานี้ได้ดีมากๆ


# ตัวอย่าง Dockerfile สำหรับสร้าง Container
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3 python3-pip
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
CMD ["python3", "app.py"]

Image คืออะไร?

Image คือ template หรือพิมพ์เขียวของ Container พูดง่ายๆ ก็คือ Container ที่ยังไม่ได้รันนั่นเอง เราสามารถสร้าง Container จาก Image ได้หลายๆ ตัว

ลองนึกภาพเหมือนพิมพ์ขนม Image ก็คือแม่พิมพ์ ส่วน Container ก็คือขนมที่อบออกมาจากแม่พิมพ์นั้น

Namespace และ cgroups

Namespace และ cgroups เป็นเทคโนโลยีที่ Linux ใช้ในการจำกัดทรัพยากรและแยกส่วนต่างๆ ของ Container ออกจากกัน ทำให้ Container แต่ละตัวไม่สามารถเข้ามายุ่งเกี่ยวกันได้

Namespace เหมือนการสร้าง "ห้อง" ให้แต่ละ Container ส่วน cgroups เหมือนการกำหนดขนาดของห้องและปริมาณทรัพยากรที่แต่ละห้องใช้ได้

วิธีใช้งาน / เริ่มต้นยังไง

ติดตั้ง Podman

ก่อนอื่นต้องติดตั้ง Podman ก่อน วิธีการติดตั้งก็ขึ้นอยู่กับ OS ที่ใช้ ถ้าใช้ Ubuntu ก็:


sudo apt update
sudo apt install podman

ถ้าใช้ OS อื่นก็ลอง Google ดูนะ มีวิธีติดตั้งเยอะแยะ

สร้าง Image

เราสามารถสร้าง Image ได้จาก Dockerfile หรือจะ pull Image สำเร็จรูปจาก Docker Hub ก็ได้


# Pull Image จาก Docker Hub
podman pull ubuntu:latest

# สร้าง Container จาก Image
podman run -it ubuntu:latest /bin/bash

คำสั่ง podman run -it จะสร้าง Container ใหม่จาก Image `ubuntu:latest` แล้วเปิด terminal ให้เราเข้าไปใช้งาน

ขั้นตอนปฏิบัติจริง

รัน AI Model ด้วย Podman Rootless

สมมติว่าเรามี AI Model ที่เขียนด้วย Python และต้องการรันใน Container เราสามารถทำได้ดังนี้:

  1. สร้าง Dockerfile:
  2. 
      FROM python:3.9-slim-buster
      WORKDIR /app
      COPY requirements.txt .
      RUN pip3 install -r requirements.txt
      COPY . .
      CMD ["python3", "main.py"]
      
  3. Build Image:
  4. 
      podman build -t my-ai-model .
      
  5. Run Container:
  6. 
      podman run --rm -p 8000:8000 my-ai-model
      

คำสั่ง podman run --rm -p 8000:8000 my-ai-model จะรัน Container จาก Image `my-ai-model` แล้ว map port 8000 ของ Container ไปยัง port 8000 ของเครื่อง host

จัดการ Volume

Volume คือพื้นที่เก็บข้อมูลที่ Container สามารถเข้าถึงได้ ข้อมูลที่อยู่ใน Volume จะไม่หายไปเมื่อ Container ถูกลบ


# สร้าง Volume
podman volume create my-volume

# รัน Container พร้อม mount Volume
podman run -v my-volume:/data my-image

ข้อมูลที่อยู่ใน directory `/data` ใน Container จะถูกเก็บไว้ใน Volume `my-volume`

Network

Podman จะสร้าง network ให้ Container แต่ละตัวโดยอัตโนมัติ ทำให้ Container สามารถสื่อสารกันได้


# สร้าง network
podman network create my-network

# รัน Container พร้อม join network
podman run --network my-network my-image

Container ที่อยู่ใน network `my-network` จะสามารถสื่อสารกันได้โดยใช้ชื่อ Container เป็น hostname

เปรียบเทียบกับทางเลือกอื่น

Podman ไม่ได้มีข้อดีอย่างเดียว Docker ก็มีข้อดีของมันเหมือนกัน ลองดูตารางเปรียบเทียบนี้:

คุณสมบัติ Podman Docker
Rootless รองรับ ต้องใช้ root (โดยปกติ)
Daemon ไม่ต้องมี daemon รันตลอดเวลา ต้องมี daemon รันตลอดเวลา
ความซับซ้อน อาจจะซับซ้อนกว่าเล็กน้อย ใช้งานง่ายกว่า
Community เล็กกว่า ใหญ่กว่า
สนับสนุน Kubernetes ดี ดี

ถ้าเน้นความปลอดภัย และอยากลองอะไรใหม่ๆ Podman ก็เป็นตัวเลือกที่ดี แต่ถ้าอยากได้อะไรที่ใช้งานง่าย และมี Community ใหญ่ๆ Docker ก็ยังเป็นตัวเลือกที่น่าสนใจ

ยังไงก็ลองศึกษาเพิ่มเติมจาก SiamCafe Blog นะครับ มีบทความดีๆ อีกเยอะเลย

สุดท้ายนี้ อยากฝากน้องๆ ว่า เทคโนโลยีเปลี่ยนแปลงตลอดเวลา อย่าหยุดเรียนรู้ครับ! แล้วเจอกันใหม่ที่ SiamCafe Blog นะครับ!

Best Practices / เคล็ดลับจากประสบการณ์

มาถึงเคล็ดลับที่ผมอยากแชร์จากประสบการณ์จริง สมัยทำร้านเน็ตคาเฟ่ SiamCafe.net นี่แหละ เรื่อง container ไม่ได้มีให้ใช้หรอก แต่หลักการจัดการทรัพยากร การดูแลระบบคล้ายๆ กันเลย ผมว่ามันคือ evolution ของการจัดการ server ยุคใหม่นี่เอง

Rootless Podman นี่ดีตรงที่มันปลอดภัยกว่าเยอะ แต่ก็ต้องแลกมาด้วยความซับซ้อนในการตั้งค่าบางอย่างนิดหน่อย ถ้าทำตามนี้ รับรองชีวิตง่ายขึ้นเยอะ

เทคนิคที่ 1: Mount Volume ให้ถูกที่ ถูกทาง

เรื่อง Mount Volume นี่สำคัญมาก สมัยก่อนผมเจอปัญหาลูกค้าเซฟไฟล์ลงเครื่องแล้วหายประจำ เพราะดันไปเซฟไว้ในที่ที่พอรีสตาร์ทเครื่องแล้วมันหายหมด Container ก็เหมือนกัน ถ้าไม่ Mount Volume ไว้ ไฟล์ที่อยู่ใน container มันจะหายไปพร้อมกับ container ตอน restart

จำไว้ว่า Container คืออะไรที่เปลี่ยนแปลงได้ตลอดเวลา ข้อมูลสำคัญต้องอยู่นอก Container เสมอ!

podman run -d -p 8080:80 -v /home/user/mydata:/var/www/html httpd

Code ข้างบนนี่คือตัวอย่างการ Mount Volume จาก /home/user/mydata บนเครื่องเรา ไปที่ /var/www/html ใน Container Apache

เทคนิคที่ 2: Networking ต้องแม่น

เรื่อง Network นี่ก็ปวดหัวเหมือนกัน สมัยก่อนต้องมานั่ง config IP address เอง container นี่ช่วยเราเยอะ แต่ก็ต้องเข้าใจว่ามันทำงานยังไง Rootless Podman มันจะสร้าง network namespace ของตัวเองขึ้นมา

ถ้าอยากให้ Container คุยกับ Container อื่น หรือคุยกับ Host ได้ ต้อง config port forwarding ให้ดีๆ หรือใช้ network mode ที่เหมาะสม

podman run -d -p 8080:80 --network host httpd

--network host นี่คือสั่งให้ Container ใช้ network ของ Host ไปเลย ง่ายดี แต่ก็ต้องระวังเรื่อง port conflict ด้วยนะ

เทคนิคที่ 3: Resource Limit สำคัญ

สมัยก่อนเครื่องลูกร้านเน็ตใครแรงก็เล่นเกมลื่นกว่าเพื่อน ตอนนี้ container ก็เหมือนกัน ถ้าไม่จำกัด resource มันจะแย่งกันใช้จนเครื่องอืด

Podman ให้เราจำกัด CPU, Memory ได้ ลองใช้ดู จะช่วยให้ระบบเสถียรขึ้นเยอะ

podman run -d -m 512m --cpus 0.5 httpd

Code นี้จำกัด Memory ให้ Container ใช้ได้แค่ 512MB และ CPU 0.5 core

เทคนิคที่ 4: Image Management

Image นี่เหมือน template ของ Container ถ้าไม่จัดการให้ดีๆ จะรกเครื่องมาก ลบ image ที่ไม่ได้ใช้แล้วบ้างนะครับ

ใช้ podman image prune ช่วยได้เยอะ

FAQ คำถามที่พบบ่อย

Rootless Podman ต่างจาก Docker ยังไง?

Docker ต้องใช้ root permission ในการ run container แต่ Rootless Podman ไม่ต้อง ทำให้ปลอดภัยกว่าเยอะ

ทำไม Container รันแล้วเข้าไม่ได้?

เช็คเรื่อง port forwarding, firewall, และ network configuration ให้ดีๆ ครับ

อยากให้ Container เริ่มทำงานเองตอน boot เครื่องทำยังไง?

ใช้ systemd user unit file ครับ ลองหา tutorial ใน SiamCafe Blog ดู อาจจะมีคนเขียนไว้แล้ว

Rootless Podman ใช้ได้กับทุก Image ไหม?

ไม่ครับ บาง image อาจจะต้องปรับ configuration นิดหน่อยเพื่อให้มัน run ได้โดยไม่ต้องใช้ root

สรุป

Rootless Podman เป็นเครื่องมือที่ทรงพลังมากในการจัดการ container โดยที่ไม่ต้องพึ่ง root permission ทำให้ระบบปลอดภัยขึ้นเยอะ แต่ก็ต้องเรียนรู้และทำความเข้าใจกับมันให้ดีๆ

หวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนนะครับ ลองเอาไปปรับใช้กับงานของตัวเองดู ถ้าติดขัดตรงไหน ถามมาได้เลย ผมยินดีช่วยเหลือ iCafeForex ก็ใช้ container นะจะบอกให้ :)