Docker บน VPS: คู่มือการติดตั้งและการใช้งาน
Docker on VPS: Installation and Usage Guide
สารบัญ
Docker คืออะไรและทำไมต้องใช้บน VPS
Docker เป็นเทคโนโลยี containerization ที่ช่วยให้คุณรัน application ในสภาพแวดล้อมที่แยกตัวออกมา เรียกว่า container โดยแต่ละ container จะรวมโค้ด dependencies libraries configuration ทั้งหมดที่จำเป็น ทำให้แอปพลิเคชันสามารถทำงานได้อย่างสม่ำเสมอในทุกสภาพแวดล้อม
การใช้ Docker บน VPS นำเสนอข้อดีมากมาย:
- ความแยกตัว (Isolation): แต่ละ container ทำงานในสภาพแวดล้อมแยกตัวออกมา ถ้า application หนึ่งมีปัญหาหรือหยุดทำงานก็จะไม่ส่งผลกระทบต่ออีก application หรือระบบหลัก
- ประสิทธิภาพสูง: Container ใช้ทรัพยากรของระบบได้อย่างมีประสิทธิภาพกว่า virtual machine มากเพราะไม่ต้องรันระบบปฏิบัติการแยกต่างหากแต่อย่างใด ทำให้คุณสามารถรัน application จำนวนมากบน VPS เดียว
- ความสอดคล้องกัน: Docker image ทำให้แน่ใจว่า application ทำงานเหมือนกันบน development staging และ production environment
- ขยายขนาดได้ง่าย: สามารถใช้ Docker Compose หรือ orchestration tools อื่นเพื่อจัดการ container หลายตัวอย่างง่ายดาย
ต่างจากการใช้ virtual machine ที่ต้องการ RAM และ storage ขนาดใหญ่ต่อ VM แต่ละตัว Docker container ใช้ทรัพยากรน้อยมากเนื่องจาก container ทั้งหมดใช้ kernel เดียวกันของระบบปฏิบัติการ ทำให้การใช้ Docker บน VPS คุ้มค่ามากขึ้น
ข้อกำหนด VPS สำหรับการใช้ Docker
การใช้ Docker ให้ประสบความสำเร็จต้องมี VPS ที่มี system resources และการตั้งค่าที่เหมาะสม ข้อกำหนดที่ชัดเจนขึ้นอยู่กับว่าจะรัน container กี่ตัวและต้องการทรัพยากรเท่าไร แต่นี่คือคำแนะนำพื้นฐาน:
- CPU: ต้องมีอย่างน้อย 2 cores สำหรับการใช้งาน Docker ในระดับพื้นฐาน สำหรับ production environments ที่มี container หลายตัวแนะนำให้ใช้ 4 cores ขึ้นไป Container สามารถแชร์ CPU resources ได้ดังนั้นจำนวน cores ทั้งหมดกำหนดว่า container สามารถรันได้กี่ตัวพร้อมกัน
- RAM: ต้องมีอย่างน้อย 2 GB สำหรับ OS และ Docker daemon รวมกับ RAM เพิ่มเติมสำหรับ container ของคุณ สำหรับ application ขนาดเล็กที่รัน application เดียว 2 GB อาจพอ แต่ 4 GB ให้ความสบายมากขึ้นและ 8 GB ขึ้นไปเหมาะสำหรับ production setup ที่มี services หลายตัว
- Storage: Docker images และ container data ต้องการพื้นที่เก็บข้อมูล SSD storage แนะนำอย่างยิ่งเพราะมันช่วยให้ image pulling และ container startup เร็วขึ้นอย่างมาก ต้องมีอย่างน้อย 20 GB แต่ 50 GB ขึ้นไปดีกว่าสำหรับเก็บ images หลายตัวและ persistent data volumes
- ระบบปฏิบัติการ: Docker ทำงานได้ดีที่สุดบน modern Linux distributions Ubuntu 20.04 LTS 22.04 LTS และเวอร์ชันใหม่กว่า CentOS 7+ และ Debian 10+ ก็รองรับ Docker เช่นกัน
- Linux Kernel: Docker ต้องการ Linux kernel 3.10 ขึ้นไป (5.10+ แนะนำสำหรับประสิทธิภาพที่ดีกว่า) ตรวจสอบเวอร์ชัน kernel ด้วยคำสั่ง
uname -r - Network: ต้องมี internet connection ที่เสถียรสำหรับดึง Docker images จาก registry โปรดแน่ใจว่า VPS มี bandwidth ที่ดี โดยเฉพาะสำหรับการดึง images ขนาดใหญ่ในช่วง deployment
หากต้องการรัน container เพียง 1-2 ตัวที่ใช้ทรัพยากรน้อย VPS ที่มี 2 GB RAM และ 2 CPU cores อาจใช้ได้ อย่างไรก็ตามสำหรับการใช้งาน production หรือ services หลายตัวการลงทุนใน VPS ที่มี 4+ GB RAM 4+ CPU cores และ 100+ GB SSD storage ให้ความเสถียรที่ดีขึ้นและพื้นที่สำหรับการขยายตัวในอนาคต
ติดตั้ง Docker Engine บน Ubuntu ขั้นตอนการติดตั้ง
การติดตั้ง Docker บน Ubuntu นั้นง่ายมากเพราะสามารถใช้ official Docker repository ตามขั้นตอนเหล่านี้:
ขั้นตอนที่ 1: อัปเดต System Packages
ขั้นแรกให้อัปเดตระบบเพื่อให้แน่ใจว่า packages ทั้งหมดเป็นเวอร์ชันล่าสุด:
sudo apt-get update
sudo apt-get upgrade -y
ขั้นตอนที่ 2: ติดตั้ง Prerequisites
ติดตั้ง packages ที่จำเป็นสำหรับ Docker:
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
ขั้นตอนที่ 3: เพิ่ม Docker GPG Key และ Repository
เพิ่ม official GPG key ของ Docker และ repository:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
ขั้นตอนที่ 4: ติดตั้ง Docker Engine
อัปเดต package index และติดตั้ง Docker:
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
ขั้นตอนที่ 5: ตรวจสอบการติดตั้งและรัน Container แรก
ทดสอบการติดตั้ง Docker โดยรัน hello-world image:
sudo docker run hello-world
เพื่อจัดการ Docker โดยไม่ต้องใช้ sudo ให้เพิ่ม user ของคุณลงใน docker group (ส่วนเลือก):
sudo usermod -aG docker $USER
newgrp docker
ตรวจสอบว่า Docker กำลังทำงานโดยตรวจสอบ status:
sudo systemctl status docker
เปิดใช้งาน Docker เพื่อให้เริ่มต้นอัตโนมัติเมื่อบูตระบบ:
sudo systemctl enable docker
Docker Compose: จัดการ Application ที่มี Container หลายตัว
Docker Compose เป็นเครื่องมือที่ทำให้การรัน Docker containers หลายตัวที่เชื่อมต่อกันง่ายขึ้น แทนที่จะจัดการ container แต่ละตัวแยกกัน Docker Compose ใช้ไฟล์ YAML configuration (docker-compose.yml) เพื่อกำหนด services networks และ volumes ทั้งหมดในที่เดียว
การติดตั้ง Docker Compose
ติดตั้ง Docker Compose โดยใช้ pip หรือดาวน์โหลด binary โดยตรง:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
การสร้างไฟล์ docker-compose.yml
ไฟล์ docker-compose.yml ทั่วไปสำหรับ web application ที่มี database อาจมีลักษณะดังนี้:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
เริ่มต้นและจัดการ Services
เริ่มต้น services ทั้งหมดที่กำหนดในไฟล์ compose:
docker-compose up -d
ดู services ที่กำลังทำงาน:
docker-compose ps
ดู logs จาก service ที่เฉพาะเจาะจง:
docker-compose logs web
หยุด services ทั้งหมด:
docker-compose down
Docker Compose จะสร้าง network โดยอัตโนมัติที่เชื่อมต่อ services ทั้งหมด ดังนั้น containers สามารถสื่อสารกันโดยใช้ service name ซึ่งช่วยให้จัดการ multi-container setups ได้ง่ายขึ้นมาก
จัดการ Docker Containers Images และ Persistent Data Volumes
การจัดการ container ที่มีประสิทธิภาพรวมถึงการทำความเข้าใจวิธีการทำงานกับ images containers และ data volumes ซึ่งเป็นแนวคิดพื้นฐานสำหรับการรัน Docker ใน production
Docker Images และ Containers
Docker image เป็น blueprint ที่อ่านอย่างเดียวซึ่งมีทุกอย่างที่จำเป็นเพื่อรัน application Container คือ instance ที่กำลังทำงานของ image คิดว่า images เป็น classes และ containers เป็น objects ในการเขียนโปรแกรม
docker images - แสดงรายการ images ทั้งหมดในระบบdocker ps -a - แสดงรายการ containers ทั้งหมด (ทั้งที่รันอยู่และหยุด)docker run -d --name mycontainer nginx:latest - สร้างและเริ่มต้น container
Data Persistence ด้วย Volumes
Containers นั้นสั้นชั่ว (ephemeral) โดยค่าเริ่มต้น เมื่อหยุด data ทั้งหมดภายใน container จะหายไป Volumes ช่วยให้เก็บข้อมูลได้อย่างยั่งยืนซึ่งยังคงอยู่หลังจากที่ container หยุด และสามารถแชร์ได้ระหว่าง containers:
docker volume create mydata - สร้าง named volumedocker run -v mydata:/app/data nginx:latest - mount volume เข้าไป containerdocker volume ls - แสดงรายการ volumes ทั้งหมด
Container Lifecycle Management
- Start และ Stop:
docker start container_idและdocker stop container_idหยุด containers อย่างอ่อนโยน - Restart:
docker restart container_idหยุดและเริ่มต้น container ใหม่ - Remove:
docker rm container_idลบ container ที่หยุด ใช้ flag-fเพื่อบังคับลบ containers ที่กำลังทำงาน - ดู Logs:
docker logs container_idแสดง container output สำหรับการแก้ไขข้อบกพร่อง - Resource Limits:
docker run -m 512m --cpus=0.5 image_nameจำกัด memory และ CPU usage
ทำความสะอาด Unused Resources
Docker สะสมรูป images และ containers ที่ไม่ใช้แล้วตามกาลเวลา ทำความสะอาดด้วย:
docker system prune -a - ลบ containers images และ volumes ที่ไม่ใช้docker image prune - ลบ dangling imagesdocker volume prune - ลบ volumes ที่ไม่ใช้
ใช้ Nginx Reverse Proxy กับ Docker Containers
การรัน Nginx เป็น reverse proxy หน้า Docker containers มีประโยชน์เช่น load balancing, SSL/TLS termination และการส่ง traffic ไปยัง container ที่ถูกต้อง นี่เป็น pattern ทั่วไปใน production deployments
การตั้งค่า Nginx Reverse Proxy
สร้างไฟล์ configuration Nginx สำหรับ reverse proxying ไปยัง Docker containers:
upstream backend {
server web1:3000;
server web2:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Docker Networking
Containers สื่อสารกันผ่าน Docker networks เมื่อใช้ Docker Compose services จะถูกเพิ่มลงใน network โดยอัตโนมัติและสามารถเข้าถึงกันด้วย service name สำหรับ Docker networks แบบ manual:
docker network create mynetwork - สร้าง custom networkdocker run --network mynetwork --name web nginx:latest - เชื่อมต่อ container ไปยัง network
Docker Compose Setup ด้วย Nginx
ใน docker-compose.yml ให้กำหนด Nginx service ด้วย containers อื่นๆ บน network เดียวกัน:
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- web1
- web2
web1:
image: myapp:latest
web2:
image: myapp:latest
Health Checks และ Load Balancing
ตั้งค่า health checks เพื่อให้แน่ใจว่า traffic ไปยัง healthy containers เท่านั้น:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
Nginx จัดการ load balancing ข้ามหลาย backend servers โดยอัตโนมัติ โดยแจกจ่าย requests อย่างเท่าเทียมและข้าม unhealthy servers
Docker Security Best Practices และการ Hardening
ความปลอดภัยควรเป็นลำดับความสำคัญหลักเมื่อรัน Docker ใน production ความปลอดภัย container รวมถึงการรักษาความปลอดภัยของ host system images containers และ network communications นี่คือแนวปฏิบัติความปลอดภัยที่จำเป็น:
รัน Containers เป็น Non-Root Users
ห้ามรัน containers เป็น root สร้าง user ใน Dockerfile ของคุณ:
RUN useradd -m -s /bin/bash appuser
USER appuser
นี่จะจำกัดความเสียหายถ้า container ถูก compromise
Resource Limits และ Security Constraints
ตั้งค่าข้อจำกัด resource เพื่อป้องกัน containers จากการใช้ resource ระบบมากเกินไปและส่งผลกระทบต่อ containers อื่นๆ หรือ host:
docker run -m 512m --memory-swap 1g --cpus 1 image_name
ใช้ flag --cap-drop เพื่อลบ Linux capabilities ที่ไม่จำเป็นซึ่ง containers ไม่ต้องการสำหรับการดำเนินการ
Image Security และ Scanning
- ใช้ images จาก official registries และแหล่งที่มา trusted เช่น Docker Hub official images
- สแกนรูปภาพสำหรับช่องโหว่:
docker scan image_name - รักษา base images ให้เป็นปัจจุบันและสร้าง containers ใหม่อย่างสม่ำเสมอด้วย latest patches
- ลดขนาด image โดยใช้ smaller base images เช่น Alpine Linux
- หลีกเลี่ยงการเก็บ secrets (passwords, API keys) ใน images ให้ใช้ environment variables และ secrets management tools แทน
Network Security
แยก containers โดยใช้ custom Docker networks แทนการใช้ host network mode กำหนด firewall rules บน VPS เพื่อจำกัด traffic ไปยังเพียง necessary ports ใช้ HTTPS สำหรับการสื่อสารภายนอกทั้งหมดและ SSL/TLS certificates บน reverse proxy ของคุณ
Container Registry Security
ถ้าใช้ private registry ให้แน่ใจว่ามี strong authentication ใช้ image signing และ verification เพื่อป้องกัน unauthorized images จากการรัน ตรวจสอบ audit regularly ว่า images ใดใช้งานอยู่และลบ unnecessary ones
Updates ประจำและ Monitoring
อัปเดต Docker Engine Docker Compose และ host OS ด้วย latest security patches อย่างสม่ำเสมอ Monitor container activity สำหรับพฤติกรรมที่น่าสงสัยและ implement logging เพื่อติดตาม container operations พิจารณาใช้ AsiaGB.com สำหรับ VPS hosting ซึ่งมี secure infrastructure ที่มี SSD storage DirectAdmin control panel 99% uptime reliability และ 24 ชั่วโมง Thai support เพื่อช่วยให้ Docker deployments ของคุณปลอดภัย
การเลือก VPS ที่เหมาะสำหรับ Docker Hosting ในไทย
การเลือก VPS ที่เหมาะสมเป็นสิ่งสำคัญสำหรับการ deploy Docker ที่ประสบความสำเร็จ VPS provider ที่เหมาะควรเสนอ adequate resources reliable performance และ good support นี่คือปัจจัยที่ต้องพิจารณา:
Key Requirements สำหรับ Docker VPS
- SSD Storage: นี่เป็นสิ่งสำคัญ SSD ช่วยปรับปรุง Docker image pulling container startup times และ overall application performance เมื่อเทียบกับ traditional HDD storage
- CPU และ RAM: เลือก plan ที่มี resources เพียงพอสำหรับ containers ของคุณ เริ่มต้นด้วย 4 CPU cores และ 4 GB RAM minimum สำหรับ Docker workload ที่ serious ใดๆ
- Uptime Guarantee: Reliable hosting ที่มี 99% หรือสูงกว่า uptime ทำให้ Docker containers ของคุณอยู่ออนไลน์
- Control Panel: DirectAdmin ให้ user-friendly interface สำหรับจัดการ VPS ของคุณทำให้ configure Docker และจัดการ applications ได้ง่ายขึ้น
- Support Quality: 24 ชั่วโมง support ในภาษาท้องถิ่นของคุณนั้นมีค่ามากเมื่อเกิดปัญหา
ทำไม AsiaGB.com เหมาะสำหรับ Docker Hosting
AsiaGB.com เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการ host Docker applications ในไทยและ Southeast Asia VPS plans ของพวกเขามี SSD storage เพื่อประสิทธิภาพ container ที่เหมาะสมที่สุด DirectAdmin control panel สำหรับจัดการอย่างง่าย และ reliable 99% uptime guarantee servers ทั้งหมดตั้งอยู่ใน Thailand และ Singapore ด้วย 24 ชั่วโมง Thai support ซึ่งมั่นใจว่าคุณได้รับความช่วยเหลือเมื่อคุณต้องการ Infrastructure ของพวกเขาออกแบบมาเพื่อประสิทธิภาพสูงด้วย excellent network connectivity ในภูมิภาค
Comparison Considerations
เมื่อประเมิน VPS providers ให้เปรียบเทียบไม่เพียงแต่ราคา แต่ยังรวมถึง quality ของ hardware network infrastructure backup options และ support responsiveness สำหรับ Docker workloads plan ที่มีราคามากขึ้นเล็กน้อยจาก reliable provider จะดีกว่าตัวเลือก cheaper ที่มีปัญหา performance หรือ poor support
เริ่มต้นด้วย moderate plan และปรับขนาดขึ้นเมื่อ application ของคุณเติบโต providers ส่วนใหญ่อนุญาต easy upgrades ดังนั้นคุณสามารถเริ่มต้นด้วย 4 GB RAM และ 4 CPU cores แล้วย้ายไปยังการกำหนดค่าขนาดใหญ่ขึ้น หากจำเป็น