เว็บนี้มีลิงก์ affiliate — หากสมัครผ่านลิงก์ เราได้รับค่าคอมมิชชัน · Affiliate links. รายละเอียด

Docker บน VPS: คู่มือการติดตั้งและการใช้งาน

Docker on VPS: Installation and Usage Guide

Docker บน VPS: คู่มือการติดตั้งและการใช้งาน

Docker คืออะไรและทำไมต้องใช้บน VPS

Docker เป็นเทคโนโลยี containerization ที่ช่วยให้คุณรัน application ในสภาพแวดล้อมที่แยกตัวออกมา เรียกว่า container โดยแต่ละ container จะรวมโค้ด dependencies libraries configuration ทั้งหมดที่จำเป็น ทำให้แอปพลิเคชันสามารถทำงานได้อย่างสม่ำเสมอในทุกสภาพแวดล้อม

การใช้ Docker บน VPS นำเสนอข้อดีมากมาย:

ต่างจากการใช้ virtual machine ที่ต้องการ RAM และ storage ขนาดใหญ่ต่อ VM แต่ละตัว Docker container ใช้ทรัพยากรน้อยมากเนื่องจาก container ทั้งหมดใช้ kernel เดียวกันของระบบปฏิบัติการ ทำให้การใช้ Docker บน VPS คุ้มค่ามากขึ้น

ข้อกำหนด VPS สำหรับการใช้ Docker

การใช้ Docker ให้ประสบความสำเร็จต้องมี VPS ที่มี system resources และการตั้งค่าที่เหมาะสม ข้อกำหนดที่ชัดเจนขึ้นอยู่กับว่าจะรัน container กี่ตัวและต้องการทรัพยากรเท่าไร แต่นี่คือคำแนะนำพื้นฐาน:

หากต้องการรัน 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 volume
docker run -v mydata:/app/data nginx:latest - mount volume เข้าไป container
docker volume ls - แสดงรายการ volumes ทั้งหมด

Container Lifecycle Management

ทำความสะอาด Unused Resources

Docker สะสมรูป images และ containers ที่ไม่ใช้แล้วตามกาลเวลา ทำความสะอาดด้วย:

docker system prune -a - ลบ containers images และ volumes ที่ไม่ใช้
docker image prune - ลบ dangling images
docker 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 network
docker 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

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 ที่เหมาะสมเป็นสิ่งสำคัญสำหรับการ deploy Docker ที่ประสบความสำเร็จ VPS provider ที่เหมาะควรเสนอ adequate resources reliable performance และ good support นี่คือปัจจัยที่ต้องพิจารณา:

Key Requirements สำหรับ Docker VPS

ทำไม 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 แล้วย้ายไปยังการกำหนดค่าขนาดใหญ่ขึ้น หากจำเป็น

แนะนำAsiaGB.com — Web Hosting & VPS ที่เราใช้และแนะนำ เซิร์ฟเวอร์ในไทยและสิงคโปร์ สตอเรจ SSD จัดการผ่าน DirectAdmin พร้อมทีม Support ภาษาไทย 24 ชั่วโมง uptime 99%

AsiaGB.com — hosting & VPS we use and recommend: TH/SG servers, SSD storage, DirectAdmin, 24h Thai support, 99% uptime.

เยี่ยมชม AsiaGB →

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

ความแตกต่างหลักระหว่าง Docker containers และ virtual machines คืออะไร
Docker containers มีน้ำหนักเบา (lightweight) และแชร์ host OS kernel โดยปกติใช้ RAM เพียงไม่กี่ MB ส่วน virtual machines มีน้ำหนักมาก แต่ละ VM รันระบบปฏิบัติการแยก ใช้ recursos หลายร้อย MB หรือ GB containers เริ่มต้นในไม่กี่วินาที ขณะที่ VMs ใช้เวลานาที ทำให้ Docker มีประสิทธิภาพสำหรับการรัน applications หลายตัวบน VPS เดียว
ต้องเป็น expert เพื่อใช้ Docker บน VPS หรือไม่
ไม่ Docker มี learning curve แต่พื้นฐาน straightforward เริ่มต้นด้วย simple containers โดยใช้ existing images จาก Docker Hub จากนั้นก้าวหน้าไป Docker Compose สำหรับ multi-container setups มี tutorials มากมายและ communities ที่จะช่วย
ฉันสามารถรัน Docker บน VPS ที่มี 2GB RAM ได้หรือไม่
ใช่ได้ แต่เฉพาะ lightweight applications เท่านั้น single small container อาจใช้ได้ แต่ production environments ได้ประโยชน์จาก 4 GB RAM ขึ้นไปเพื่อให้ stability และพื้นที่สำหรับการเติบโต พิจารณาความต้องการเฉพาะของ application ของคุณก่อนเลือก plan
ฉันจะอัปเดต Docker containers ใน production ได้อย่างไร
Pull image เวอร์ชันใหม่ หยุด container เก่า และเริ่มต้น container ใหม่ด้วย updated image สำหรับ zero-downtime updates ด้วย containers หลายตัว ใช้ load balancer เช่น Nginx และอัปเดต containers ทีละตัว Docker Compose สามารถ automate นี่ด้วยคำสั่ง `docker-compose up -d` หลังจากอัปเดต image versions ใน compose file ของคุณ