เรื่องเล่าจาก daemon ถึง daemonless: เมื่อความปลอดภัยกลายเป็นเหตุผลหลักในการเปลี่ยนเครื่องมือ

Dominik Szymański วิศวกร DevOps ได้เขียนบันทึกการเปลี่ยนผ่านจาก Docker ไปสู่ Podman หลังจากพบว่า Docker ซึ่งเคยเป็นเครื่องมือที่ “ทุกคนใช้” กลับมีจุดอ่อนที่ซ่อนอยู่ในสถาปัตยกรรม—โดยเฉพาะ daemon ที่รันด้วยสิทธิ์ root ตลอดเวลา

Docker ใช้สถาปัตยกรรมแบบ client-server โดย CLI จะสื่อสารกับ dockerd ซึ่งเป็น daemon ที่รันอยู่เบื้องหลัง และควบคุมทุก container บนระบบ หาก daemon นี้ถูกโจมตีหรือมีช่องโหว่ เช่น CVE-2019-5736 หรือ CVE-2024-21626 ก็อาจนำไปสู่การเข้าถึงระบบ host ได้ทันที

Podman เลือกแนวทางตรงข้าม—ไม่มี daemon เลย ทุกคำสั่งที่รันจะสร้าง container เป็น child process ของผู้ใช้โดยตรง และทำงานภายใต้สิทธิ์ของ user นั้น ทำให้แม้ container จะถูกโจมตี ก็ไม่สามารถเข้าถึงระบบ host ได้ในระดับ root

นอกจากเรื่องความปลอดภัยแล้ว Podman ยังมีฟีเจอร์ที่น่าสนใจ เช่น การสร้าง systemd unit file อัตโนมัติ, การจัดการ pod แบบ native ที่สามารถแปลงเป็น Kubernetes YAML ได้ทันที, และการแยกเครื่องมือเฉพาะทาง เช่น Buildah สำหรับ build image และ Skopeo สำหรับจัดการ registry

การเปลี่ยนจาก Docker ไป Podman ไม่ได้ยากอย่างที่คิด เพราะ Podman ใช้ CLI แบบเดียวกับ Docker และรองรับ Dockerfile เดิมได้ทันที แค่ alias docker=podman ก็สามารถใช้งานได้เหมือนเดิม

Dominik ยังแชร์ประสบการณ์การย้าย FastAPI ไป Podman โดยใช้ rootless container, systemd integration และ pod สำหรับจัดการ multi-service ได้อย่างมีประสิทธิภาพ และพบว่า resource usage บน dashboard ดูสะอาดขึ้นอย่างเห็นได้ชัด

สถาปัตยกรรมของ Docker และ Podman
Docker ใช้ daemon ที่รันด้วย root privileges ตลอดเวลา
Podman ไม่มี daemon และรัน container เป็น child process ของ user
ลด single point of failure และลด surface ของการโจมตี

ช่องโหว่ด้านความปลอดภัยของ Docker
CVE-2019-5736: container escape ผ่าน runC
CVE-2022-0847 “Dirty Pipe”: เขียนไฟล์ read-only บน kernel
CVE-2024-21626: fd leak และ cwd escape บน runC
แคมเปญ cryptojacking ผ่าน Docker API ที่เปิดเผย

ฟีเจอร์เด่นของ Podman
สร้าง systemd unit file ด้วย podman generate systemd
รองรับ pod แบบ native และแปลงเป็น Kubernetes YAML ได้
ใช้ Buildah และ Skopeo สำหรับงานเฉพาะทาง
rootless container เป็นค่าเริ่มต้น เพิ่มความปลอดภัย

การย้ายจาก Docker ไป Podman
CLI เหมือนกัน: podman run, podman build, podman ps
Dockerfile เดิมใช้งานได้ทันที
รองรับ Docker Compose ผ่าน podman-compose หรือแปลงเป็น Kubernetes

ประสบการณ์ใช้งานจริง
ระบบเสถียรขึ้นเมื่อไม่มี daemon
dashboard แสดงการใช้ resource ได้ชัดเจนขึ้น
เหมาะสำหรับผู้ที่ต้องรับผิดชอบด้านความปลอดภัยโดยตรง

