Back to notes
mastery-devops

Docker for Developers: หยุดใช้คำว่า 'ก็นะ เครื่องผมรันได้!' เสียที

เจาะลึกความสำคัญของ Containerization ตั้งแต่ขั้นตอน Development ไปจนถึง Production และวิธีที่มันช่วยปกป้องสุขภาพจิตของ Engineer

February 5, 20262 min read readNNexis by Seereen

🛑 1. The Nightmare: "สงครามเวอร์ชันของ Node.js และฐานข้อมูล"

ลองนึกภาพว่าคุณรับคนใหม่เข้าทีม แล้วเขาต้องใช้เวลา 2 วันในการลงเครื่องมือก่อนจะเริ่มรันโปรเจกต์ได้:

  • "Node.js เครื่องรุ่นพี่ 18 เครื่องผมคือ 22 รันแล้ว error"
  • "ลง PostgreSQL ยังไงให้ตรงกับเวอร์ชันบน Server?"
  • "ทำไม Redis บน Windows ถึงร่วง?"

ปัญหา: ความไม่คงเส้นคงวาของ Environment คือศัตรูตัวฉกาจของความเร็วในการพัฒนาและคุณภาพของซอฟต์แวร์ครับ


💡 2. Real-Life Analogy: การขนส่งสินค้าแบบดั้งเดิม vs ตู้คอนเทนเนอร์

  • ยุคก่อน Docker: เหมือนการขนส่งของที่ระเกะระกะบนเรือลำใหญ่ พอเปลี่ยนเรือ (เปลี่ยน Server) ก็ต้องมาจัดของใหม่ ทุกอย่างกระจัดกระจาย
  • ยุค Docker: เราเอาทุกอย่างที่แอปต้องการ (โค้ด, Runtime, Environment Variable, แฟ้มการตั้งค่า) ยัดใส่ "ตู้คอนเทนเนอร์" มาตรฐานเดียวกัน ทุกเรือทุกท่าจะรู้ทันทีว่าต้องเคลื่อนย้ายตู้คอนเทนเนอร์นี้ยังไง
  • บทสรุป: Docker ช่วยให้มั่นใจว่า "อะไรที่รันได้บนเครื่องโปรแกรมเมอร์ จะต้องรันได้เหมือนกันบนเครื่องเพื่อนร่วมทีม และบน Production Server" ครับ

🚀 3. Execution Journey: Dockerizing the Professional Workflow

ในงานฟรีแลนซ์และโปรเจกต์อย่าง Impressa Shop ผมใช้ Docker เพื่อสร้างความเสถียรดังนี้:

🛠 Step-by-step:

  1. Docker Compose for Dev: สร้างไฟล์เดียวที่รั้งเอา Backend, Frontend และ PostgreSQL ขึ้นมาทำงานพร้อมกันด้วยคำสั่งเดียว (docker-compose up)
  2. Multi-stage Builds: เขียน Dockerfile ให้แยกส่วนการ Build (ที่ใช้พื้นที่เยอะ) ออกจากส่วนการ Run (ขนาดเล็ก) เพื่อให้ Image ที่นำไปใช้จริงมีขนาดเล็กและปลอดภัยที่สุด
  3. Cross-platform Stability: ไม่ว่าเพื่อนในทีมจะใช้ Mac, Windows หรือ Linux ทุกคนจะรันผ่าน Docker Image ตัวเดียวกันเป๊ะ
HLJS DOCKERFILE
# ✅ ตัวอย่าง Multi-stage Build สำหรับ NestJS
# Stage 1: Build
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# Stage 2: Production Run
FROM node:20-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
CMD ["node", "dist/main"]

🪤 4. The Junior Trap: การเก็บข้อมูลไว้ใน Container

จูเนียร์หลายคนมักจะเผลอเอา Database ไปรันใน Docker โดยไม่ตั้งค่า Volumes:

  • ปัญหา: พอ Container ตาย หรือมีการอัปเกรดเวอร์ชัน ข้อมูลทุกอย่างจะหายไปทันที (Data Loss!)
  • ✅ การแก้ไข: ต้องใช้ volumes ใน Docker Compose เสมอเพื่อแชร์พื้นที่เก็บข้อมูลออกมาไว้ที่ตัวเครื่องแม่ (Host) เพื่อความปลอดภัยของข้อมูลครับ

⚖️ 5. The Comparison: Virtual Machine vs Docker

หัวข้อVirtual Machine (VM)Docker (Container)
ความเร็วในการรันช้า (ต้องบูต OS ใหม่ทุกครั้ง)เร็วมาก (รันได้ในไม่กี่วินาที)
การใช้ทรัพยากรกินแรมกิน CPU มหาศาลเบามาก (แชร์ระนาบเดียวกันกับ Host OS)
ความสะดวกต้องย้ายไฟล์ ISO ขนาดกะรัตส่งต่อกันผ่าน Docker Registry ตัวจิ๋ว

🎓 6. Senior Mindset Summary

Docker ไม่ใช่แค่เรื่องของสาย DevOps อีกต่อไปแล้ว แต่มันคือ "มาตรฐานขั้นพื้นฐาน" ของ Software Engineer มืออาชีพครับ การเข้าใจ Docker จะทำให้คุณส่งงานได้อย่างมั่นใจ และลดปัญหาเรื่องแอปพังหน้างานเพราะ Environment ไม่ตรงกันไปได้เกือบ 100% ครับ!

## References

Share this note

Related notes

View all notes
mastery-devops
Advanced

DevOps Mastery: สร้างโรงงานผลิตซอฟต์แวร์อัตโนมัติระดับ Senior

เลิกแค่โยนโค้ดขึ้น Server! เจาะลึกการสร้าง CI/CD Pipeline ที่แข็งแรง, การทำ Blue-Green Deployment และการใช้ Observability เพื่อตรวจจับบั๊กในระดับโปรดักชัน

January 30, 20262 min read
mastery-frontend-nextjs
Advanced

Next.js Production Checklist: คัมภีร์ก่อนกด Deploy ระดับมือโปร

อย่าเพิ่งกด Deploy ถ้ายังไม่ได้อ่านแผ่นนี้! เจาะลึกการเตรียมความพร้อมขั้นสุดท้าย ตั้งแต่การวิเคราะห์ Bundle Size ไปจนถึงการทำ Error Monitoring ที่จะทำให้คุณนอนหลับสบายหลังส่งมอบงาน

January 30, 20262 min read
mastery-platform-devops
Advanced

Docker Database Mastery: บริหารจัดการข้อมูลระดับ Enterprise

เจาะลึกการรัน Database บน Docker อย่างมืออาชีพ ตั้งแต่เรื่อง Persistence (Volumes) ไปจนถึงความปลอดภัยระดับสูงสุดและการทำ Healthchecks

January 30, 20263 min read

© 2026 My Notes by Seereen