Container Runtime Containerd Crio AI

Container Runtime Containerd Crio

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

Container Runtime Containerd Crio คืออะไร / ทำไมถึงสำคัญ

น้องๆ เคยสงสัยมั้ยว่า Docker มันรัน Container ได้ยังไง? ใครเป็นคนจัดการเบื้องหลัง? นั่นแหละครับ Container Runtime เข้ามามีบทบาทตรงนี้ สำคัญสุดๆ เพราะมันคือตัวที่ทำให้ Container ทำงานได้จริง ไม่ใช่แค่ไฟล์ Image สวยๆ ที่เรา Build ขึ้นมา

สมัยผมทำร้านเน็ตฯ นะ (SiamCafe.net Since 1997) สมัยนั้นยังไม่มี Docker เลยด้วยซ้ำ ต้องมานั่ง Setup Virtual Machine เอง กว่าจะลงโปรแกรมแต่ละตัวเสร็จ ปวดหัวสุดๆ Container นี่แหละช่วยชีวิตไว้เยอะ ทำให้ Deploy อะไรๆ ง่ายขึ้นเยอะเลย

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

Container คืออะไร?

Container มันก็เหมือนกล่องๆ นึง ที่ข้างในมีโปรแกรมและ Dependencies ที่โปรแกรมนั้นต้องใช้ในการรัน ถูก Package มาอย่างดี ทำให้เรามั่นใจได้ว่าไม่ว่า Container จะไปรันที่ไหน มันก็จะทำงานได้เหมือนกันเป๊ะๆ เหมือนเราย้ายเกมจากเครื่อง PC ไปลง Notebook แล้วมันเล่นได้เหมือนเดิมนั่นแหละ

Image คืออะไร?

Image ก็คือพิมพ์เขียวของ Container เป็นเหมือน Template ที่บอกว่า Container นี้ต้องมีอะไรบ้าง ตั้งแต่ OS, Library, ไปจนถึง Source Code ของโปรแกรมเรา เวลาเราสั่งให้รัน Container เราก็ต้องบอกก่อนว่าจะใช้ Image ไหน

Container Runtime คืออะไร?

Container Runtime นี่แหละคือพระเอกตัวจริง มันคือ Software ที่รับหน้าที่จัดการทุกอย่างตั้งแต่ดึง Image มาสร้าง Container, Start/Stop Container, จัดการ Network และ Storage ให้ Container รวมถึงจัดการ Resource ต่างๆ เช่น CPU และ Memory ด้วย

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

เอาล่ะ มาถึงขั้นตอนการใช้งานกันบ้าง ผมจะยกตัวอย่างการใช้งาน Containerd นะ เพราะเป็น Container Runtime ที่ได้รับความนิยมมากๆ ตัวนึง

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

ติดตั้ง Containerd

ก่อนอื่นเราต้องติดตั้ง Containerd ก่อน วิธีการติดตั้งจะแตกต่างกันไปตาม OS ที่เราใช้ ผมจะยกตัวอย่างบน Ubuntu นะ


sudo apt-get update
sudo apt-get install -y containerd

Config Containerd

หลังจากติดตั้งเสร็จแล้ว เราต้อง Config Containerd นิดหน่อย โดยการสร้างไฟล์ Config


sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

จากนั้น Restart Containerd Service


sudo systemctl restart containerd

ดึง Image และรัน Container

ทีนี้เราก็พร้อมที่จะดึง Image มาสร้าง Container แล้ว ผมจะดึง Image "nginx" มาลองรันดูนะ แต่ก่อนอื่นเราต้องใช้ ctr ซึ่งเป็น CLI tool ของ Containerd ก่อน


sudo ctr image pull docker.io/library/nginx:latest
sudo ctr run --rm --net-host docker.io/library/nginx:latest my-nginx

คำสั่งแรกคือการ Pull Image "nginx" จาก Docker Hub ส่วนคำสั่งที่สองคือการสร้างและรัน Container ชื่อ "my-nginx" จาก Image ที่เราเพิ่ง Pull มา

