จัดการ Docker Containers — Mac เบา VM รับหนัก
36 Docker Containers รันบน Mac ค้างหนัก → แบ่ง 2 กลุ่ม (Back Office ย้าย VM / Dev เก็บบน Mac) เชื่อมด้วย SSH Tunnel ไม่ต้องแก้โค้ด ตั้งค่า 30 นาที
จัดการ Docker Containers — Mac เบา VM รับหนัก
Loading...
36 Docker Containers รันบน Mac ค้างหนัก → แบ่ง 2 กลุ่ม (Back Office ย้าย VM / Dev เก็บบน Mac) เชื่อมด้วย SSH Tunnel ไม่ต้องแก้โค้ด ตั้งค่า 30 นาที
จัดการ Docker Containers — Mac เบา VM รับหนัก
เราเล่าจากการทดลองจริงในแล็บ ไม่ใช่ทฤษฎี — และให้หลักฐานพูดแทน
จุดเจ็บ: เครื่องมือดี ๆ มีเยอะ แต่ตั้งค่าครั้งแรกยาก คนส่วนใหญ่ติดตรงเริ่มไม่ถูก
เดิมพัน: เสียเวลาเป็นวันกับการตั้งค่าผิด ๆ ทั้งที่ทำให้ถูกตั้งแต่แรกได้
สิ่งที่เราทำในแล็บ: 36 Docker Containers รันบน Mac ค้างหนัก → แบ่ง 2 กลุ่ม (Back Office ย้าย VM / Dev เก็บบน Mac) เชื่อมด้วย SSH Tunnel ไม่ต้องแก้โค้ด ตั้งค่า 30 นาที
36 Containers บน Mac ค้างหนัก → แบ่ง 2 กลุ่ม ย้ายไป VM — Mac กลับมาเร็วใน 30 นาที
อัปเดตล่าสุด: 2026-04-05
Mac เครื่องแรง พัดลมหมุนไม่หยุด RAM ใช้จนเกือบหมด — ทั้งที่ไม่ได้เปิดอะไรนอกจาก VSCode กับ Chrome
เช็คดู: Docker containers (กล่องที่ห่อ software ให้รันแยกกัน) ทำงานอยู่ 36 ตัวพร้อมกัน — Database 4 ตัว, Cache 2 ตัว, Monitoring 5 ตัว, Reverse Proxy 2 ตัว, App อีก 20+ ตัว ทุกอย่างรันบน Mac หมด
ทั้งที่มี VM (Virtual Machine — เครื่องเสมือนบน server) ที่มี RAM 40GB ว่างๆ อยู่ ไม่ได้ใช้งาน
ปัญหาไม่ใช่ว่า Mac ไม่แรง — แต่เอาพนักงาน 36 คนมานั่งโต๊ะตัวเดียว ทั้งที่มีห้องว่างอยู่
Docker container แต่ละตัวกินทั้ง RAM, CPU และ Disk I/O พร้อมกัน — รัน 36 ตัว = Mac ต้องทำงานหนักตลอดเวลา แม้จะไม่ได้ใช้งาน container นั้นอยู่ก็ตาม
ลองนึกภาพแบบนี้:
= โต๊ะทำงาน (พื้นที่จำกัด)
= ห้อง server (RAM 40GB)
= พนักงาน ทำงานคนละอย่าง
ตอนนี้เอาพนักงาน 36 คนมานั่งทำงานบนโต๊ะตัวเดียว (Mac) — มันก็แน่นและค้างเป็นธรรมดา ทั้งที่มีห้อง server (VM) ว่างๆ รอใช้งานอยู่
Container ที่ไม่ได้แก้โค้ดทุกวัน ไม่จำเป็นต้องรันบน Mac — ย้ายไปอยู่ VM ก็ทำงานเหมือนกันทุกประการ
หลักการแบ่ง container ง่ายมาก: ถ้าไม่ได้เปิดโค้ดของมันใน VSCode → ไม่ต้องรันบน Mac ให้แบ่งออกเป็น 2 กลุ่ม
พวกนี้ไม่ต้องอยู่บน Mac เพราะไม่ได้แก้โค้ดของมัน — แค่ต้อง "รันอยู่เฉยๆ" ให้บริการ
| Container | ทำหน้าที่อะไร | ทำไมไม่ต้องอยู่บน Mac |
|---|---|---|
| PostgreSQL / MySQL | เก็บข้อมูล (Database) | แค่รับคำสั่ง ไม่ต้องแก้โค้ด |
| Redis / Dragonfly | Cache (ที่เก็บข้อมูลชั่วคราวให้เร็ว) | รันอยู่เฉยๆ ดูผ่าน browser ได้ |
| Prometheus / Grafana | Monitoring (ดูสถานะระบบ) | ดูผ่าน browser ได้อยู่แล้ว |
| Portainer | จัดการ container ผ่าน web | ดูผ่าน browser เหมือนกัน |
| Nginx / Traefik | Reverse Proxy (จัดการ traffic เข้าออก) | รันบน server เหมาะกว่า |
พวกนี้คือ app ที่กำลังเขียนโค้ดอยู่ — ต้องอยู่ใกล้มือเพราะต้องแก้ → restart → ดูผลบ่อย
| Container | ทำไมต้องอยู่บน Mac |
|---|---|
| App ที่กำลัง develop | ต้องแก้โค้ด → restart → ดูผลบ่อย |
| Frontend ที่กำลังทำ | ต้อง Hot Reload (อัปเดตหน้าจออัตโนมัติ) เร็ว |
หลักการง่ายๆ: ถ้าไม่ได้เปิดโค้ดของมันใน VSCode → มันไม่ต้องรันบน Mac
ย้าย database ไป VM แล้ว app บน Mac ยังเรียกใช้ได้เหมือนเดิม ไม่ต้องแก้โค้ดสักบรรทัด
SSH Tunnel (ท่อเชื่อมเข้ารหัสระหว่าง 2 เครื่อง) แก้ปัญหาสำคัญ: ถ้าย้าย Database ไป VM แล้ว app บน Mac จะคุยกับ Database ยังไง?
คิดซะว่า SSH Tunnel เป็น "สายโทรศัพท์ภายใน" ระหว่าง Mac กับ VM — app บน Mac ยังพูดว่า "ติดต่อ Database ที่ localhost" เหมือนเดิม แต่จริงๆ สายโทรศัพท์วิ่งไปถึง VM อัตโนมัติ
SSH Tunnel = app ไม่ต้องรู้ด้วยซ้ำว่า Database อยู่คนละเครื่อง — ยังใช้ localhost เหมือนเดิม ไม่ต้องแก้โค้ดแม้แต่บรรทัดเดียว
ผลลัพธ์: app บน Mac ยังใช้ localhost:5432 เหมือนเดิม ไม่ต้องแก้ connection string (ที่อยู่สำหรับเชื่อมต่อ) เลย แต่จริงๆ ข้อมูลวิ่งไปถึง Database บน VM อัตโนมัติ
การสร้าง SSH Tunnel ใช้คำสั่งเดียว เปิดทางเชื่อม 3 services พร้อมกัน — ไม่ต้องติดตั้งอะไรเพิ่ม เพราะ Mac มี SSH มาให้อยู่แล้ว
ssh -N -L 5432:localhost:5432 \
-L 6381:localhost:6381 \
-L 3000:localhost:3000 \
myserver
| ส่วน | ความหมาย |
|---|---|
-N | บอกว่าไม่ต้องเปิด shell แค่เปิดทางเชื่อม |
-L 5432:localhost:5432 | port 5432 บน Mac → วิ่งไป port 5432 บน VM |
myserver | SSH alias (ชื่อย่อ) ของ VM ที่ตั้งไว้ใน config |
SSH Tunnel = คำสั่งเดียว ไม่ต้องติดตั้งอะไรเพิ่ม app ไม่ต้องแก้โค้ด — เปิดทางเชื่อมกี่ port ก็ได้พร้อมกัน
ลดจาก 36 ตัว เหลือแค่ตัวที่กำลัง develop จริงๆ — Mac กลับมาเร็วเหมือนเครื่องใหม่
จาก 36 containers ที่ running อยู่บน Mac ลองใช้หลักการ "Back Office vs Dev" แบ่งออกเป็น 3 กลุ่มชัดเจน
จาก 36 containers → ย้ายไป VM ~28 ตัว + ปิดอีก 3-4 ตัว → เหลือบน Mac แค่ 4-5 ตัว — Mac เร็วขึ้นทันทีโดยไม่ต้องซื้อ RAM เพิ่ม
การจัดการ Docker containers บน Mac มี 3 แนวทางหลัก — แต่ละแบบเหมาะกับสถานการณ์และระดับความพร้อมที่ต่างกัน
ความยาก: ง่ายมาก
ผลลัพธ์: Mac เร็วขึ้นทันที
ข้อเสีย: ต้องเปิด/ปิดเองทุกครั้ง
วิธีทำ: คลิก Stop ใน OrbStack
เหมาะกับ: แก้ปัญหาเฉพาะหน้า
ความยาก: ตั้งค่าครั้งแรก ~30 นาที
ผลลัพธ์: Mac เบามาก + services ใช้ได้หมด
ข้อเสีย: ต้องเปิด tunnel ก่อนทำงาน
วิธีทำ: ย้าย docker-compose ไป VM + ตั้ง tunnel
เหมาะกับ: ใช้งานระยะยาว ✅ แนะนำ
ความยาก: ต้องปรับ workflow ทั้งหมด
ผลลัพธ์: Mac แทบไม่โดนใช้เลย
ข้อเสีย: ต้องมี internet ตลอด มี latency บ้าง
วิธีทำ: VSCode Remote SSH เข้า VM
เหมาะกับ: คนที่มี server แรงๆ (RAM 40GB+)
แนะนำแนวทาง B สำหรับคนที่มี VM อยู่แล้ว — สมดุลระหว่างความง่ายกับผลลัพธ์ ตั้งค่าครั้งเดียวใช้ได้ตลอด
แยก services ที่เป็น infra (database, cache, monitoring) ออกจาก dev — ให้ Cursor AI ช่วยแยกได้เลย ใช้เวลาไม่ถึง 5 นาที
Copy docker-compose.infra.yml ไป VM แล้วสั่ง up — ให้ Cursor AI ช่วยเขียน deploy script ที่ sync ไฟล์อัตโนมัติ
เขียน SSH config + เปิด tunnel เชื่อม Mac กับ VM — คำสั่งเดียวเปิดทุก port ที่ต้องใช้ ไม่ต้องจำ IP
ทดสอบว่า app บน Mac เรียก database ผ่าน tunnel ได้ปกติ → แล้วค่อยปิด containers เก่าบน Mac ทิ้ง ทีละตัวก็ได้ ไม่ต้องรีบ
วันนี้: ปิด containers ที่ไม่ได้ใช้ให้เหลือ < 10 ตัว → สัปดาห์นี้: ย้าย infra ไป VM แบบถาวร
| ระยะสั้น (วันนี้) | ระยะยาว (สัปดาห์นี้) |
|---|---|
| ปิด containers ที่ไม่ได้ใช้ ให้เหลือ < 10 ตัว | ย้าย DB + infra ไป VM ถาวร |
| Mac จะเร็วขึ้นทันที ไม่ต้องรอ | Mac เก็บแค่ app ที่กำลัง develop |
| ไม่ต้องตั้งค่าอะไร แค่คลิก Stop | ตั้งค่าครั้งเดียว ใช้ได้ตลอด |
ถ้า VM อยู่บน network เดียวกัน (LAN) — latency (ความหน่วง) ต่ำมาก แทบไม่รู้สึกต่างจาก localhost สำหรับ development ไม่มีผลกระทบ ถ้า VM อยู่บน cloud อาจเพิ่ม 1-5ms ซึ่งยังน้อยมากสำหรับการ develop
ใช้ autossh (ตัวช่วยที่ reconnect อัตโนมัติ) แทน SSH ธรรมดา — autossh จะเชื่อมต่อใหม่เองเมื่อ connection หลุด ตั้งค่าครั้งเดียว ไม่ต้องสนใจอีก ให้ Cursor AI ช่วยเขียน config ได้เลย
ไม่ต้องเปลี่ยน — OrbStack เบากว่า Docker Desktop มากและรองรับ SSH Tunnel เหมือนกัน ถ้าใช้ OrbStack อยู่แล้วก็ใช้ต่อได้เลย แค่ย้าย containers ที่ไม่จำเป็นออกจาก Mac เท่านั้น
SSH Tunnel = เปิด "ท่อ" เฉพาะ port ที่ต้องใช้ (เช่น database) ยังแก้โค้ดบน Mac อยู่ VSCode Remote SSH = ย้ายทุกอย่างไปแก้โค้ดบน VM เลย Mac เป็นแค่หน้าจอ ทั้งสองใช้ SSH แต่ scope ต่างกัน — Tunnel เหมาะกับคนที่ยังอยากแก้โค้ดบน Mac
container ส่วนใหญ่ (database, cache, monitoring) ใช้ RAM ตัวละ 200MB-2GB — รัน 28 containers บน VM 40GB ใช้ RAM ประมาณ 60-70% ยังมีที่ว่างเหลือ คุ้มค่ากว่ารันบน Mac มาก
เริ่มจากเปิด OrbStack หรือ Docker Desktop ดูว่ามี container กี่ตัวที่ running — แล้วถามตัวเองว่า ตัวไหนกำลังแก้โค้ดอยู่จริง? ที่เหลือ stop หรือย้ายไป VM ได้เลย
สิ่งที่ได้ และหลักคิด
ของจริงที่เอาไปใช้ต่อได้ ไม่ใช่แค่ไอเดีย หลักคิดของเราคือทำให้เป็นระบบที่ทำซ้ำได้และไม่พึ่งความจำคน
อยากเห็นระบบแบบนี้ทำงานกับงานของคุณ — ดู ViberQC และลงชื่อรอรอบทดลองที่ hilogiclabs.com
สมัครสมาชิก Hi Logic Labs เพื่อเข้าถึง Content, Template และ Community คุณภาพสูง
สมัครสมาชิก
หลาย Project บน Server เดียว ทีมหลายคน clone แยก กิน Disk มหาศาล → ใช้ Bare Repo + Worktree แชร์ .git เดียว ประหยัด Disk ~80% + wt helper script ทีมสร้าง worktree ได้ใน 30 วินาที

Blueprint สำหรับทีม Viber — AI สร้าง ทดสอบ และ Optimize โฆษณาอัตโนมัติ 6 Platforms ด้วย 9 AI Agents + Thompson Sampling เริ่มต้น ฿990/เดือน