
ถ้าคุณเพิ่งได้ VPS มาใหม่หรือกำลังมองหาวิธีจัดการแอปพลิเคชันหลายตัวบน Server เดียวให้เป็นระเบียบและง่ายต่อการดูแล Docker คือเครื่องมือที่คุณต้องรู้จัก บทความนี้จะพาคุณตั้งแต่ทำความเข้าใจ Docker คืออะไร ไปจนถึงติดตั้งและรันแอปพลิเคชันแรกบน VPS ของคุณได้จริง
Docker คืออะไร
Docker เป็นแพลตฟอร์มสำหรับพัฒนา ส่งมอบ และรันแอปพลิเคชันใน Container ซึ่งเป็นหน่วยที่บรรจุทุกอย่างที่แอปต้องการไว้ด้วยกัน ทั้ง Code, Runtime, Libraries และ Configuration โดยไม่ขึ้นกับสภาพแวดล้อมของ Server
Container ต่างจาก Virtual Machine (VM) อย่างไร
คนมักสับสนระหว่าง Container กับ VM แต่ทั้งสองทำงานต่างกันโดยสิ้นเชิง
- Virtual Machine (VM): จำลอง Hardware ทั้งหมด ต้องมี OS เต็มๆ ในแต่ละ VM ใช้ RAM และ CPU มาก เริ่มต้นช้า
- Container: แชร์ Kernel ของ OS กับ Host ไม่ต้องมี OS เต็ม น้ำหนักเบากว่ามาก เริ่มต้นในวินาทีเดียว
ตัวอย่างเปรียบเทียบ: ถ้า VM คือบ้านแต่ละหลังที่มีทุกอย่างครบ Container คือห้องในอพาร์ตเมนต์ที่ใช้โครงสร้างอาคาร (Kernel) ร่วมกัน แต่ห้องแต่ละห้องก็มีความเป็นส่วนตัวและเอกเทศของตัวเอง
สรุปสั้นๆ: Docker Container ใช้ทรัพยากรน้อยกว่า VM 5–10 เท่า เริ่มต้นเร็วกว่า และ Deploy ง่ายกว่า เหมาะมากสำหรับใช้งานบน VPS ที่ RAM จำกัด
ทำไมถึงนิยมใช้ Docker กับ VPS
Docker ได้รับความนิยมอย่างมากในหมู่ผู้ใช้ VPS ด้วยเหตุผลหลักดังนี้
- Isolation: แต่ละแอปอยู่ใน Container ของตัวเอง ไม่กวนกัน รัน PHP 7.4 และ PHP 8.2 พร้อมกันบน Server เดียวได้สบาย
- Portability: Build ครั้งเดียว รันได้ทุกที่ ย้าย Container จาก Laptop ไป VPS ได้โดยไม่ต้องตั้งค่าใหม่
- Version Control: ควบคุม Version ของ Software ได้แม่นยำ ไม่มีปัญหา "ทำงานบนเครื่องฉันได้ แต่บน Server ไม่ได้"
- Easy Rollback: ถ้า Update แล้วพัง กลับไป Version เดิมได้ทันที
- Resource Efficiency: รันหลาย Service บน VPS RAM 1GB ได้โดยไม่ต้องซื้อ RAM เพิ่ม
- Docker Hub: มี Image สำเร็จรูปให้ดาวน์โหลดหมื่นกว่าตัว ทั้ง WordPress, MySQL, Nginx, Node.js ฯลฯ
ข้อกำหนดก่อนติดตั้ง Docker
ก่อนติดตั้ง Docker ให้ตรวจสอบว่า VPS ของคุณตรงตามเงื่อนไขเหล่านี้
- OS: Ubuntu 20.04 LTS หรือ Ubuntu 22.04 LTS (แนะนำ) หรือ Debian 11/12
- RAM: อย่างน้อย 1 GB (แนะนำ 2 GB ขึ้นไปถ้าจะรันหลาย Container)
- Disk: เหลือพื้นที่อย่างน้อย 5 GB
- Access: Root หรือ User ที่มีสิทธิ์ sudo
- Internet: VPS ต้องเชื่อมต่ออินเทอร์เน็ตได้เพื่อดาวน์โหลด Docker
เชื่อมต่อ VPS ผ่าน SSH ก่อน ถ้ายังไม่รู้วิธี อ่านบทความ วิธีเชื่อมต่อ VPS ด้วย SSH ก่อน
ขั้นตอนติดตั้ง Docker บน Ubuntu
วิธีที่แนะนำคือติดตั้งจาก Official Repository ของ Docker ซึ่งจะได้ Version ล่าสุดเสมอ
ขั้นที่ 1: อัปเดตระบบและติดตั้ง Dependencies
apt update && apt upgrade -y
apt install -y ca-certificates curl gnupg lsb-releaseขั้นที่ 2: เพิ่ม Docker GPG Key และ Repository
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt updateขั้นที่ 3: ติดตั้ง Docker Engine
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginขั้นที่ 4: ตรวจสอบการติดตั้ง
docker --version
# ควรเห็น: Docker version 26.x.x, build xxxxxxx
docker run hello-world
# ควรเห็น: Hello from Docker!ขั้นที่ 5 (ไม่บังคับ): ใช้ Docker โดยไม่ต้อง sudo
ถ้าคุณทำงานด้วย User ที่ไม่ใช่ root ให้เพิ่ม User ของคุณเข้า docker group
usermod -aG docker $USER
# Log out แล้ว Log in ใหม่เพื่อให้มีผลคำสั่ง Docker พื้นฐาน
เมื่อติดตั้ง Docker เสร็จแล้ว มาทำความรู้จักคำสั่งที่ใช้บ่อยที่สุด
docker pull — ดาวน์โหลด Image
docker pull nginx # ดาวน์โหลด Nginx Image ล่าสุด
docker pull nginx:1.25 # ดาวน์โหลด Nginx เวอร์ชันที่ระบุ
docker pull ubuntu:22.04 # ดาวน์โหลด Ubuntu 22.04 Imagedocker run — รัน Container
docker run nginx # รัน Nginx (Foreground)
docker run -d nginx # รันแบบ Background (Detached)
docker run -d -p 80:80 --name web nginx # Map Port 80 ตั้งชื่อ Container ว่า "web"
docker run -d -p 8080:80 nginx # Map Port Host 8080 → Container 80docker ps — ดู Container ที่กำลังรัน
docker ps # แสดง Container ที่กำลัง Run อยู่
docker ps -a # แสดงทุก Container รวมที่หยุดแล้วdocker stop และ docker rm — หยุดและลบ Container
docker stop web # หยุด Container ชื่อ "web"
docker stop abc123 # หยุดด้วย Container ID
docker rm web # ลบ Container ที่หยุดแล้ว
docker rm -f web # บังคับลบแม้กำลังรันอยู่คำสั่งอื่นที่ควรรู้
docker images # ดูรายการ Image ทั้งหมด
docker rmi nginx # ลบ Image
docker logs web # ดู Log ของ Container
docker exec -it web bash # เข้า Shell ใน Container ที่กำลังรันDocker Compose คืออะไร และติดตั้งอย่างไร
Docker Compose เป็นเครื่องมือสำหรับกำหนดและรันแอปพลิเคชันที่ประกอบด้วย Container หลายตัวพร้อมกัน โดยใช้ไฟล์ docker-compose.yml เป็นตัวกำหนดค่า แทนที่จะต้องพิมพ์คำสั่ง docker run ยาวๆ หลายครั้ง
ถ้าคุณติดตั้ง Docker ตามขั้นตอนข้างต้น (ด้วย docker-compose-plugin) คุณจะสามารถใช้งาน Compose ได้ทันทีผ่านคำสั่ง
docker compose version
# Docker Compose version v2.x.xหมายเหตุ: Docker Compose รุ่นใหม่ (v2) ใช้คำสั่ง docker compose (มีช่องว่าง) ส่วนรุ่นเก่า (v1) ใช้ docker-compose (มีขีด) ในบทความนี้ใช้ v2
ตัวอย่าง: รัน WordPress + MySQL ด้วย Docker Compose
นี่คือตัวอย่างที่ใช้งานได้จริง สำหรับการรัน WordPress พร้อม MySQL บน VPS โดยไม่ต้องติดตั้ง Apache หรือ PHP เองเลย
สร้างโฟลเดอร์และไฟล์ docker-compose.yml
mkdir ~/wordpress && cd ~/wordpress
nano docker-compose.ymlเนื้อหาไฟล์ docker-compose.yml
services:
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: your_wp_password
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: your_wp_password
volumes:
- wp_data:/var/www/html
depends_on:
- db
volumes:
db_data:
wp_data:รัน WordPress Stack
docker compose up -d
# Docker จะดาวน์โหลด Image และสร้าง Container ให้อัตโนมัติ
docker compose ps
# ตรวจสอบว่า Container ทั้งสองรันอยู่
# เปิด Browser ไปที่ http://YOUR_VPS_IP:8080
# จะเห็นหน้าติดตั้ง WordPressคำสั่ง Docker Compose ที่ใช้บ่อย
docker compose up -d # รันทุก Service แบบ Background
docker compose down # หยุดและลบ Container ทั้งหมด
docker compose down -v # หยุด + ลบ Volume ด้วย (ข้อมูลจะหาย!)
docker compose logs -f # ดู Log แบบ Real-time
docker compose restart # Restart ทุก Service
docker compose ps # ดูสถานะ ServiceDocker Network และ Volume: พื้นฐานที่ต้องรู้
เมื่อรัน Container หลายตัวบน VPS คุณต้องเข้าใจสองแนวคิดสำคัญ ได้แก่ Docker Network (การสื่อสารระหว่าง Container) และ Docker Volume (การเก็บข้อมูลถาวร) เพราะ Container โดยธรรมชาตินั้น Stateless — ข้อมูลใน Container จะหายทันทีเมื่อลบ Container
Docker Network
โดย Default Docker มี Network อยู่ 3 ประเภทหลัก
- bridge (default): Container ในกลุ่มเดียวกันสื่อสารกันได้ผ่าน IP ส่วนตัว เหมาะสำหรับ Container บนเครื่องเดียว
- host: Container ใช้ Network Stack ของ Host โดยตรง ไม่มี NAT เหมาะกับ High-Performance Application ที่ต้องการ Latency ต่ำ
- none: ตัด Network ออกทั้งหมด เหมาะกับงาน Batch Processing ที่ไม่ต้องการ Network
เมื่อใช้ Docker Compose ระบบจะสร้าง Custom Bridge Network ให้อัตโนมัติ ทำให้ Container ในกลุ่มเดียวกันเรียกกันได้ด้วย Service Name เช่น Container WordPress เรียก MySQL ด้วย hostname db ได้เลย
# สร้าง Network เอง
docker network create mynetwork
# รัน Container ใน Network ที่กำหนด
docker run -d --name app --network mynetwork nginx
# ดู Network ทั้งหมด
docker network ls
# ดูรายละเอียด Network
docker network inspect mynetworkDocker Volume: เก็บข้อมูลให้อยู่รอด
Docker Volume คือพื้นที่จัดเก็บข้อมูลที่แยกออกมาจาก Container ข้อมูลใน Volume จะยังคงอยู่แม้จะลบ Container ไปแล้ว ซึ่งสำคัญมากสำหรับ Database, ไฟล์ Upload และ Configuration สำคัญ
# สร้าง Volume
docker volume create mydata
# ดู Volume ทั้งหมด
docker volume ls
# Mount Volume เมื่อรัน Container
docker run -d -v mydata:/var/lib/mysql mysql:8.0
# ลบ Volume (ระวัง! ข้อมูลจะหาย)
docker volume rm mydata
# ลบ Volume ที่ไม่ใช้แล้ว
docker volume pruneกฎทอง: ข้อมูลสำคัญทุกอย่าง ทั้ง Database, ไฟล์ที่ผู้ใช้อัพโหลด และ Configuration ต้องเก็บใน Volume เสมอ ห้ามเก็บไว้ใน Container เพราะจะหายเมื่อลบหรือ Recreate Container
การจัดการ Multi-Container Stack บน VPS ด้วย Docker Compose
ในการใช้งานจริงบน VPS ส่วนใหญ่คุณจะต้องรัน Container หลายตัวพร้อมกัน เช่น Web Server + Database + Cache + Reverse Proxy บทความนี้มีตัวอย่าง Stack ที่พร้อมใช้งานจริง
ตัวอย่าง: Nginx + PHP-FPM + MySQL + Redis Stack
Stack นี้เหมาะกับแอปพลิเคชัน PHP สมัยใหม่ที่ต้องการ Performance สูงและ Cache ด้วย Redis
services:
nginx:
image: nginx:1.25-alpine
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./app:/var/www/html
- ./ssl:/etc/ssl/certs
depends_on:
- php
php:
image: php:8.3-fpm-alpine
restart: always
volumes:
- ./app:/var/www/html
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: strong_root_pw_here
MYSQL_DATABASE: appdb
MYSQL_USER: appuser
MYSQL_PASSWORD: strong_app_pw_here
volumes:
- db_data:/var/lib/mysql
ports:
- "127.0.0.1:3306:3306"
redis:
image: redis:7-alpine
restart: always
volumes:
- redis_data:/data
ports:
- "127.0.0.1:6379:6379"
volumes:
db_data:
redis_data:สังเกตว่า MySQL และ Redis ผูก Port กับ 127.0.0.1 เท่านั้น ทำให้เข้าถึงได้เฉพาะบน VPS เท่านั้น ไม่เปิด Public — เป็น Best Practice ด้าน Security ที่สำคัญมาก
รัน Stack และตรวจสอบ
# รัน Stack ทั้งหมด
docker compose up -d
# ดูสถานะทุก Service
docker compose ps
# ดู Log แบบ Real-time
docker compose logs -f
# Restart Service ที่มีปัญหา
docker compose restart php
# อัพเดต Image ทั้งหมดเป็น Version ล่าสุด
docker compose pull && docker compose up -dการ Backup และ Restore Docker Data บน VPS
แม้ Docker Volume จะปลอดภัยกว่าการเก็บข้อมูลใน Container แต่ก็ต้องมีแผน Backup ที่ดีด้วย เพราะข้อมูลบน Volume ยังอยู่บน Disk เดียวกับ VPS ถ้า VPS มีปัญหา ข้อมูลก็หายได้
Backup Database จาก Container
# Backup MySQL Database
docker exec mysql_container mysqldump -u root -p'strong_root_pw_here' appdb > backup_$(date +%Y%m%d).sql
# Backup ทุก Database
docker exec mysql_container mysqldump -u root -p'strong_root_pw_here' --all-databases > all_backup.sql
# Restore Database
docker exec -i mysql_container mysql -u root -p'strong_root_pw_here' appdb < backup_20260608.sqlBackup Docker Volume ทั้งหมด
# Backup Volume โดยใช้ Container ชั่วคราว
docker run --rm \
-v db_data:/source:ro \
-v $(pwd):/backup \
alpine tar czf /backup/db_data_backup.tar.gz -C /source .
# Restore Volume จาก Backup
docker run --rm \
-v db_data:/target \
-v $(pwd):/backup \
alpine tar xzf /backup/db_data_backup.tar.gz -C /targetAutomated Daily Backup ด้วย Cron
เพิ่ม Cron Job บน VPS เพื่อ Backup อัตโนมัติทุกวัน
# รัน crontab -e แล้วเพิ่มบรรทัดนี้
# Backup ทุกวันเวลาตี 2 และเก็บไว้ 7 วัน
0 2 * * * docker exec mysql_container mysqldump -u root -p'PWD' appdb > /backups/db_$(date +\%Y\%m\%d).sql && find /backups -name "db_*.sql" -mtime +7 -deleteคำแนะนำ: Backup ที่ดีควรเก็บไว้หลายที่ เช่น บน VPS, ดาวน์โหลดไปเก็บบน Cloud Storage (Google Drive, Dropbox) หรืออีก Server หนึ่งเสมอ Backup บนเครื่องเดียวกันนับเป็น Backup เดียว ไม่ใช่ Redundancy
ข้อดีของ Docker บน VPS เทียบกับการติดตั้งตรงๆ
หลายคนสงสัยว่าจะใช้ Docker แทนการ Install Apache/PHP/MySQL โดยตรงไปเลยดีไหม ลองเปรียบเทียบกัน
การติดตั้งตรงๆ (Bare-metal Install)
- ตั้งค่าครั้งแรกง่ายกว่าสำหรับมือใหม่
- Performance ดีกว่าเล็กน้อย (ไม่มี Overhead จาก Container)
- แต่: อัปเกรด Software ยาก อาจทำให้ระบบพังได้
- แต่: รัน PHP หลายเวอร์ชันพร้อมกันทำได้ยาก
- แต่: ย้าย Server ต้องตั้งค่าใหม่ทั้งหมด
การใช้ Docker
- Isolate แอปแต่ละตัวได้อย่างสมบูรณ์
- อัปเกรด/Downgrade แค่ pull Image ใหม่
- ย้าย Server ใช้ docker-compose.yml ไฟล์เดียว
- Backup/Restore ด้วย Docker Volume ง่ายมาก
- รัน Stack ซับซ้อน (WordPress + Redis + Nginx) ได้ใน 1 คำสั่ง
- แต่: ต้องใช้เวลาเรียนรู้ Docker เพิ่มเติม
คำแนะนำ: ถ้าคุณวางแผนจะรันหลายแอปบน VPS เดียว หรือต้องการ Deploy บ่อยๆ Docker คุ้มค่ากว่าการ Install ตรงๆ อย่างมาก แต่ถ้าต้องการแค่เว็บไซต์ WordPress ตัวเดียว การใช้ LAMP Stack ปกติก็ยังเป็นตัวเลือกที่ดี
เคล็ดลับความปลอดภัยสำหรับ Docker บน VPS
- อย่า Expose Port โดยไม่จำเป็น ใช้
127.0.0.1:3306:3306แทน3306:3306สำหรับ Database - เปลี่ยน Password เริ่มต้นใน docker-compose.yml ก่อนรันทุกครั้ง
- อัปเดต Docker Image อยู่เสมอด้วย
docker compose pull - ใช้ Docker Volumes เก็บข้อมูลสำคัญ อย่าเก็บใน Container เพราะจะหายเมื่อลบ Container
- ตั้ง Firewall ให้ปิด Port ที่ไม่ใช้ ดูบทความ ทำให้ VPS ปลอดภัย
พร้อมรัน Docker บน VPS ของคุณแล้วหรือยัง?
AsiaGB VPS Linux เริ่มต้น 500 บาท/เดือน RAM 1 GB ขึ้นไป Full Root Access รองรับ Docker ทุกแพ็กเกจ ดาต้าเซ็นเตอร์ไทย และ สิงคโปร์
ดู VPS AsiaGB