หนึ่งในคำถามยอดฮิตของคนเริ่มใช้ 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 มีขั้นตอนดังนี้:
- เขียน Dockerfile หรือเลือก Image จาก Docker Hub
- Build หรือ Pull เพื่อได้มา Docker Image ไว้ในเครื่อง
- สั่ง
docker runเพื่อสร้าง Container จาก Image นั้น - Container เริ่มทำงาน สามารถ Start/Stop/Delete ได้เสมอ
ข้อควรระวัง: ข้อมูลใน Container ไม่เสมอ
เมื่อลบ Container ข้อมูลที่เขียนไว้ภายในจะหายไปด้วย เนื่องจาก Container มีแค่ Layer เพิ่มเติมอยู่บน Image (Read-only) หากต้องการเก็บข้อมูลถาวร ต้องใช้ Docker Volume แทน
สรุป
Image คือแม่แบบที่ไม่เปลี่ยนแปลง ส่วน Container คือสิ่งที่ทำงานจริง สร้างจาก Image และลบได้เมื่อไม่ต้องการ เมื่อเข้าใจความแตกต่างนี้แล้ว ขั้นตอนถัดไปคือเรียนรู้ Docker Commands เพื่อจัดการ Image และ Container ได้อย่างคล่องแคล่วครับ

