Docker container และ shipping

เริ่มต้นใช้ Docker บน VPS สำหรับคนที่ยังไม่เคยลอง

มิถุนายน 2026 · อ่าน 7 นาที

Docker เปลี่ยนวิธีที่นักพัฒนารัน software บนเซิร์ฟเวอร์ไปโดยสิ้นเชิง แทนที่จะติดตั้ง software ลงบน OS ตรง ๆ คุณรันมันใน container ที่แยกออกจากระบบ บทความนี้อธิบายว่า Docker คืออะไรและใช้อย่างไรบน VPS


Docker คืออะไร และต่างจาก VM อย่างไร

VM (Virtual Machine) จำลอง hardware ทั้งหมดรวมถึง OS ทำให้หนักและเริ่มช้า Docker ใช้แค่ OS kernel ของ host และ isolate เฉพาะ process ทำให้เบากว่ามากและเริ่มเร็วภายในวินาที

ติดตั้ง Docker บน Ubuntu/Debian

curl -fsSL https://get.docker.com | sh
usermod -aG docker $USER   # เพิ่ม user ให้รัน docker ได้โดยไม่ต้อง sudo
newgrp docker

ตรวจสอบการติดตั้ง:

docker run hello-world

คำสั่ง Docker พื้นฐาน

# รัน container จาก image
docker run -d -p 80:80 nginx

# ดู container ที่กำลังรัน
docker ps

# ดู log ของ container
docker logs container_id

# หยุด container
docker stop container_id

# ลบ container
docker rm container_id

# ดู image ที่มีอยู่
docker images

# ลบ image
docker rmi image_name

Docker Compose: รันหลาย Container พร้อมกัน

แอปส่วนใหญ่ต้องการหลาย service พร้อมกัน เช่น web server + database + cache Docker Compose ช่วยจัดการด้วย file เดียว

ตัวอย่าง docker-compose.yml สำหรับ WordPress:

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpress
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: rootpass
    depends_on:
      - db

volumes:
  db_data:
docker compose up -d   # รันทุก service แบบ background
docker compose down    # หยุดและลบ container ทั้งหมด

Volume: เก็บข้อมูลไม่ให้หายเมื่อ Container ถูกลบ

ข้อมูลใน container จะหายทันทีเมื่อลบ container ต้อง mount volume เพื่อเก็บข้อมูลถาวร:

# Mount directory จาก host
docker run -v /host/path:/container/path nginx

# ใช้ named volume (Docker จัดการเอง)
docker run -v mydata:/app/data nginx

ข้อควรระวังบน VPS


สรุป

Docker ทำให้การ deploy แอปพลิเคชันบน VPS ง่ายและ reproducible ขึ้นมาก environment ที่รันบน local machine จะทำงานเหมือนกันบน production server ลง Docker แล้วลอง run nginx หรือ WordPress ด้วย Compose ดูก่อน จะเห็นภาพทันที

ตรวจสอบว่า Docker ทำงานถูกต้อง

# ตรวจ Docker daemon
systemctl status docker

# ดู container ที่รันอยู่
docker ps

# ดู resource usage ทุก container
docker stats --no-stream

# ตรวจ disk ที่ Docker ใช้
docker system df
ทำความสะอาด Docker: รัน docker system prune เป็นประจำเพื่อลบ unused container, network และ image ที่ไม่ได้ใช้แล้ว ป้องกัน disk เต็มจาก Docker layers

แก้ปัญหาที่พบบ่อย

Error: "Got permission denied while trying to connect to Docker daemon"

User ยังไม่ได้อยู่ใน docker group:

# เพิ่ม user เข้า docker group
usermod -aG docker $USER

# Logout แล้ว login ใหม่ หรือรัน
newgrp docker

# ทดสอบ
docker ps

Error: "port is already allocated" ตอน docker run

Port นั้น service อื่นใช้อยู่แล้ว:

# ดูว่า port ไหนถูกใช้อยู่
ss -tlnp | grep :80
# หรือ
lsof -i :80

# หยุด service ที่ขัดแย้ง
systemctl stop nginx
# หรือเปลี่ยน port ที่ Docker publish
docker run -p 8080:80 nginx   # ใช้ port 8080 แทน

Container restart loop — status "Restarting"

# ดู log ของ container ที่ crash
docker logs container_name --tail=50
docker logs container_name --since 5m

# ดู exit code
docker inspect container_name | grep ExitCode

Docker compose ขึ้น error "yaml: line X: did not find expected key"

YAML indentation ผิด ต้องใช้ space ไม่ใช่ tab:

# ตรวจ yaml syntax
docker compose config
# ถ้าถูกต้องจะแสดง config ที่ parse แล้ว

Log ของ container กิน disk เต็ม

ตั้ง log limit ใน docker-compose.yml:

services:
  myapp:
    image: myapp:latest
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

คำถามที่พบบ่อย

Docker ต้องการ RAM เพิ่มขึ้นเท่าไร?

Docker daemon เองกิน RAM ประมาณ 100–200 MB แต่ละ container ขึ้นอยู่กับ app ที่รัน เช่น Nginx container กิน 10–30 MB, MySQL กิน 200–500 MB ควรมี RAM เหลือเผื่อไว้อย่างน้อย 500 MB

Docker กับ VPS spec ต่ำใช้ได้ไหม?

ได้ Docker เบากว่า VM มาก แต่ถ้า container หลายตัวรันพร้อมกันใช้ RAM รวมกัน VPS 1 GB RAM รัน 2–3 container เล็กๆ ได้สบาย แต่ถ้ารัน database + web + cache พร้อมกัน ควรมี RAM 2 GB+

ข้อมูลใน Docker volume จะหายไหมถ้า update image?

ไม่หาย Volume แยกจาก container lifecycle การ docker compose pull และ up -d จะ recreate container แต่ volume ที่ mount ไว้ยังคงอยู่ครบ