HELPER VPS

ติดตั้ง Docker บน VPS: Ubuntu, Debian, AlmaLinux และ Compose

ติดตั้งจากคลังทางการของ Docker จะได้ Docker Engine และปลั๊กอิน Compose เวอร์ชันล่าสุด และการอัปเดตภายหลังก็จบในการอัปเดตระบบครั้งเดียว สรุปคำสั่งตามระบบปฏิบัติการและการตั้งค่าที่ควรทำหลังติดตั้งไว้ตามลำดับ

วิธีที่เร็วที่สุด: สร้างเซิร์ฟเวอร์ด้วยอิมเมจ Docker

หากสร้างเซิร์ฟเวอร์ใหม่ การเลือก Docker จากรายการอิมเมจเร็วที่สุด เริ่มต้นพร้อม Docker Engine และ Docker Compose บน Ubuntu 24.04 LTS ล็อกอินแล้วรัน docker compose up ได้ทันที รายละเอียดแอปและขนาดแนะนำอยู่ที่หน้า Docker VPS

หากต้องการเพิ่ม Docker ในเซิร์ฟเวอร์ที่ใช้อยู่ หรือใช้ระบบปฏิบัติการอื่นอย่าง Debian, AlmaLinux ให้ติดตั้งเองตามลำดับด้านล่าง ทุกคำสั่งอิงสถานะที่เชื่อมต่อด้วย root หากเชื่อมต่อด้วยผู้ใช้ทั่วไป ให้เติม sudo หน้าคำสั่ง

สิ่งที่ควรตรวจก่อนติดตั้ง

Docker ทำงานบนเซิร์ฟเวอร์ทุกขนาด สำหรับโปรเจกต์ส่วนตัวที่รันคอนเทนเนอร์ไม่กี่ตัว แผนทั่วไปขนาดเล็ก 12GB ก็เพียงพอแล้ว หากต้องการรันฐานข้อมูล เว็บเซิร์ฟเวอร์และแคชพร้อมกัน 24GB หรือมากกว่าจะให้พื้นที่เพียงพอ หากคุณดาวน์โหลดและสร้างอิมเมจบ่อย NVMe VPS ที่มีดิสก์เร็วจะทำให้เห็นความแตกต่างได้ชัดเจน

หากมีแพ็กเกจ Docker เก่าจากคลังของระบบปฏิบัติการ ให้ลบก่อนเพื่อไม่ให้ปนกับแพ็กเกจทางการ แพ็กเกจที่ไม่ได้ติดตั้งจะถูกข้ามไป จึงรันตามเดิมได้เลย

Ubuntu, Debian
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do apt remove -y $pkg; done

ติดตั้ง Docker บน Ubuntu 24.04

ขั้นที่ 1 เพิ่มคีย์และที่อยู่คลัง

Ubuntu 24.04
apt update
apt install -y ca-certificates curl
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" > /etc/apt/sources.list.d/docker.list

ขั้นที่ 2 ติดตั้ง Docker Engine และ Compose

Ubuntu 24.04
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

เมื่อติดตั้งเสร็จ บริการ Docker จะเปิดเองอัตโนมัติ และแม้รีสตาร์ตเซิร์ฟเวอร์ก็จะเปิดด้วย คำสั่งเดียวกันใช้ได้กับ Ubuntu 22.04 และ 26.04 ด้วย ชื่อเวอร์ชันในที่อยู่คลังจะอ่านจาก /etc/os-release โดยอัตโนมัติ

ติดตั้ง Docker บน Debian 13

Debian มีลำดับเหมือน Ubuntu เพียงเปลี่ยนที่อยู่คลังเป็น linux/debian บน Debian 12 ก็ใช้คำสั่งเดียวกัน

Debian 13
apt update
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/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/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

ติดตั้ง Docker บน AlmaLinux 10

AlmaLinux และ Rocky Linux ใช้คลัง RHEL ของ Docker ให้จัดการ Podman ที่มีมาในระบบก่อนเพื่อไม่ให้ซ้อนกัน แล้วจึงติดตั้ง บน AlmaLinux 9 และ Rocky Linux 9, 10 ก็ใช้คำสั่งเดียวกัน

AlmaLinux 10
dnf remove -y podman buildah runc
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker

เมื่อติดตั้งครั้งแรกและระบบถามว่าจะยอมรับคีย์ลายเซ็นของคลังหรือไม่ ให้กด y ตระกูล RHEL จะไม่เปิดบริการอัตโนมัติหลังติดตั้ง จึงใช้ systemctl enable --now docker บรรทัดสุดท้ายเพื่อเปิดตอนนี้และให้เปิดตอนบูตด้วย

ตรวจการติดตั้งและคอนเทนเนอร์แรก

ลองรันคอนเทนเนอร์ทดสอบด้วยคำสั่งด้านล่างสักครั้ง หากแสดงข้อความที่ขึ้นต้นด้วย Hello from Docker แสดงว่าเอนจิน การดาวน์โหลดอิมเมจ และการรันคอนเทนเนอร์ทำงานได้ดีทั้งหมด การเติม --rm ทำให้คอนเทนเนอร์ถูกลบทันทีเมื่อรันเสร็จ

เทอร์มินัล
docker run --rm hello-world
docker compose version

หากต้องการให้ผู้ใช้ทั่วไปใช้ Docker ได้ ให้เพิ่มผู้ใช้นั้นเข้ากลุ่ม docker แล้วล็อกอินใหม่ กลุ่ม docker มีสิทธิ์เทียบเท่า root จึงเพิ่มเฉพาะผู้ใช้ที่ไว้ใจได้