ง่ายใช่มั้ยล่ะ? แต่ถ้าอยากใช้ Docker ล่ะ? Docker ก็แค่เอา Containerd มาเป็น Container Runtime อีกทีนึง Docker จะมี Feature เพิ่มเติมที่ทำให้ User ใช้งานง่ายขึ้น เช่น Docker Compose, Docker Swarm เป็นต้น

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

Container Runtime ไม่ได้มีแค่ Containerd นะ ยังมีตัวอื่นๆ อีก เช่น CRI-O และ Docker Engine (ซึ่งจริงๆ ก็ใช้ Containerd อยู่เบื้องหลัง) แต่ละตัวก็มีข้อดีข้อเสียแตกต่างกันไป

CRI-O ถูกออกแบบมาสำหรับ Kubernetes โดยเฉพาะ ทำให้ Optimize ในเรื่อง Performance และ Security ได้ดีกว่า ส่วน Docker Engine ก็เน้นเรื่อง User Experience ทำให้ใช้งานง่าย เหมาะสำหรับ Developer ที่ต้องการ Deploy Application แบบ Standalone

Container Runtime จุดเด่น ข้อเสีย เหมาะกับใคร
Containerd Performance ดี, Lightweight, ใช้ใน Kubernetes เยอะ Config ยากกว่า Docker Engine คนที่ต้องการ Performance สูง และใช้ Kubernetes
CRI-O Optimize สำหรับ Kubernetes, Security ดี ใช้งานยากกว่า Docker Engine คนที่ใช้ Kubernetes เป็นหลัก
Docker Engine ใช้งานง่าย, มี Feature เยอะ, Community ใหญ่ กิน Resource เยอะกว่า Containerd/CRI-O Developer ที่ต้องการ Deploy Application แบบ Standalone

สรุปคือ เลือกใช้ Container Runtime ให้เหมาะสมกับ Use Case ของเรา ถ้าใช้ Kubernetes ก็แนะนำ CRI-O หรือ Containerd แต่ถ้า Deploy Application แบบ Standalone ก็ Docker Engine นี่แหละง่ายสุด

สมัยผมทำร้านเน็ตฯ นะ (SiamCafe.net Since 1997) ถ้ามี Container Runtime แบบนี้ตั้งแต่แรก ชีวิตคงง่ายขึ้นเยอะเลย ไม่ต้องมานั่งปวดหัวกับการ Config VM เอง

หวังว่าบทความนี้จะเป็นประโยชน์กับน้องๆ นะครับ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลย หรือจะลองเข้าไปดู Blog ของ SiamCafe Blog ก็ได้ เผื่อมี Tips & Tricks เกี่ยวกับ IT ที่น่าสนใจอีกเยอะเลย

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

เอาล่ะน้องๆ มาถึงหัวใจสำคัญของการใช้ Container Runtime กันแล้ว สมัยผมทำร้านเน็ตนี่ ลองผิดลองถูกมาเยอะ เจ็บมาเยอะกว่าจะคลำทางเจอ Best Practices ที่เวิร์คจริง มาดูกันว่ามีอะไรบ้าง

1. เลือก Container Runtime ให้เหมาะกับงาน

เหมือนเลือกร้านเกมส์ให้เหมาะกับเด็กแต่ละกลุ่มนั่นแหละ! Containerd เหมาะกับ Production ที่เน้นความ Stable และ Performance ส่วน CRI-O เกิดมาเพื่อ Kubernetes โดยเฉพาะ ถ้าไม่ได้ใช้ K8s ก็อาจจะไม่คุ้มที่จะใช้ CRI-O

สมัยผมทำร้านเกมส์ ต้องดูว่าเด็กชอบเล่นเกมส์อะไร เด็กผู้ชายชอบ CS:GO, Dota ก็ต้องลงเกมส์ให้พร้อม เด็กผู้หญิงชอบ Audition, Pangya ก็ต้องเตรียมไว้ให้พร้อม Container Runtime ก็เหมือนกัน เลือกให้เหมาะกับ workload ของเรา

2. Monitor & Logging สำคัญยิ่งกว่า Wi-Fi แรง!

