
Docker คือ Platform สำหรับ Containerization ที่ทำให้คุณรัน Application ในสภาพแวดล้อมที่ Isolated จาก OS หลัก ทำให้ติดตั้ง, ย้าย และ Scale Application ได้ง่ายมาก บทความนี้จะพาคุณติดตั้ง Docker Engine และ Docker Compose บน VPS Ubuntu 22.04 ทีละขั้นตอน แม้ไม่มีประสบการณ์ Docker มาก่อน
Docker คืออะไร ทำไมต้องใช้บน VPS
Docker ห่อ Application และ Dependency ทั้งหมดไว้ใน "Container" ทำให้:
- ทำงานเหมือนกันทุก Server — "Works on my machine" หายไป
- ติดตั้งง่าย — รัน
docker run redisแทนการ Configure Redis เอง - Isolated — แต่ละ App แยก Environment ไม่รบกวนกัน
- ย้ายง่าย — Backup/Restore ด้วย Image Export
ข้อกำหนด: VPS Ubuntu 22.04 LTS ที่มี RAM อย่างน้อย 1GB (แนะนำ 2GB สำหรับ Production) และ Root หรือ sudo access ควรลบ Docker เก่าออกก่อนถ้าเคยติดตั้งไว้
ลบ Docker เวอร์ชั่นเก่า (ถ้ามี)
sudo apt remove -y docker docker-engine docker.io containerd runc 2>/dev/null
# ถ้าไม่เคยติดตั้ง คำสั่งนี้จะแสดง "Package not found" — ไม่เป็นไร
ติดตั้ง Docker Engine จาก Official Repository
ขั้นที่ 1: ติดตั้ง Dependencies
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
ขั้นที่ 2: เพิ่ม 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
ขั้นที่ 3: เพิ่ม 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
ขั้นที่ 4: ติดตั้ง Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# เปิดใช้งาน Auto-start
sudo systemctl enable docker
sudo systemctl start docker
# ตรวจสอบ
sudo docker --version
sudo docker compose version
ขั้นที่ 5 (แนะนำ): เพิ่ม User เข้า Docker Group
# เพื่อไม่ต้องพิมพ์ sudo ทุกครั้ง
sudo usermod -aG docker $USER
# Logout และ Login ใหม่ หรือรัน
newgrp docker
# ทดสอบโดยไม่มี sudo
docker run hello-world
รัน Container ตัวแรก
ทดสอบด้วย Hello World
docker run hello-world
# Output ควรมีข้อความ "Hello from Docker!"
รัน Nginx ตัวแรก
# รัน Nginx Container บน Port 8080
docker run -d -p 8080:80 --name my-nginx nginx
# ทดสอบ
curl http://localhost:8080
# ควรเห็น Nginx Welcome Page
คำสั่ง Docker ที่ใช้บ่อยสำหรับมือใหม่
# ดู Container ที่รันอยู่
docker ps
# ดู Container ทั้งหมด (รวมที่หยุดแล้ว)
docker ps -a
# หยุด Container
docker stop my-nginx
# ลบ Container
docker rm my-nginx
# ดู Image ที่ Download มาแล้ว
docker images
# ลบ Image
docker rmi nginx
# ดู Log ของ Container
docker logs my-nginx
# Exec เข้าไปใน Container (เหมือน SSH)
docker exec -it my-nginx bash
เตรียม VPS และตรวจสอบหลังติดตั้งให้ครบถ้วน
ก่อนเริ่มใช้งานจริง การเตรียม VPS ให้พร้อมและตรวจสอบสถานะหลังติดตั้งจะช่วยให้หลีกเลี่ยงปัญหากวนใจในภายหลัง เริ่มจากอัปเดตระบบทั้งหมดและตั้งเวลาให้ตรงกับเขตเวลาที่ต้องการ เพราะ Container บางตัว (เช่น ฐานข้อมูล) อ้างอิงเวลาของ Host:
# อัปเดตแพ็กเกจระบบให้เป็นปัจจุบัน
sudo apt update && sudo apt upgrade -y
# ตั้งเขตเวลาเป็นไทย (ปรับได้ตามต้องการ)
sudo timedatectl set-timezone Asia/Bangkok
# ตรวจพื้นที่ดิสก์ก่อนเริ่ม — Image กิน GB ได้เร็ว
df -h /
หลังติดตั้ง Docker เสร็จแล้ว ควรตรวจสถานะของ Daemon ว่าทำงานปกติและตั้งค่าให้เริ่มอัตโนมัติเมื่อ VPS รีบูต คำสั่งชุดนี้ช่วยยืนยันทุกองค์ประกอบหลักว่าพร้อมใช้งาน:
# สถานะ Service ของ Docker (ควรเห็น active (running))
sudo systemctl status docker --no-pager
# ตรวจว่าตั้ง Auto-start ไว้แล้ว (ควรได้ enabled)
sudo systemctl is-enabled docker
# ดูข้อมูลระบบของ Docker ทั้งหมด — เวอร์ชัน, Storage Driver, จำนวน Container
docker info
ถ้า systemctl is-enabled docker ตอบว่า disabled ให้รัน sudo systemctl enable docker --now เพื่อเปิดทั้งตอนนี้และตั้งให้เริ่มทุกครั้งหลังรีบูต เมื่อทุกคำสั่งด้านบนให้ผลตามที่คาด แสดงว่า VPS ของคุณพร้อมรัน Container แล้ว
ทดสอบ Docker (hello-world) และรัน Container แรกอย่างละเอียด
หลังติดตั้งเสร็จ ขั้นตอนแรกที่ควรทำคือ "ทดสอบ" ว่า Docker Engine ทำงานได้จริง — Image hello-world เป็น Container ขนาดเล็กที่สุด (ไม่กี่ KB) สร้างมาเพื่อยืนยันว่า Docker Daemon, การ Pull Image จาก Docker Hub และการรัน Container ทำงานครบทุกขั้นตอน:
# ดึง Image และรัน Container ทดสอบ
docker run hello-world
# ถ้าเห็นข้อความ "Hello from Docker!" = ติดตั้งสำเร็จ 100%
# Docker จะอธิบายเองว่าเพิ่งทำอะไรไป 4 ขั้น:
# 1. Client ติดต่อ Docker Daemon
# 2. Daemon Pull Image "hello-world" จาก Docker Hub
# 3. Daemon สร้าง Container จาก Image นั้น
# 4. Daemon ส่ง Output กลับมาที่ Terminal
เมื่อยืนยันแล้วว่าใช้ได้ ลองรัน Container จริงที่ให้บริการเว็บ ตัวอย่างต่อไปนี้ดึง Image nginx:alpine (เบากว่า nginx ปกติเพราะใช้ Alpine Linux เป็นฐาน) แล้ว Map Port 8080 ของ VPS เข้ากับ Port 80 ภายใน Container:
docker run -d -p 8080:80 --name web1 nginx:alpine
# อธิบาย Flag:
# -d = รันแบบ Background (detached)
# -p 8080:80 = เปิด Port 8080 ของ Host ชี้เข้า Port 80 ของ Container
# --name web1 = ตั้งชื่อ Container ให้จำง่าย
# nginx:alpine = ชื่อ Image:Tag ที่จะใช้
# ทดสอบจากในเครื่อง
curl -I http://localhost:8080 # ควรได้ HTTP/1.1 200 OK
เปิดเบราว์เซอร์ไปที่ http://YOUR_VPS_IP:8080 จะเห็นหน้า Welcome to nginx! ทันที — แสดงว่า Container ตัวแรกของคุณให้บริการเว็บได้แล้วโดยไม่ต้องติดตั้ง Nginx ลงบน OS เลย ถ้าต้องการลบ Container ทดสอบนี้ออกให้รัน docker rm -f web1
ทำไม Container เริ่มได้เร็วกว่า VM: Container ไม่ได้บูต OS ใหม่ทั้งระบบ แต่ใช้ Kernel ร่วมกับ Host แล้วแยกเฉพาะ Process, Filesystem และ Network ออกจากกัน จึงเริ่มทำงานได้ในระดับวินาที และกินทรัพยากรน้อยกว่า Virtual Machine มาก — VPS RAM 2GB รันได้หลายสิบ Container เบาๆ พร้อมกัน
ติดตั้ง Docker Compose และรัน Multi-Container App
Docker Compose ช่วยรัน Multiple Container พร้อมกันด้วยไฟล์ docker-compose.yml ในขั้นตอนติดตั้งด้านบนเราติดตั้ง docker-compose-plugin มาแล้ว ทำให้เรียกใช้ด้วยคำสั่งใหม่ docker compose (เว้นวรรค ไม่ใช่ docker-compose แบบมีขีดของเวอร์ชันเก่า) ตรวจสอบเวอร์ชันก่อนเริ่มได้ด้วย:
docker compose version
# ควรได้ผลประมาณ: Docker Compose version v2.x.x
ข้อดีของ Compose คือทุก Service ถูกประกาศไว้ในไฟล์เดียว ทำให้ย้ายเครื่อง สำรอง หรือทำซ้ำสภาพแวดล้อมเดิมได้แม่นยำ ไม่ต้องจำคำสั่ง docker run ยาวๆ หลายบรรทัด อีกทั้ง Compose สร้างเครือข่ายภายในให้อัตโนมัติ Container แต่ละตัวเรียกหากันได้ด้วยชื่อ Service (เช่น WordPress ต่อ MySQL ผ่านชื่อ db โดยตรง) โดยไม่ต้องรู้ IP ตัวอย่างไฟล์ที่รัน WordPress + MySQL พร้อมกัน:
mkdir ~/wordpress-app && cd ~/wordpress-app
nano docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
# รัน Stack
docker compose up -d
# ดู Status
docker compose ps
# ดู Log
docker compose logs -f
# หยุดทุก Container
docker compose down
เปิด Port บน Firewall: ถ้าใช้ UFW อย่าลืมเปิด Port ที่ต้องการก่อน sudo ufw allow 8080/tcp แล้วทดสอบที่ http://YOUR_VPS_IP:8080
คำสั่ง Docker ที่ใช้บ่อย + ความปลอดภัยเบื้องต้น
นอกจากคำสั่งจัดการ Container พื้นฐานด้านบนแล้ว ตารางต่อไปนี้รวบรวมคำสั่งที่จะใช้ทุกวันในการดูแล Docker บน VPS รวมถึงคำสั่งทำความสะอาดพื้นที่ดิสก์ ซึ่งสำคัญมากเพราะ Image และ Volume เก่าจะสะสมจนเต็มดิสก์ได้:
| คำสั่ง | หน้าที่ |
|---|---|
docker stats | ดู CPU / RAM / Network ของแต่ละ Container แบบ Real-time |
docker restart web1 | รีสตาร์ท Container ที่ชื่อ web1 |
docker inspect web1 | ดูรายละเอียดทั้งหมด (IP, Mount, Env) ของ Container |
docker image prune -a | ลบ Image ที่ไม่มี Container ใช้งานเพื่อคืนพื้นที่ดิสก์ |
docker system prune | ลบ Container หยุดแล้ว + Network + Cache ที่ไม่ใช้ในคำสั่งเดียว |
docker system df | ดูว่า Docker ใช้พื้นที่ดิสก์ไปเท่าไร แยกตามประเภท |
ความปลอดภัยเบื้องต้นที่ต้องทำ
Docker ทรงพลังแต่ก็เปิดช่องโจมตีได้ถ้าตั้งค่าไม่รัดกุม โดยเฉพาะบน VPS ที่เปิดให้เข้าถึงจากอินเทอร์เน็ต ปฏิบัติตามแนวทางพื้นฐานต่อไปนี้:
- ระวัง Docker Group = สิทธิ์เทียบเท่า root — ใครที่อยู่ใน Group
dockerสามารถ Mount ดิสก์ของ Host เข้า Container แล้วเข้าถึงไฟล์ระบบทั้งหมดได้ จึงควรเพิ่มเฉพาะผู้ใช้ที่ไว้ใจเท่านั้น ห้ามเพิ่ม Service Account เช่นwww-data - อย่า Map Port ฐานข้อมูลออกสู่ Public — MySQL/Redis ที่รันใน Compose ควรให้ Container อื่นเรียกผ่านเครือข่ายภายในเท่านั้น ไม่ต้องใส่
ports:ออกมา ถ้าไม่จำเป็น - ใช้ Firewall ควบคู่เสมอ — ตั้ง UFW ให้เปิดเฉพาะ Port ที่จำเป็น (เช่น 80, 443, SSH) และตรวจว่า Docker ไม่ได้ไป Bypass กฎ UFW (พิจารณาตั้งค่า
iptablesของ Docker) - อัปเดต Image สม่ำเสมอ — รัน
docker pull image:tagเพื่อดึงเวอร์ชันที่อุดช่องโหว่ แล้วสร้าง Container ใหม่จาก Image ที่อัปเดต อย่าใช้ Image เก่าค้างนานหลายเดือน - อย่ารัน Container ด้วย root โดยไม่จำเป็น — หลาย Image รองรับการกำหนด User ปกติด้วย Flag
--userช่วยลดผลกระทบหากถูกเจาะ
คำถามที่พบบ่อย (FAQ)
Docker ต่างจาก Virtual Machine อย่างไร?
Virtual Machine จำลองฮาร์ดแวร์ทั้งชุดและบูต OS เต็มระบบในแต่ละเครื่อง ทำให้กินทรัพยากรมากและเริ่มช้า ส่วน Docker Container ใช้ Kernel ร่วมกับ Host แล้วแยกเฉพาะ Process และ Filesystem จึงเบากว่า เริ่มได้ในวินาที และรันได้หลาย Container บน VPS ตัวเดียว แต่ทุก Container ต้องใช้ Kernel แบบเดียวกัน (Linux)
VPS ต้องมี RAM เท่าไรถึงจะรัน Docker ได้?
สำหรับทดลองและรัน Container เบาๆ เช่น Nginx หรือเว็บ Static นั้น RAM 1GB เพียงพอ แต่ถ้าจะรัน WordPress + MySQL หรือหลาย Service พร้อมกัน แนะนำอย่างน้อย 2GB ขึ้นไป VPS Ubuntu ของ AsiaGB เริ่มต้น 500 บาท/เดือน มีให้เลือกหลายระดับ RAM ตามภาระงานจริง
ทำไมต้องติดตั้งจาก Repository ของ Docker แทน apt ปกติ?
แพ็กเกจ docker.io ที่มากับ Ubuntu มักเป็นเวอร์ชันเก่ากว่าหลายรุ่นและไม่มี docker compose แบบ Plugin v2 การติดตั้งจาก Official Repository ของ Docker ทำให้ได้ Docker Engine และ Compose เวอร์ชันล่าสุดที่ปลอดภัยและรองรับฟีเจอร์ใหม่ครบ
ถ้า Container ดับหลัง VPS รีบูต ต้องทำอย่างไร?
เพิ่ม --restart always ตอนรัน docker run หรือใส่ restart: always ในไฟล์ docker-compose.yml Docker จะเริ่ม Container เหล่านั้นให้อัตโนมัติทุกครั้งที่ Daemon เริ่มทำงานหลังรีบูต ตรวจว่า Service ของ Docker เปิด Auto-start ด้วย sudo systemctl enable docker
เริ่มต้นกับ Docker บน VPS วันนี้
VPS Linux Ubuntu เริ่มต้น 500 บาท/เดือน Full Root Access รัน Docker, Docker Compose และทุก Container ที่ต้องการได้ทันที
ดูแพ็กเกจ VPS