Skip to content

บทที่ 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)
Containerinstance ที่รันจริงจาก image (เหมือน object จาก class)
Layerimage ประกอบจากชั้น ๆ ที่ 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-archimage เดียวรันได้ทั้ง amd64 (PC/server) และ arm64 (Mac M-series, Raspberry Pi, Graviton)
distrolessbase image ที่มีแค่ runtime + app ไม่มี shell/package manager → เล็กและปลอดภัยขึ้น
SBOMSoftware Bill of Materials — รายการ "ส่วนผสม" ของ image (มีไลบรารีอะไร เวอร์ชันอะไร) ใช้ตรวจ vulnerability
rootlessรัน Docker daemon ในนาม user ธรรมดา ไม่ต้อง root → ลดผลกระทบถ้าโดนเจาะ

4. ไปเรียนลึกต่อที่ไหน — แผนที่ Docker Book

อยากเข้าใจ...อ่านบทนี้
Container internals — namespace, cgroup, มาตรฐาน OCIDocker 00 — Mindset + Architecture
Layer (ชั้น cache), multi-stage build, distroless, BuildKit, cacheDocker 01 — Images Deep
Network — bridge / host / overlay, DNS, port mappingDocker 02 — Networking
เก็บข้อมูล — bind mount, volume, tmpfs, storage driverDocker 03 — Volumes + Storage
Compose สำหรับ production (healthcheck, secrets)Docker 04 — Compose Production
ความปลอดภัย — rootless, image signing, scan, SBOM, optimizationDocker 05 — Security + Optimization

✅ Checkpoint

  1. Docker แก้ปัญหา "it works on my machine" ด้วยแนวคิดอะไร?
  2. Container ต่างจาก VM ตรงไหน ทำไมจึงเบากว่า?
  3. Image กับ Container ต่างกันยังไง?
  4. ถ้าต้องทำ multi-stage build ให้ image เล็กลง ควรไปอ่านบทไหนของ Docker Book?
  5. ใน K8s production ปี 2026 container runtime ตัวจริงคืออะไร — Docker Engine หรือ containerd?

🛠️ Lab อยู่ในเล่มเต็ม — Docker Book มี Lab ลงมือทำครบทุกบท เริ่มที่ Docker 00


← บทที่ 2 | สารบัญ | บทที่ 4 — Kubernetes →