Docker Image vs Container ต่างกันอย่างไร?

หนึ่งในคำถามยอดฮิตของคนเริ่มใช้ Docker คือ “Image กับ Container ต่างกันยังไง?” บทความนี้จะอธิบายความแตกต่างให้ชัดเจนด้วยตัวอย่างที่เข้าใจง่าย

Docker Image คืออะไร?

Docker Image คือ แม่แบบ (Template) แบบ Read-only ที่บรรจุ OS, Runtime, Library และโค้ดของ Application ไว้ครบ Image ไม่สามารถเปลี่ยนแปลงได้โดยตรง แต่ใช้เป็นเหมือนสูตรสำหรับสร้าง Container

Image ถูกสร้างจาก Dockerfile ซึ่งเป็นไฟล์คำสั่งที่บอกว่าจะให้สร้าง Image อย่างไร หรือดาวน์โหลดมาจาก Docker Hub โดยตรงก็ได้

Docker Container คืออะไร?

Docker Container คือ Instance ที่กำลังทำงานอยู่ ที่สร้างขึ้นจาก Image Container เป็น Process ที่แยกตัวออกจาก Host สามาถอ่านสถานะ เขียนไฟล์ และทำงานได้อย่างอิสระ แต่ส่งผ่าน Network ไปยัง Container อื่นหรือภายนอกได้

เปรียบเหมือนสุตรกับการอบ

วิธีที่ง่ายที่สุดในการจำความแตกต่างคือเปรียบกับการอบขนม:

  • Image — เหมือน สูตรการอบ ที่เขียนไว้อย่างใดเปลี่ยนแปลงไม่ได้ ใช้ซ้ำได้เสมอ
  • Container — เหมือน ขนมที่อบออกมาจากสูตรนั้น สามารถเพิ่มเนย เปลี่ยนหน้า หรือทิ้งได้หลังกินเสร็จ

จาก Image เดียว สามารถสร้าง Container ได้หลายตัวพร้อมกัน เหมือนอบขนมจากสูตรเดียวกันหลายก้อนพร้อมกันได้เลย

เปรียบเหมือน Class กับ Object ใน OOP

สำหรับนักพัฒนา อาจเปรียบได้กับแนวคิด OOP:

  • Image = Class — บลูปรินท์ที่กำหนดไว้ล่วงหน้า เปลี่ยนแปลงไม่ได้หลังสร้าง
  • Container = Object — Instance ที่สร้างจาก Class มีชีวิตเป็นของตัวเอง แก้ไขหรือลบทิ้งได้

ความแตกต่างหลัก

หัวข้อ Docker Image Docker Container
สถานะ Read-only, เปลี่ยนไม่ได้ Read-write, ทำงานอยู่
อยู่ที่ไหน เก็บใน Local หรือ Registry รันเป็น Process ในระบบ
สร้างจาก Dockerfile หรือ Docker Hub สร้างจาก Image
จำนวน 1 Image = หลาย Container ได้ 1 Container = 1 Instance
เมื่อสิ้นสุด ยังอยู่เสมอ หยุดและลบได้

ดู Image ที่มีอยู่ในเครื่อง

docker images

สร้าง Container จาก Image

# สร้างและรัน Container ทันที
 docker run nginx

# สร้าง Container แล้วรันส่ง Port 80 ออกมา
docker run -d -p 80:80 nginx

# ดู Container ที่กำลังรันอยู่
docker ps

ความสัมพันธ์ระหว่าง Image และ Container

กระบวนการทำงานของ Docker มีขั้นตอนดังนี้:

  1. เขียน Dockerfile หรือเลือก Image จาก Docker Hub
  2. Build หรือ Pull เพื่อได้มา Docker Image ไว้ในเครื่อง
  3. สั่ง docker run เพื่อสร้าง Container จาก Image นั้น
  4. Container เริ่มทำงาน สามารถ Start/Stop/Delete ได้เสมอ

ข้อควรระวัง: ข้อมูลใน Container ไม่เสมอ

เมื่อลบ Container ข้อมูลที่เขียนไว้ภายในจะหายไปด้วย เนื่องจาก Container มีแค่ Layer เพิ่มเติมอยู่บน Image (Read-only) หากต้องการเก็บข้อมูลถาวร ต้องใช้ Docker Volume แทน

สรุป

Image คือแม่แบบที่ไม่เปลี่ยนแปลง ส่วน Container คือสิ่งที่ทำงานจริง สร้างจาก Image และลบได้เมื่อไม่ต้องการ เมื่อเข้าใจความแตกต่างนี้แล้ว ขั้นตอนถัดไปคือเรียนรู้ Docker Commands เพื่อจัดการ Image และ Container ได้อย่างคล่องแคล่วครับ