โหมดมืด
บทที่ 3 — Docker สำหรับ DevOps (quick reference — ของจริงอยู่ Docker Book)
← บทที่ 2 | สารบัญ | บทที่ 4 →
ℹ️ บทนี้เป็น quick reference สั้น ๆ — เนื้อหาเต็มอยู่ที่ Docker Book ลำดับการอ่านหลักตาม README คือข้ามจากบท 02 ไป Docker Book โดยตรง
🚦 ถ้าคุณมาจากบท 02 และยังไม่รู้จัก Docker เลย — ข้ามไปที่ Docker Book โดยตรง: docker/README.md → แล้วค่อยกลับมาบทนี้ หลังอ่านจบ Docker Book แล้ว บทนี้เป็นสรุปย้อนกลับมาดู ไม่ใช่บทสอน
📚 บทนี้คือ "ภาพรวมสั้น" สำหรับ DevOps generalist — เนื้อหา Docker ฉบับเต็มและลึกอยู่ที่ Docker Book → (6 บท) บทนี้ไม่สอนซ้ำ แต่ให้คุณเห็นภาพว่า Docker อยู่ตรงไหนในงาน DevOps แล้วชี้ทางไปเรียนลึก
👶 มือใหม่ที่ยังไม่เคยใช้ Docker เลย → ข้ามไปอ่าน Docker Book ให้จบก่อน แล้วค่อยกลับมาบทนี้ — บทนี้เป็นแผนที่สำหรับคนที่พอใช้ Docker เป็นแล้ว ไม่ใช่บทสอน
หลังจบบท คุณจะ:
- เข้าใจว่า Docker แก้ปัญหาอะไรในสาย DevOps
- รู้คำศัพท์แกน (image, container, layer, registry — นิยามเต็มอยู่หัวข้อ 3) พอคุยกับทีมรู้เรื่อง
- รู้ว่าจะไปเรียน Docker ลึกที่บทไหนของ Docker Book
🗓️ Baseline 2026: Docker Engine 27+ / Docker Desktop 4.40+ · BuildKit เป็น builder default · Compose v2 เท่านั้น (binary
docker-composeตัวเก่าถูกถอดแล้ว ใช้docker composeมี space) ·docker initช่วยสร้าง template Dockerfile/Compose · rootless mode พร้อมใช้งานจริง💡 ถ้า
docker composeไม่ทำงาน: ให้เช็ค Docker Desktop version ต้องเป็น 4.0+ แล้วรันdocker versionดูว่ามี Compose plugin อยู่หรือเปล่า (หัวข้อDocker Compose version:ต้องขึ้น v2.x) — ถ้ายังใช้docker-compose(มีขีด) อยู่ ให้อัปเกรด Docker Desktop ก่อน
1. ทำไม Docker สำคัญกับ DevOps
ปัญหาก่อน Docker — "It works on my machine" (แปลตรงตัวว่า "บนเครื่องผมมันทำงานได้นี่ครับ" — ประโยคที่ dev ทั่วโลกมักพูดเวลาโค้ดพังที่อื่นแต่รันได้ในเครื่องตัวเอง เป็นข้อร้องเรียนซ้ำ ๆ ที่ทีม ops ได้ยินบ่อย ไม่ใช่ศัพท์ทางการ)
text
# Dev (เครื่องนักพัฒนา): Ubuntu 22 + Node 22 + Postgres 16
# Prod (เครื่องจริง): Ubuntu 20 + Node 20 + Postgres 15
# QA (เครื่องทดสอบ): macOS + Node 21 + Postgres 16
#
# → Bug ทุกครั้งที่ deploy เพราะ environment ไม่ตรงกัน
# (Node 22 ใน 2026 = LTS รุ่นล่าสุด — ตัวอย่างใช้รุ่นปัจจุบันจริง)Docker แก้ด้วยแนวคิดเดียว
text
# 1 Image = code + runtime + library + config
# (รวมทุกอย่างใส่กล่องเดียว)
# ทุก environment ใช้ image เดียวกัน
# → "Works the same everywhere" (ทำงานเหมือนเดิมทุกที่)นี่คือเหตุผลที่ Docker กลายเป็นรากฐานของ CI/CD (บทที่ 5) และ Kubernetes (บทที่ 4) — ทุกอย่างใน DevOps สมัยใหม่วางอยู่บน container (กล่องที่รัน app แบบแยกขาดจากเครื่อง host)
💡 เกร็ดสำคัญปี 2026: ถึงทุกอย่างจะวางอยู่บน container แต่ "Docker" ≠ "container runtime" แล้ว — Docker เป็นเครื่องมือ dev/build ที่ดีที่สุด ส่วน runtime ตัวจริงใน Kubernetes/cloud ตอนนี้คือ containerd + runC (Docker เองก็ใช้สองตัวนี้ข้างใต้) มาตรฐาน image กลางที่ทุกฝ่ายใช้ร่วมกันชื่อ OCI (Open Container Initiative — กติกากลางที่ทุกเครื่องมือ container ตกลงร่วมกัน ทำให้ image ที่สร้างจากเครื่องมือหนึ่งใช้กับอีกเครื่องมือได้) → image ที่ build ด้วย Docker รันบน containerd ของ K8s ได้เลย
2. Container vs VM — ต่างกันที่ไหน
📝 อ่าน diagram อย่างไร: ลูกศรชี้จาก "ฐานล่าง → ชั้นบน" ตามลำดับการบูต — host ต้องพร้อมก่อน ค่อยขึ้น runtime/hypervisor แล้วจึงรัน app ข้างบนสุด ตัวเลข GB/MB เป็นค่าประมาณ (image จริงตั้งแต่ scratch 5MB ถึง full Ubuntu image ~80MB; container ที่ผูก data จะใหญ่ขึ้น)
🔧 หมายเหตุ runtime ปี 2026: เดิม diagram นี้เคยเขียนว่า "Docker Engine" — แต่ใน Kubernetes/cloud production ทุกวันนี้ใช้ containerd (หรือ CRI-O) เป็น runtime ส่วน Docker คือเครื่องมือ dev/build บนเครื่อง dev เท่านั้น
Container = process ที่ถูก "isolate" (แยกขาดจาก process อื่น) ด้วยกลไก kernel ของ Linux 2 ตัว:
- namespace — แยก "มุมมอง" ของ process ให้เห็นเฉพาะของตัวเอง เช่น เห็น process ของตัวเอง, network ของตัวเอง, filesystem ของตัวเอง ราวกับอยู่คนละเครื่อง
- cgroup (control group) — จำกัด "ทรัพยากร" ที่ process ใช้ได้ เช่น CPU 0.5 core, RAM 512MB, IO เท่านี้
เบาและเร็วกว่า VM เพราะใช้ kernel ของ host ร่วมกัน ไม่ต้องบูต OS ใหม่
🔍 อยากเข้าใจ namespace/cgroup ใต้พรมจริง ๆ → Docker Book บทที่ 00
3. คำศัพท์แกนที่ต้องรู้ (พอคุยกับทีม)
| คำ | ความหมายสั้น ๆ |
|---|---|
| Image | แม่พิมพ์ที่อ่านอย่างเดียว มี code + dependency ครบ (เป็นไปตามมาตรฐาน OCI) |
| Container | instance ที่รันจริงจาก image (เหมือน object จาก class) |
| Layer | image ประกอบจากชั้น ๆ ที่ cache ได้ → build เร็วขึ้น |
| Dockerfile | สูตรสร้าง image ทีละขั้น |
| Registry | ที่เก็บ image (Docker Hub, GHCR, ECR) — เหมือน git remote ของ image |
| Volume | ที่เก็บข้อมูลถาวร ไม่หายเมื่อ container ตาย |
| Compose | รันหลาย container พร้อมกันด้วยไฟล์ config เดียว (ใช้คำสั่ง docker compose — Compose v2) |
| BuildKit | ตัว build engine ใหม่ (default ตั้งแต่ Docker 23) — build ขนานได้, cache ดีกว่า, รองรับ multi-arch |
| multi-arch | image เดียวรันได้ทั้ง amd64 (PC/server) และ arm64 (Mac M-series, Raspberry Pi, Graviton) |
| distroless | base image ที่มีแค่ runtime + app ไม่มี shell/package manager → เล็กและปลอดภัยขึ้น |
| SBOM | Software Bill of Materials — รายการ "ส่วนผสม" ของ image (มีไลบรารีอะไร เวอร์ชันอะไร) ใช้ตรวจ vulnerability |
| rootless | รัน Docker daemon ในนาม user ธรรมดา ไม่ต้อง root → ลดผลกระทบถ้าโดนเจาะ |
4. ไปเรียนลึกต่อที่ไหน — แผนที่ Docker Book
| อยากเข้าใจ... | อ่านบทนี้ |
|---|---|
| Container internals — namespace, cgroup, มาตรฐาน OCI | Docker 00 — Mindset + Architecture |
| Layer (ชั้น cache), multi-stage build, distroless, BuildKit, cache | Docker 01 — Images Deep |
| Network — bridge / host / overlay, DNS, port mapping | Docker 02 — Networking |
| เก็บข้อมูล — bind mount, volume, tmpfs, storage driver | Docker 03 — Volumes + Storage |
| Compose สำหรับ production (healthcheck, secrets) | Docker 04 — Compose Production |
| ความปลอดภัย — rootless, image signing, scan, SBOM, optimization | Docker 05 — Security + Optimization |
✅ Checkpoint
- Docker แก้ปัญหา "it works on my machine" ด้วยแนวคิดอะไร?
- Container ต่างจาก VM ตรงไหน ทำไมจึงเบากว่า?
- Image กับ Container ต่างกันยังไง?
- ถ้าต้องทำ multi-stage build ให้ image เล็กลง ควรไปอ่านบทไหนของ Docker Book?
- ใน K8s production ปี 2026 container runtime ตัวจริงคืออะไร — Docker Engine หรือ containerd?
🛠️ Lab อยู่ในเล่มเต็ม — Docker Book มี Lab ลงมือทำครบทุกบท เริ่มที่ Docker 00