
📋 สารบัญ
Docker คืออะไร และทำไมถึงต้องใช้บน VPS
Docker คือเทคโนโลยี Container ที่ช่วยให้คุณรันแอปพลิเคชันในสภาพแวดล้อมที่แยกออกจากกัน (Isolated Environment) โดยไม่ต้องกังวลเรื่อง dependency ขัดแย้งกัน แต่ละ Container ประกอบด้วยโค้ด, runtime, libraries และการตั้งค่าทั้งหมดที่แอปพลิเคชันต้องการ
เปรียบเทียบ Docker กับ Virtual Machine:
| คุณสมบัติ | Docker Container | Virtual Machine |
|---|---|---|
| ขนาด | เบา (MB) | หนัก (GB) |
| เวลาเปิด | วินาที | นาที |
| การแชร์ทรัพยากร | Kernel ร่วม | Kernel แยก |
| Isolation | Process-level | Hardware-level |
| Overhead | ต่ำมาก | สูง |
| Portability | สูงมาก | ปานกลาง |
Docker เหมาะกับ VPS เพราะใช้ทรัพยากรน้อย ทำให้คุณรันแอปพลิเคชันหลายตัวบน VPS เดียวได้อย่างมีประสิทธิภาพ
ความต้องการระบบก่อนติดตั้ง Docker
ก่อนเริ่มติดตั้ง ตรวจสอบให้ครบ:
- OS: Ubuntu 20.04, 22.04 หรือ 24.04 LTS (64-bit)
- RAM: ขั้นต่ำ 1GB (แนะนำ 2GB ขึ้นไป)
- CPU: 1 vCPU ขึ้นไป
- Disk: พื้นที่ว่างอย่างน้อย 10GB (SSD)
- สิทธิ์: root หรือ sudo access
- Network: เชื่อมต่ออินเทอร์เน็ตได้
ติดตั้ง Docker บน Ubuntu 22.04/24.04
ทำตามขั้นตอนนี้ทีละขั้น:
ขั้นที่ 1: อัปเดต package list
sudo apt update && sudo apt upgrade -y
ขั้นที่ 2: ติดตั้ง dependencies
sudo apt install -y ca-certificates curl gnupg lsb-release
ขั้นที่ 3: เพิ่ม Docker GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
ขั้นที่ 4: เพิ่ม Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
ขั้นที่ 5: ติดตั้ง Docker Engine
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
ขั้นที่ 6: ตรวจสอบการติดตั้ง
sudo docker run hello-world
ถ้าเห็น Hello from Docker! แสดงว่าติดตั้งสำเร็จ
ขั้นที่ 7: ใช้ Docker โดยไม่ต้อง sudo (แนะนำ)
sudo usermod -aG docker $USER
newgrp docker
คำสั่ง Docker พื้นฐานที่ต้องรู้
คำสั่งที่ใช้บ่อยที่สุด:
จัดการ Image
# ดาวน์โหลด image
docker pull nginx
# แสดงรายการ images ทั้งหมด
docker images
# ลบ image
docker rmi nginx
จัดการ Container
# รัน container
docker run -d -p 80:80 --name my-nginx nginx
# แสดง container ที่กำลังรัน
docker ps
# แสดง container ทั้งหมด (รวม stopped)
docker ps -a
# หยุด / เริ่ม / ลบ container
docker stop my-nginx
docker start my-nginx
docker rm my-nginx
ดู Logs และเข้า Shell
# ดู logs
docker logs my-nginx
docker logs -f my-nginx # follow mode
# เข้า bash ใน container
docker exec -it my-nginx bash
ติดตั้งและใช้ Docker Compose
Docker Compose ช่วยจัดการหลาย Container พร้อมกันด้วยไฟล์ YAML ไฟล์เดียว
ตรวจสอบว่าติดตั้งแล้วหรือยัง:
docker compose version
ตัวอย่าง docker-compose.yml สำหรับ WordPress:
version: '3.8'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
depends_on:
- db
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
รัน Compose:
docker compose up -d
รัน Container แรกของคุณ — ตัวอย่างจริง
ลองรัน Nginx เป็น web server:
# รัน Nginx บน port 8080
docker run -d --name my-web -p 8080:80 -v /var/www/html:/usr/share/nginx/html:ro nginx
# ทดสอบ
curl http://localhost:8080
--restart unless-stopped เพื่อให้ Container เริ่มใหม่อัตโนมัติเมื่อ VPS รีบูต เช่น docker run -d --restart unless-stopped nginx
จัดการ Port, Volume และ Network
Port Mapping
# format: -p HOST_PORT:CONTAINER_PORT
docker run -d -p 3000:3000 my-app # map port 3000
docker run -d -p 127.0.0.1:5432:5432 postgres # bind เฉพาะ localhost
Volume (เก็บข้อมูลถาวร)
# Named volume
docker volume create my-data
docker run -d -v my-data:/data my-app
# Bind mount (ผูกกับ folder บน host)
docker run -d -v /home/ubuntu/data:/data my-app
# แสดง volumes
docker volume ls
# ลบ volume ที่ไม่ใช้
docker volume prune
Network
# สร้าง network
docker network create my-network
# รัน container ใน network เดียวกัน
docker run -d --network my-network --name app1 my-app
docker run -d --network my-network --name app2 my-app
# app1 เรียก app2 ได้ด้วยชื่อ: http://app2:PORT
ตั้งค่าความปลอดภัยสำหรับ Docker
Docker มาพร้อม default ที่ค่อนข้างเปิดกว้าง ควรทำสิ่งเหล่านี้:
- อย่ารัน Container เป็น root ใช้
USERใน Dockerfile - จำกัด resources:
docker run --memory=512m --cpus=0.5 - อัปเดต Images สม่ำเสมอ:
docker pull image:latest - ใช้ Firewall: UFW ร่วมกับ Docker ต้องระวัง UFW bypass
- Scan Images: ใช้
docker scoutหรือ Trivy
-p 127.0.0.1:PORT:PORT เพื่อ bind เฉพาะ localhost แล้วให้ Nginx reverse proxy จัดการ
แก้ปัญหาที่พบบ่อย
Docker daemon ไม่เริ่ม
sudo systemctl status docker
sudo systemctl start docker
sudo systemctl enable docker
Permission denied
sudo usermod -aG docker $USER
# logout แล้ว login ใหม่
Port already in use
sudo lsof -i :80 # ดูว่าอะไรใช้ port 80
docker ps # ดู container ที่ใช้ port นั้น
docker stop CONTAINER_NAME
Disk เต็มจาก Docker
docker system prune -a # ลบทุกอย่างที่ไม่ใช้
docker images prune # ลบเฉพาะ images
docker volume prune # ลบ volumes ที่ไม่ใช้
สรุป — Docker บน VPS Ubuntu
Docker ทำให้การ deploy แอปพลิเคชันบน VPS ง่าย ยืดหยุ่น และมีประสิทธิภาพมากขึ้น ขั้นตอนหลักคือ: ติดตั้ง Docker Engine → เพิ่ม user เข้า docker group → ใช้ docker run รัน Container → ใช้ Docker Compose สำหรับ multi-container → ตั้งค่าความปลอดภัยเพิ่มเติม
VPS ของ AsiaGB พร้อมรองรับ Docker ทุก plan ด้วย SSD storage ที่รวดเร็วและ Uptime 99% สำหรับงาน production จริง
คำถามที่พบบ่อย
-v /host/path:/container/path หรือ Named Volumedocker compose ได้เลย-p 127.0.0.1:PORT:PORT) แล้วตั้ง Nginx เป็น reverse proxy จาก port 80/443 ไปยัง localhost:PORT วิธีนี้ปลอดภัยและรองรับ SSL/TLS ผ่าน Let's Encrypt ได้