เทอร์มินัล
usermod -aG docker ชื่อผู้ใช้

นำบริการขึ้นด้วย Docker Compose

Compose คือวิธีเขียนการตั้งค่าคอนเทนเนอร์ไว้ในไฟล์ YAML ไฟล์เดียวแล้วเปิดด้วยบรรทัดเดียว แม้ย้ายหรือสร้างเซิร์ฟเวอร์ใหม่ มีแค่ไฟล์เดิมก็ได้สภาพแวดล้อมเดิมกลับมา ตัวอย่างไฟล์สำหรับเปิดเว็บเซิร์ฟเวอร์ Nginx หนึ่งตัวมีหน้าตาแบบนี้

เทอร์มินัล
mkdir -p /opt/web && cd /opt/web
cat > compose.yaml <<'EOF'
services:
  web:
    image: nginx:stable
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped
EOF
docker compose up -d

เปิด http://YOUR_SERVER_IP ในเบราว์เซอร์ จะพบหน้าจอ Nginx และหากใส่ index.html ในโฟลเดอร์ html ก็จะแสดงไฟล์นั้น คำสั่งที่ใช้บ่อยมีเพียงสี่คำสั่งด้านล่างก็เพียงพอ

  • docker compose ps: แสดงคอนเทนเนอร์ที่ทำงานอยู่และพอร์ต
  • docker compose logs -f: ติดตามล็อกแบบเรียลไทม์ ออกด้วย Ctrl+C
  • docker compose pull && docker compose up -d: ดึงอิมเมจใหม่และเปลี่ยนคอนเทนเนอร์เป็นเวอร์ชันใหม่
  • docker compose down: หยุดและล้างคอนเทนเนอร์ ข้อมูลใน volume ยังอยู่ครบ

เขียน restart: unless-stopped ไว้ เมื่อรีสตาร์ตเซิร์ฟเวอร์ คอนเทนเนอร์ก็จะเปิดกลับมาเอง เฉพาะคอนเทนเนอร์ที่คุณหยุดเองเท่านั้นที่จะยังหยุดอยู่

ไฟร์วอลล์และการเปิดพอร์ต

Docker ใส่พอร์ตที่เปิดด้วย ports: ลงในกฎไฟร์วอลล์ (iptables) โดยตรง พอร์ตที่ไม่ได้อนุญาตใน ufw หากเขียนใน ports: ก็จะเข้าจากภายนอกได้ ฐานข้อมูลหรือหน้าจัดการที่ไม่จำเป็นต้องเปิดสู่ภายนอก ให้ผูกไว้กับ 127.0.0.1 เท่านั้นตามด้านล่าง ก็จะเข้าได้เฉพาะภายในเซิร์ฟเวอร์

compose.yaml
    ports:
      - "127.0.0.1:5432:5432"

เว็บเซอร์วิสเปิดเฉพาะพอร์ต 80 และ 443 ส่วนที่เหลือให้เรียกกันด้วยชื่อบริการภายในเครือข่าย Compose เดียวกันจะเป็นระเบียบ ไฟร์วอลล์พื้นฐานของทั้งเซิร์ฟเวอร์ ให้เปิดเฉพาะ SSH, HTTP, HTTPS ตามคู่มือไฟร์วอลล์พื้นฐาน

การจัดการล็อกและดิสก์

ล็อกคอนเทนเนอร์จะสะสมไปเรื่อย ๆ หากไม่กำหนด ระบุ local log driver ใน /etc/docker/daemon.json ตามด้านล่าง ล็อกจะถูกบีบอัดและเก็บเพียงขนาดที่กำหนด บันทึกแล้วรัน systemctl restart docker จะมีผลกับคอนเทนเนอร์ที่สร้างใหม่

/etc/docker/daemon.json
{
  "log-driver": "local"
}

อิมเมจที่ไม่ใช้และคอนเทนเนอร์ที่หยุดแล้วก็ใช้พื้นที่ดิสก์ ดูปริมาณการใช้ด้วย docker system df แล้วลบอิมเมจที่ไม่ได้ใช้อยู่ด้วย docker image prune -a เมื่อข้อมูลมากขึ้น ติด NVMe block disk ให้เซิร์ฟเวอร์แล้วใช้เป็นโฟลเดอร์ข้อมูลของ Docker ก็ได้

การปกป้องข้อมูลและขั้นต่อไป

คอนเทนเนอร์ลบและสร้างใหม่ได้ทุกเมื่อ แต่ข้อมูลใน volume สร้างใหม่ไม่ได้ ฐานข้อมูลควรเก็บไฟล์ dump เป็นประจำ และปกป้องเซิร์ฟเวอร์ทั้งเครื่องด้วยแบ็กอัปอัตโนมัติหรือสแนปช็อตไปพร้อมกันจะอุ่นใจ วิธีอยู่ในคู่มือแบ็กอัปและสแนปช็อต

ไฟล์ Compose สำหรับนำ WordPress ขึ้นด้วย Docker อยู่ในคู่มือติดตั้ง WordPress หากต้องการ deploy หลายแอปผ่านหน้าจอและติดใบรับรอง HTTPS อัตโนมัติ ลองสร้างเซิร์ฟเวอร์ด้วยอิมเมจ Coolify หรือ Dokploy ขนาดที่เหมาะสำหรับใช้กับคอนเทนเนอร์โดยเฉพาะสรุปไว้ใน Container VPS

คู่มือที่ควรอ่านต่อ

การตั้งค่าที่ควรทำต่อจากคู่มือนี้

ดูคู่มือทั้งหมด