https://codesmash.dev/why-i-ditched-docker-for-podman-and-you-should-too
🎙️ เรื่องเล่าจาก daemon ถึง daemonless: เมื่อความปลอดภัยกลายเป็นเหตุผลหลักในการเปลี่ยนเครื่องมือ Dominik Szymański วิศวกร DevOps ได้เขียนบันทึกการเปลี่ยนผ่านจาก Docker ไปสู่ Podman หลังจากพบว่า Docker ซึ่งเคยเป็นเครื่องมือที่ “ทุกคนใช้” กลับมีจุดอ่อนที่ซ่อนอยู่ในสถาปัตยกรรม—โดยเฉพาะ daemon ที่รันด้วยสิทธิ์ root ตลอดเวลา Docker ใช้สถาปัตยกรรมแบบ client-server โดย CLI จะสื่อสารกับ dockerd ซึ่งเป็น daemon ที่รันอยู่เบื้องหลัง และควบคุมทุก container บนระบบ หาก daemon นี้ถูกโจมตีหรือมีช่องโหว่ เช่น CVE-2019-5736 หรือ CVE-2024-21626 ก็อาจนำไปสู่การเข้าถึงระบบ host ได้ทันที Podman เลือกแนวทางตรงข้าม—ไม่มี daemon เลย ทุกคำสั่งที่รันจะสร้าง container เป็น child process ของผู้ใช้โดยตรง และทำงานภายใต้สิทธิ์ของ user นั้น ทำให้แม้ container จะถูกโจมตี ก็ไม่สามารถเข้าถึงระบบ host ได้ในระดับ root นอกจากเรื่องความปลอดภัยแล้ว Podman ยังมีฟีเจอร์ที่น่าสนใจ เช่น การสร้าง systemd unit file อัตโนมัติ, การจัดการ pod แบบ native ที่สามารถแปลงเป็น Kubernetes YAML ได้ทันที, และการแยกเครื่องมือเฉพาะทาง เช่น Buildah สำหรับ build image และ Skopeo สำหรับจัดการ registry การเปลี่ยนจาก Docker ไป Podman ไม่ได้ยากอย่างที่คิด เพราะ Podman ใช้ CLI แบบเดียวกับ Docker และรองรับ Dockerfile เดิมได้ทันที แค่ alias docker=podman ก็สามารถใช้งานได้เหมือนเดิม Dominik ยังแชร์ประสบการณ์การย้าย FastAPI ไป Podman โดยใช้ rootless container, systemd integration และ pod สำหรับจัดการ multi-service ได้อย่างมีประสิทธิภาพ และพบว่า resource usage บน dashboard ดูสะอาดขึ้นอย่างเห็นได้ชัด ✅ สถาปัตยกรรมของ Docker และ Podman ➡️ Docker ใช้ daemon ที่รันด้วย root privileges ตลอดเวลา ➡️ Podman ไม่มี daemon และรัน container เป็น child process ของ user ➡️ ลด single point of failure และลด surface ของการโจมตี ✅ ช่องโหว่ด้านความปลอดภัยของ Docker ➡️ CVE-2019-5736: container escape ผ่าน runC ➡️ CVE-2022-0847 “Dirty Pipe”: เขียนไฟล์ read-only บน kernel ➡️ CVE-2024-21626: fd leak และ cwd escape บน runC ➡️ แคมเปญ cryptojacking ผ่าน Docker API ที่เปิดเผย ✅ ฟีเจอร์เด่นของ Podman ➡️ สร้าง systemd unit file ด้วย podman generate systemd ➡️ รองรับ pod แบบ native และแปลงเป็น Kubernetes YAML ได้ ➡️ ใช้ Buildah และ Skopeo สำหรับงานเฉพาะทาง ➡️ rootless container เป็นค่าเริ่มต้น เพิ่มความปลอดภัย ✅ การย้ายจาก Docker ไป Podman ➡️ CLI เหมือนกัน: podman run, podman build, podman ps ➡️ Dockerfile เดิมใช้งานได้ทันที ➡️ รองรับ Docker Compose ผ่าน podman-compose หรือแปลงเป็น Kubernetes ✅ ประสบการณ์ใช้งานจริง ➡️ ระบบเสถียรขึ้นเมื่อไม่มี daemon ➡️ dashboard แสดงการใช้ resource ได้ชัดเจนขึ้น ➡️ เหมาะสำหรับผู้ที่ต้องรับผิดชอบด้านความปลอดภัยโดยตรง https://codesmash.dev/why-i-ditched-docker-for-podman-and-you-should-too
CODESMASH.DEV
Switching from Docker to Podman
Podman offers better security, uses fewer resources, and integrates seamlessly with Linux and Kubernetes, making it a superior Docker alternative
0 Comments 0 Shares 37 Views 0 Reviews