ร้านเกมส์ที่ดีต้องมีกล้องวงจรปิด มี Log Server ไว้ดูว่าใครทำอะไรบ้าง Container Runtime ก็เหมือนกัน ต้อง Monitor การทำงานของ Container อย่างใกล้ชิด ดู CPU, Memory, Disk I/O และ Logging ก็สำคัญไม่แพ้กัน เอาไว้ Debug เวลา Container มีปัญหา

# ตัวอย่างการ Monitor CPU Usage ของ Container ด้วย cAdvisor
docker stats

สมัยก่อนร้านผมโดนเด็กแฮกบ่อยมาก ต้องคอย Monitor Log File ตลอดเวลา Container ก็เหมือนกัน ต้องคอยดู Log ว่ามี Error อะไรเกิดขึ้นบ้าง

3. Security ไม่ใช่เรื่องเล่นๆ

สมัยก่อนร้านเกมส์ผมโดนไวรัสลงบ่อยมาก ต้องลง Anti-Virus แทบทุกวัน Container ก็เหมือนกัน ต้อง Secure ตั้งแต่ Image ที่ใช้ จนถึง Runtime Environment

ใช้ Image ที่ Verified แล้วเท่านั้น! Update Image อยู่เสมอ และใช้ Security Contexts เพื่อจำกัดสิทธิ์การเข้าถึงของ Container

4. Resource Limits กำหนดไว้ ชีวิตดี

เด็กบางคนเล่นเกมส์ไม่รู้จักเวลา Container บางตัวก็กิน Resource ไม่รู้จักพอ กำหนด Resource Limits ให้ Container แต่ละตัวไว้ จะช่วยป้องกันไม่ให้ Container ตัวใดตัวหนึ่งกิน Resource จนหมด ทำให้ Container อื่นๆ ทำงานไม่ได้

# ตัวอย่างการกำหนด Resource Limits ใน Docker Compose
version: "3.9"
services:
  web:
    image: nginx:latest
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

สมัยก่อนผมเจอเด็กบางคนเปิดเกมส์หลายจอมาก กิน Resource เครื่องจนหมด ทำให้เครื่องอื่นเล่นไม่ได้ Container ก็เหมือนกัน ต้องจำกัด Resource ให้ดี

5. อัพเดทอยู่เสมออย่าให้ตกเทรนด์

Software ทุกอย่างต้อง Update เสมอ Container Runtime ก็เช่นกัน Update ให้เป็น Version ล่าสุดอยู่เสมอ เพื่อให้ได้ Feature ใหม่ๆ และ Patch Security Vulnerabilities

สมัยก่อนผมขี้เกียจ Update Windows มาก แต่สุดท้ายก็ต้อง Update เพราะมี Patch Security ที่สำคัญ Container ก็เหมือนกัน อย่าขี้เกียจ Update

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

Containerd กับ Docker ต่างกันยังไง?

Docker คือ Platform ที่ครอบคลุมทุกอย่าง ตั้งแต่ Image Building, Registry, Runtime ส่วน Containerd คือ Runtime Component ที่ Docker ใช้จริงๆ พูดง่ายๆ คือ Docker คือรถ Containerd คือเครื่องยนต์

CRI-O เหมาะกับใคร?

CRI-O เหมาะกับคนที่ใช้ Kubernetes เป็นหลัก เพราะ CRI-O ถูกออกแบบมาให้ทำงานร่วมกับ Kubernetes โดยเฉพาะ

ควรเลือก Container Runtime ตัวไหนดี?

ถ้าเน้น Production Grade และ Performance Containerd คือตัวเลือกที่ดี ถ้าใช้ Kubernetes ก็ควรใช้ CRI-O ถ้าเพิ่งเริ่มต้น อาจจะลอง Docker ดูก่อนก็ได้

สรุป

Container Runtime เป็นหัวใจสำคัญของการใช้ Container เลือกให้เหมาะกับงาน Monitor ให้ดี Secure ให้แน่น กำหนด Resource ให้พอดี และ Update อยู่เสมอ ทำตามนี้ รับรองว่า Container ของน้องๆ จะทำงานได้อย่างราบรื่นแน่นอน!

อย่าลืมไปลองเล่น iCafeForex นะน้องๆ และแวะมาอ่านบทความอื่นๆ ที่ SiamCafe Blog ได้เลย