ถ้าพูดถึงวงการ DevOps หรือการทำเซิร์ฟเวอร์สมัยใหม่ คงไม่มีใครไม่รู้จักศาสตร์ของ "Containerization"
(การจับแอปใส่กล่อง) ซึ่งพระเอกที่ผูกขาดวงการนี้มาเป็นสิบปีก็คือพี่ใหญ่หัวหอกอย่าง
Docker นั่นเองครับ สารภาพตามตรงว่าตัวผมเองก็เขียน Dockerfile
อาบน้ำกินนอนกับคำสั่ง docker-compose up -d มาตั้งแต่ยุคแรกๆ เรียกว่าเป็นติ่ง Docker
ขนานแท้เลยก็ว่าได้
แต่พอเขยิบเข้าสู่ช่วงปี 2025-2026 วงการ Enterprise และบรรดาบริษัท Tech ยักษ์ใหญ่เริ่มตั้งคำถามถึง "ความปลอดภัย (Security)" และ "รอยรั่วทางสถาปัตยกรรม (Architecture Flaws)" ของ Docker มากขึ้นเรื่อยๆ จนทำให้เกิดการผลักดันเครื่องมือสายพันธุ์ใหม่อย่าง Podman (สร้างโดย Red Hat) ขึ้นมาท้าชิงบัลลังก์อย่างดุเดือด วันนี้หลังจากการจับของจริงและเอาไปใช้ในโปรเจกต์ระดับโปรดักชัน ผมจะมาเล่าให้ฟังแบบเจาะลึกว่า สรุปแล้วสงคราม Container วงการนี้ ใครเจ๋งกว่าใคร แล้วควรเปลี่ยนไปใช้ Podman ด่วนเลยไหม?
1. สถาปัตยกรรม (Architecture): ปัญหาของ "คนคุมกะ" ที่ชื่อว่า Daemon
ข้อแตกต่างแรกที่โคตรจะเห็นผลชัดเจนที่สุดคือกระดูกสันหลังการทำงานของทั้งสองตัวครับ
ฝั่งของ Docker (สไตล์ Client-Server):
เวลาคุณติดตั้ง Docker มันจะมีตัวคุมหลังบ้าน
(Background Process) ที่ชื่อว่า dockerd รันฝังตัวคอยเฝ้าอยู่ตลอดเวลา (เรียกว่า Daemon)
เราสั่งคำสั่ง docker run ปุ๊บ มันก็จะไปกระซิบให้ Daemon ไปสร้าง Container
ให้กลไกนี้แหละครับที่เป็นปัญหาที่เรียกว่า Single Point of Failure ถ้าสมมติวันดีคืนดีตัว
dockerd เกิดช็อกค้าง หรือแรมหมดจนดับไป... Container ทุกตัวนับร้อยนับพันที่มันดูแลอยู่
ก็จะร่วงพังครืนลงมาเป็นโดมิโน่ทั้งหมด! (เจ็บมาเยอะกับอาการเซิร์ฟดับยกแผงเพราะเหตุผลนี้)
ฝั่งของ Podman (สไตล์ Fork/Exec แบบ Daemonless):
ทีม Red Hat ออกแบบ Podman
มาแบบไม่มีตัวคุมหลังบ้านหรือ Daemon เลยครับ! การสั่งรัน Container 1 ตัว จะนับเป็นเพียง Child Process
ย่อยๆ ตามปกติของ OS Linux เท่านั้น หมายความว่า Container แต่ละตัวที่รันอยู่ เป็นอิสระแยกจากกันโดยเด็ดขาด
ไม่มีตัวคุมกลางที่ถ้าตายแล้วพังทั้งระบบ ส่งผลให้ระบบในภาพรวมมีความเสถียร (Stability)
เข้าขั้นปีศาจ เหมาะกับการรันค้างไว้เป็นปีๆ
2. หายนะด้านความปลอดภัย (Security): ผีร้าย Root Privilege
ถ้าเอาเรื่องนี้ไปคุยกับทีม Security ในแบงก์ชาติหรือบริษัทที่ซีเรียสเรื่อง Data Privacy รับรองว่า Docker จะโดนเพ่งเล็งเป็นอันดับ 1
- Docker (Root by Default): ตัว Daemon จัดแจงรันทุกสรรพสิ่งด้วยสิทธิ์สูงสุดของ OS
นั่นคือสิทธิ์
Rootครับ จินตนาการว่าถ้าแฮกเกอร์เจอช่องโหว่ในเว็บไซต์คุณ (ที่รันบน Docker) แล้วเจาะหลุดรอดกล่อง Container ออกมาได้ (เรียกว่าวิชา Container Breakout) แฮกเกอร์คนนั้นจะได้สิทธิ์ Root ของ Server เครื่องหลักทันที... แปลว่าพังทั้งเครื่อง ยึดได้ทั้งโฮสต์! - Podman (Rootless โดยกำเนิด): ออกแบบมาเพื่ออุดรอยรั่วนั้นโดยเฉพาะ คุณสามารถรัน Container ด้วยชื่อ User ลูกกระจ๊อกธรรมดา (Non-root user) ได้ตั้งแต่แรกเกิด (โดยใช้ User Namespaces ใน Linux) ถ้าแฮกเกอร์เจาะออกมาได้ ก็จะได้แค่สิทธิ์ลูกกระจ๊อก ไม่สามารถพัง OS เครื่องหลักได้ นับว่าเป็นนวัตกรรม Security ที่ทำเอาแผนก IT Security สบายใจไปหลายระดับ
มีโปรเจกต์นึงสำหรับลูกค้าระดับ Enterprise ที่ต้องผ่าน Audit ความปลอดภัย ISO/IEC 27001
- ตอนแรกระบบเก่าใช้ Docker: โดน Auditor สั่งแก้รัวๆ เพราะห้ามมี process ที่รันด้วย root โผล่มาให้เห็น การจะจูน Docker ให้เป็น Rootless ก็ตั้งค่ายาก ทำเอาประสาทกิน
- หลังจากรื้อมาใช้ Podman: สั่งรันธรรมดาผ่าน normal user ปุ๊บ โครม! ผ่าน Audit ทันทีแบบไม่ต้องพยายาม แถมยังสเกลเชื่อมกับ Systemd สั่งให้ container start ตอนบูทเครื่องได้เนียนกริบ
3. การกินทรัพยากร (Performance & Overhead)
จากผลการรัน Benchmark บนเซิร์ฟเวอร์ขนาดเล็ก (อารมณ์ VPS RAM 1GB-2GB):
- Docker กินแรงตลอดเวลา: ตัว Daemon มันมี Memory Overhead ที่กินแรมไปจมๆ อยู่ตลอดเวลา ต่อให้คุณยังไม่ได้รัน Container สักตัว แรมเซิร์ฟเวอร์ก็โดนสูบหายไปแล้วส่วนนึง
- Podman เบาหวิวเหมือนนุ่น: เป็นสไตล์เสกปุ๊บมาปั๊บ จะกิน CPU/RAM ก็ต่อเมื่อคุณพิมพ์คำสั่งให้มันทำอะไรสักอย่างเท่านั้น พองานจบ สั่งปิด ก็จะคลายทรัพยากรคืนทั้งหมด ไม่มีอะไรตกค้างให้รกเครื่อง เหมาะมากสำหรับรันบนระบบเน้นประหยัด หรือพวก IoT Devices
4. โยกย้ายฐานทัพ (Migration) ยากไหม?
ข่าวดีที่หลายคนไม่รู้คือ Podman จงใจพัฒนาโดยอิงมาตรฐานกลางที่เรียกว่า OCI (Open Container Initiative) ครับ ความเจ๋งคือมัน "Drop-in Replacement" ได้เลย 100% คือคำสั่งเหมือนกันเดี๊ยะ Image ที่เคยบิ้วมาจากลัทธิ Docker ก็นำมาดึง (Pull) และรันด้วยคำสั่ง Podman ได้ทันที ไม่ต้องแก้ของเก่า!
ทีมงานส่วนใหญ่เวลาเปลี่ยนผ่าน มักจะเนียนๆ หลอกตัวเองด้วยการทำนามแฝง (Alias) เอาไว้ครับ:
alias docker=podman
# ทีนี้พอนิ้วเราชินที่จะพิมพ์แบบเดิม มันก็จะไปเรียก Podman แทน
docker ps
docker run -d -p 8080:80 nginx:alpine
(ข้อสังเกต: นอกจากคำสั่งเดี่ยวๆ แล้ว Podman ยังมี podman-compose ที่ใช้งานแทน
docker-compose สำหรับการรันหลายกล่องพร้อมกันได้แนบเนียนเกือบ 100% อีกด้วย)
บทสรุป: ถึงเวลาทิ้ง Docker ไปซบค่ายใหม่หรือยัง?
แม้ผมจะอวย Podman ซะเยอะ แต่ทุกอย่างย่อมมีแนวทางของตัวเองครับ:
- ยังควรอยู่กับ Docker ไปก่อน ถ้า... ทีมพัฒนาของคุณเน้นการใช้ชิวิตรันโค้ดเขียนเว็บอยู่บนเครื่องส่วนตัว (Local Development) เพราะโปรแกรม Docker Desktop (บน Mac/Windows) นั้นมีประสิทธิภาพ GUI เลิศหรู ใช้งานง่ายมาก และพวก Plugin แจ่มแจ๋วจาก 3rd-party ก็ยังมีเยอะกว่าแน่นๆ
- โดดขึ้นเรือ Podman ได้เลย ถ้า... คุณกำลังคุยเรื่องขึ้นเซิร์ฟเวอร์ของจริง (Production Server) เน้นความเป็นระบบ Linux เพียวๆ ให้ความสำคัญที่สุดคือ Security ห้ามโดนแฮก ห้ามล่ม (มี Red Hat คอยหนุนหลัง) และเกลียดสถาปัตยกรรมแบบผูกขาด Daemon
ส่วนตัวทีม Miwnix Tech ของเราใช้ แนวทางลูกผสม (Hybrid) ครับ! ตอน Dev หน้าคอมนักพัฒนา เราใช้ Docker Desktop เพื่อความง่ายดายและลื่นไหล แต่พอเอาขึ้นไปสเกลบน Cloud/Production เราบิ้วอิมเมจและรันบนระบบปฏิบัติการโดยใช้ Podman ทั้งสิ้น ถือว่าเอาจุดแข็งของทั้งสองโลกรวมกันได้อย่างลงตัวครับ!