- 1. ทำไมต้องใช้ Vagrant ร่วมกับ VirtualBox?
- 2. สิ่งที่ผู้เรียนจะทำได้
- 3. เตรียมเครื่องก่อนเริ่ม Workshop
- 4. Workshop A — สร้าง Ubuntu VM เครื่องแรก
- 5. Workshop B — สร้าง Ubuntu + Nginx แบบอัตโนมัติ
- 6. Workshop C — ทดลอง Synced Folder แบบแก้เว็บสด
- 7. Workshop D — การจัดการ Lifecycle ของ VM
- 8. Workshop เสริม — Private Network และ Multi-machine
- 9. Troubleshooting — ปัญหาที่พบได้บ่อย
- 10. เรื่องสำคัญในปี 2569 — HCP Vagrant Registry กำลังยุติบริการ
- 11. แบบฝึกหัดท้าย Workshop
- 12. แนวทางต่อยอดสำหรับ DevOps / Software Engineering
- 13. สรุป
- เอกสารอ้างอิง

เครื่องมือ: Vagrant, Oracle VirtualBox, Ubuntu 24.04 LTS, Nginx, Bash, Terminal/PowerShell
เป้าหมาย: สร้าง Ubuntu VM แบบอัตโนมัติและเข้าเว็บไซต์ที่http://127.0.0.1:8080บนเครื่อง Host ได้
หมายเหตุเกี่ยวกับภาพ: ไฟล์ Infographic แนบอยู่ใน ZIP ชุด Workshop ที่มาพร้อมบทความนี้ เมื่อแยกไฟล์ ZIP ให้รักษาโครงสร้างโฟลเดอร์
images/เพื่อแสดงภาพใน Markdown ได้
#1. ทำไมต้องใช้ Vagrant ร่วมกับ VirtualBox?
เมื่อพัฒนาและทดสอบซอฟต์แวร์บนระบบ Linux ผู้เรียนอาจต้องติดตั้ง Ubuntu สร้างบัญชี ตั้งค่าเครือข่าย และติดตั้งซอฟต์แวร์ซ้ำหลายครั้ง หากใช้ VirtualBox ผ่าน GUI เพียงอย่างเดียว ทุกขั้นตอนอาจต้องทำด้วยมือ จนได้สภาพแวดล้อมที่ไม่เหมือนกันในแต่ละเครื่อง
VirtualBox คือซอฟต์แวร์ Virtualization ที่สร้างและรัน Virtual Machine (VM) โดยจัดสรร CPU, RAM, Disk และ Network ของ Guest บน Host
Vagrant คือเครื่องมือ CLI สำหรับอธิบายและควบคุมสภาพแวดล้อมการพัฒนาผ่านไฟล์ Vagrantfile สามารถสั่งสร้าง เปิด หยุด และลบ VM รวมทั้งติดตั้งซอฟต์แวร์ภายในเครื่องได้อัตโนมัติ
การทำงานร่วมกันช่วยให้สภาพแวดล้อมเป็น reproducible development environment หรือสภาพแวดล้อมที่สร้างซ้ำได้ และเป็นตัวอย่างพื้นฐานของแนวทาง Infrastructure as Code (IaC) ในระดับเครื่องพัฒนา
#องค์ประกอบสำคัญ
| องค์ประกอบ | ความหมาย | ตัวอย่างใน Workshop |
|---|---|---|
| Host | คอมพิวเตอร์จริงที่รันเครื่องมือ | Windows / macOS / Linux |
| Guest VM | ระบบปฏิบัติการในเครื่องเสมือน | Ubuntu 24.04 LTS |
| Provider | โปรแกรมที่ Vagrant ใช้สร้าง VM | virtualbox |
| Vagrant Box | อิมเมจพื้นฐานพร้อมข้อมูลการทำงาน | bento/ubuntu-24.04 |
Vagrantfile |
ไฟล์ตั้งค่า VM ในรูปแบบ Ruby DSL | CPU, RAM, Port, Folder |
| Provisioner | ติดตั้งและกำหนดค่าซอฟต์แวร์ | scripts/provision.sh |
| Port Forwarding | เชื่อมต่อพอร์ต Host ไปยัง Guest | 127.0.0.1:8080 → Guest 80 |
| Synced Folder | แชร์ไฟล์ระหว่าง Host กับ Guest | site/ ↔ /srv/vagrant-site |
#สถาปัตยกรรมของ Workshop
flowchart TD
CONFIG["Vagrantfile"] --> CLI["Vagrant CLI"]
CLI --> PROVIDER["VirtualBox Provider"]
PROVIDER --> VM["Ubuntu 24.04 VM"]
BOX["Ubuntu 24.04 Base Box"] --> VM
CLI --> PROVISION["Shell Provisioning"]
PROVISION --> NGINX["Nginx Web Server - Guest Port 80"]
VM --> NGINX
HOSTFILES["Host: site/index.html"] -->|Synced Folder| GUESTFILES["Guest: /srv/vagrant-site"]
GUESTFILES --> NGINX
BROWSER["Host Browser: 127.0.0.1:8080"] -->|Port Forwarding| NGINX
#2. สิ่งที่ผู้เรียนจะทำได้
หลังจบ Workshop ผู้เรียนควรสามารถ:
- อธิบายบทบาทของ VirtualBox, Vagrant, Vagrant Box และ Vagrantfile ได้
- ตรวจสอบเวอร์ชันและความเข้ากันได้ของ Vagrant/VirtualBox
- สร้าง Ubuntu VM ด้วย
vagrant upและเชื่อมต่อด้วยvagrant ssh - กำหนด CPU, RAM และชื่อ VM จาก
Vagrantfile - ติดตั้ง Nginx ด้วย Shell Provisioning แบบอัตโนมัติ
- ตั้งค่า Port Forwarding และ Synced Folder เพื่อพัฒนาเว็บไซต์จาก Host
- ตรวจสอบผลลัพธ์ แก้ไขข้อผิดพลาด และล้างทรัพยากรได้อย่างปลอดภัย
#3. เตรียมเครื่องก่อนเริ่ม Workshop
#3.1 สเปกที่แนะนำ
| รายการ | คำแนะนำ |
|---|---|
| CPU | Intel/AMD ที่รองรับ VT-x/AMD-V; เปิด Hardware Virtualization ใน BIOS/UEFI |
| RAM ของ Host | แนะนำ 8 GB ขึ้นไป |
| RAM ของ VM | 2,048 MB (2 GB) |
| vCPU ของ VM | 2 vCPU |
| พื้นที่ว่าง | ประมาณ 10–20 GB หรือมากกว่านั้นตามขนาด Box และการติดตั้ง |
| Network | ต้องเชื่อมต่ออินเทอร์เน็ตครั้งแรกเพื่อดาวน์โหลด Box และติดตั้ง Nginx |
| OS เครื่อง Host | Windows, macOS หรือ Linux รุ่นที่ผู้ผลิตเครื่องมือรองรับ |
ความเข้ากันได้ของเวอร์ชัน: เอกสาร HashiCorp ระบุว่า Vagrant VirtualBox Provider รองรับ VirtualBox 7.2.x โดยการรองรับ VirtualBox 7.2 ถูกเพิ่มใน Vagrant 2.4.9 หากใช้ VirtualBox 7.2 ควรใช้ Vagrant 2.4.9 หรือใหม่กว่าและตรวจสอบเอกสารอีกครั้งก่อนอบรม
ข้อจำกัดของสถาปัตยกรรม: บทความใช้ Box
bento/ubuntu-24.04ที่ต้องเลือก build ให้ตรงกับสถาปัตยกรรมและ Provider ของเครื่อง หากใช้ Apple Silicon/ARM64 ต้องตรวจสอบว่า Box มีvirtualbox+arm64จริง อย่าใช้ Box x86_64 บน ARM โดยสมมติว่าจะรันได้อัตโนมัติ
#3.2 ติดตั้ง VirtualBox และ Vagrant
ดาวน์โหลดจากผู้ผลิตโดยตรง:
- Oracle VirtualBox: https://www.virtualbox.org/wiki/Downloads
- HashiCorp Vagrant: https://developer.hashicorp.com/vagrant/install
สำหรับ Windows 10/11 ให้ติดตั้ง VirtualBox แล้วจึงติดตั้ง Vagrant จากนั้นเปิด PowerShell/Windows Terminal ใหม่ หากมีข้อขัดแย้งกับ Hyper-V, WSL2 หรือ Docker Desktop ให้ตรวจสอบ Error และเอกสารเวอร์ชันที่ใช้ก่อนเปลี่ยนการตั้งค่าระบบ
สำหรับ Linux/macOS ให้ติดตั้งตามแพ็กเกจที่ผู้พัฒนารองรับสำหรับ Host OS และ CPU Architecture นั้น ๆ
ตรวจสอบหลังติดตั้ง:
vagrant --version
VBoxManage --version
ทั้งสองคำสั่งควรแสดงข้อมูลเวอร์ชันโดยไม่แจ้งว่าไม่พบคำสั่ง หาก VBoxManage ใช้ไม่ได้บน Windows ให้ตรวจสอบ PATH และโฟลเดอร์ติดตั้ง VirtualBox ก่อน
#4. Workshop A — สร้าง Ubuntu VM เครื่องแรก
#ขั้นตอน 1: สร้างโฟลเดอร์โปรเจกต์
mkdir vagrant-first-vm
cd vagrant-first-vm
#ขั้นตอน 2: สร้าง Vagrantfile เริ่มต้น
vagrant init bento/ubuntu-24.04
แก้ไฟล์ Vagrantfile ให้เป็นตัวอย่างขั้นต่ำดังนี้:
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-24.04"
config.vm.box_architecture = :auto
config.vm.provider "virtualbox" do |vb|
vb.memory = 2048
vb.cpus = 2
end
end
:autoให้ Vagrant เลือก Box Architecture ตาม Host; ทั้งนี้ Registry ต้องมี Box ตรงกับสถาปัตยกรรมและ Provider ด้วย
#ขั้นตอน 3: ตรวจสอบและเปิด VM
vagrant validate
vagrant up --provider=virtualbox
เมื่อรันครั้งแรก Vagrant จะค้นหาหรือดาวน์โหลด Box สร้าง VM ผ่าน VirtualBox แล้วรอจน SSH พร้อมใช้งาน
#ขั้นตอน 4: SSH เข้า Ubuntu
vagrant status
vagrant ssh
ภายใน VM ทดลอง:
cat /etc/os-release
hostname
ip -br address
free -h
exit
exit ใช้ออกจาก SSH กลับ Host โดยไม่ปิด VM
#ขั้นตอน 5: ปิดเครื่องทดลอง
vagrant halt
หากต้องการเปิดใหม่ใช้ vagrant up ส่วนการลบ VM ใช้ vagrant destroy หลังแน่ใจว่าไม่ต้องเก็บข้อมูลในดิสก์เสมือน
ต่อไปนี้เป็น Workshop B อีกโปรเจกต์หนึ่ง ไม่ควรนำไฟล์จาก Workshop B ไปวางทับ
Vagrantfileของ Workshop A โดยไม่ได้ตั้งใจ
#5. Workshop B — สร้าง Ubuntu + Nginx แบบอัตโนมัติ
Workshop นี้ใช้ชุดไฟล์ที่แจกมาพร้อมบทความ สามารถสร้างด้วยตัวเองตามตัวอย่างด้านล่าง หรือแตกไฟล์ ZIP แล้วสั่ง vagrant up ได้เลย
#5.1 โครงสร้างโปรเจกต์
vagrant-virtualbox-nginx-workshop/
├── Vagrantfile
├── scripts/
│ └── provision.sh
├── site/
│ └── index.html
├── images/
│ └── vagrant-virtualbox-infographic.png
├── .gitignore
├── README.md
└── article.md
ข้อสำคัญ: เปิด Terminal ที่โฟลเดอร์ vagrant-virtualbox-nginx-workshop/ ซึ่งมีไฟล์ Vagrantfile อยู่ ไม่ใช่ที่โฟลเดอร์ scripts/
#5.2 เขียน Vagrantfile
# Vagrant + VirtualBox Workshop — Ubuntu 24.04 + Nginx
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-24.04"
config.vm.box_architecture = :auto
config.vm.hostname = "nginx-lab"
# Host localhost:8080 forwards to guest port 80
config.vm.network "forwarded_port", guest: 80, host: 8080,
host_ip: "127.0.0.1", auto_correct: false
# Edit files on Host and read the same files in Guest
config.vm.synced_folder "./site", "/srv/vagrant-site", create: true
config.vm.provider "virtualbox" do |vb|
vb.name = "vagrant-nginx-workshop"
vb.memory = 2048
vb.cpus = 2
end
config.vm.provision "shell", path: "scripts/provision.sh"
end
อ่านค่าคอนฟิก:
config.vm.boxคือชื่อ Base Box ที่ Vagrant จะใช้สร้าง VMconfig.vm.box_architectureให้เลือกสถาปัตยกรรมที่เหมาะสมกับ Hostconfig.vm.hostnameกำหนด Hostname ภายใน Ubuntuforwarded_portส่งพอร์ต 8080 ของ Host ไป 80 ภายใน Guesthost_ip: "127.0.0.1"จำกัดการเข้าถึงเว็บทดลองเฉพาะเครื่อง Host ช่วยลดการเปิดเผยพอร์ตให้เครื่องอื่นบน LANsynced_folderแชร์โฟลเดอร์site/ไปเป็น/srv/vagrant-sitevb.memory/vb.cpusจัดสรร RAM และ vCPUconfig.vm.provisionระบุสคริปต์สำหรับติดตั้งและกำหนดค่า Nginx
#5.3 เขียน scripts/provision.sh
สร้างโฟลเดอร์ scripts/ แล้วเขียนไฟล์ provision.sh ดังนี้:
#!/usr/bin/env bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
printf '\n[1/4] Updating package index...\n'
apt-get update
printf '\n[2/4] Installing Nginx and curl...\n'
apt-get install -y nginx curl
printf '\n[3/4] Configuring Nginx document root...\n'
cat > /etc/nginx/sites-available/default <<'NGINX'
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /srv/vagrant-site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
NGINX
nginx -t
systemctl enable --now nginx
systemctl restart nginx
printf '\n[4/4] Verifying the HTTP response...\n'
curl --fail --silent --show-error -I http://127.0.0.1/
printf '\nNginx provisioned successfully. Visit http://127.0.0.1:8080 on the host.\n'
สคริปต์นี้ทำงานบน Ubuntu Guest ด้วยสิทธิ์ root ซึ่งเป็นค่าเริ่มต้นของ Shell Provisioner สำหรับ Guest แบบ POSIX จึงสามารถใช้ apt-get, เขียนไฟล์ใน /etc/nginx และเรียก systemctl ได้
คำสั่งที่สำคัญ: set -euo pipefail ช่วยให้สคริปต์หยุดเมื่อตรวจพบข้อผิดพลาดตามเงื่อนไขของ Bash ขณะที่ nginx -t ตรวจไวยากรณ์คอนฟิกก่อนรีสตาร์ตบริการ
#5.4 เขียน site/index.html
สร้างโฟลเดอร์ site/ และไฟล์ index.html:
<!doctype html>
<html lang="th">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Vagrant + VirtualBox Workshop</title>
</head>
<body>
<h1>Vagrant + VirtualBox ทำงานสำเร็จ!</h1>
<p>เว็บไซต์จาก Ubuntu 24.04 + Nginx Web Server</p>
<p>แก้ไขไฟล์ site/index.html บน Host แล้วรีเฟรชเว็บได้ทันที</p>
</body>
</html>
ใน ZIP จะมีเวอร์ชันที่จัดรูปแบบด้วย CSS ให้แล้ว
#5.5 เริ่ม VM และติดตั้ง Nginx
เมื่ออยู่ในโฟลเดอร์ Workshop B ให้รัน:
vagrant validate
vagrant up --provider=virtualbox
vagrant status
ผลที่คาดหวัง: Vagrant สร้าง Ubuntu VM สำเร็จ แชร์โฟลเดอร์ site/ เข้าสู่ Guest ติดตั้ง Nginx และเริ่มเว็บเซิร์ฟเวอร์สำเร็จ หาก Nginx ไม่ทำงานให้ดู Error ของ Provisioner ใน Terminal
#5.6 ตรวจสอบจากภายใน Ubuntu
vagrant ssh
ภายใน Guest:
hostname
ls -la /srv/vagrant-site
sudo nginx -t
sudo systemctl is-active nginx
curl -I http://127.0.0.1/
exit
ผลที่ควรได้คือ nginx: configuration file ... test is successful, สถานะ active และ HTTP Response เช่น HTTP/1.1 200 OK
#5.7 ตรวจสอบจาก Host ผ่านเบราว์เซอร์
เปิด URL บน Windows/macOS/Linux Host:
หรือทดสอบจาก Terminal ของ Host:
curl -I http://127.0.0.1:8080/
Windows PowerShell: หากคำสั่ง curl ถูก alias ไปยังคำสั่งอื่น ให้ใช้ curl.exe -I http://127.0.0.1:8080/
อธิบายผล: พอร์ต
8080อยู่บนเครื่อง Host ส่วนพอร์ต80อยู่บน Ubuntu Guest และ Vagrant/VirtualBox จัดการ Port Forwarding ให้
#6. Workshop C — ทดลอง Synced Folder แบบแก้เว็บสด
#6.1 แก้ไข HTML บน Host
ใช้ VS Code หรือ Text Editor เปิด site/index.html แล้วเปลี่ยนข้อความหัวข้อ เช่น:
<h1>สวัสดีจาก Vagrant Workshop รุ่นที่ 2</h1>
บันทึกไฟล์ แล้วกด Refresh หน้าเว็บ http://127.0.0.1:8080
ผลที่คาดหวัง: ข้อความเปลี่ยนโดยไม่ต้องใช้ vagrant provision เพราะ Nginx อ่านไฟล์จาก Synced Folder ที่แชร์ระหว่าง Host และ Guest
#6.2 ตรวจสอบไฟล์จาก Guest
vagrant ssh
ls -l /srv/vagrant-site/index.html
cat /srv/vagrant-site/index.html
exit
ถ้าพบ Error การ Mount Shared Folder ให้ตรวจสอบ VirtualBox Guest Additions และสิทธิ์โฟลเดอร์บน Host เพราะการใช้ VirtualBox Shared Folder ขึ้นกับความเข้ากันได้ของ Host, Guest และ Guest Additions
#7. Workshop D — การจัดการ Lifecycle ของ VM
| คำสั่ง | การทำงาน |
|---|---|
vagrant validate |
ตรวจ Vagrantfile |
vagrant up --provider=virtualbox |
สร้าง/เปิด VM |
vagrant status |
ดูสถานะ VM ในโปรเจกต์ |
vagrant global-status |
ดูเครื่อง Vagrant ที่บันทึกไว้ใน Host |
vagrant ssh |
SSH เข้า VM |
vagrant ssh-config |
แสดงค่าการเชื่อมต่อ SSH |
vagrant provision |
รัน Provisioner ซ้ำบน VM ที่เปิดอยู่ |
vagrant reload |
รีสตาร์ตและโหลดการตั้งค่า VM ที่เปลี่ยน |
vagrant reload --provision |
รีสตาร์ตและรัน Provisioner ซ้ำ |
vagrant halt |
ปิด VM โดยเก็บดิสก์ไว้ |
vagrant suspend |
พัก VM พร้อมสถานะในหน่วยความจำ |
vagrant resume |
กลับมาทำงานจากสถานะพัก |
vagrant destroy |
ลบ VM และดิสก์ของ VM; ต้องระวังข้อมูลสูญหาย |
vagrant box list |
ดู Base Box ที่มีอยู่ในเครื่อง |
#ตัวอย่างทดสอบการสร้างซ้ำ
vagrant halt
vagrant up
vagrant provision
เปิดเว็บและตรวจสอบอีกครั้งว่า Nginx ยังทำงาน และไฟล์ที่แชร์จาก Host ยังคงเข้าถึงได้
สำหรับการล้าง Lab:
vagrant destroy
vagrant destroy จะขอยืนยันก่อนลบเครื่อง และข้อมูลที่เก็บอยู่ เฉพาะในดิสก์ Guest อาจสูญหาย ไฟล์โปรเจกต์บน Host (เช่น Vagrantfile, site/index.html) ยังคงอยู่ตามปกติ
#8. Workshop เสริม — Private Network และ Multi-machine
#8.1 เพิ่ม Private Network
กรณีต้องการสื่อสารโดยตรงระหว่าง Host กับ Guest สามารถเพิ่มใน Vagrantfile ได้ เช่น:
config.vm.network "private_network", ip: "192.168.56.10"
หลังแก้ไขให้ใช้:
vagrant reload
ค่า IP เป็นตัวอย่างเท่านั้น ต้องไม่ชนกับเครือข่ายของเครื่องจริงหรือ Host-only Network ของ VirtualBox และอาจต้องกำหนดค่าระบบเพิ่มเติมตาม Host OS
#8.2 สร้าง VM สองเครื่อง (ตัวอย่าง แยกจาก Lab หลัก)
สร้างโฟลเดอร์โปรเจกต์ใหม่และใช้ Vagrantfile ต่อไปนี้หากต้องการฝึก Multi-machine:
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-24.04"
config.vm.box_architecture = :auto
config.vm.define "web" do |web|
web.vm.hostname = "web"
web.vm.network "private_network", ip: "192.168.56.11"
end
config.vm.define "db" do |db|
db.vm.hostname = "db"
db.vm.network "private_network", ip: "192.168.56.12"
end
end
คำสั่งที่ใช้:
vagrant up --provider=virtualbox
vagrant ssh web
vagrant ssh db
vagrant status
หมายเหตุ: ตัวอย่างนี้สร้าง VM เปล่าสองเครื่องเพื่อทดลองเครือข่าย ยังไม่ได้ติดตั้ง Web Server หรือ Database และต้องใช้ RAM เพิ่มจาก Lab หลัก
#9. Troubleshooting — ปัญหาที่พบได้บ่อย
| ปัญหา / อาการ | สาเหตุที่เป็นไปได้ | แนวทางตรวจสอบ |
|---|---|---|
vagrant ไม่ใช่คำสั่งที่รู้จัก |
Vagrant ไม่อยู่ใน PATH | ติดตั้งใหม่/เปิด Terminal ใหม่ แล้วตรวจ vagrant --version |
| ไม่พบ VirtualBox Provider | ไม่มี VirtualBox หรือ Vagrant รองรับเวอร์ชันนั้นไม่ได้ | ตรวจ VBoxManage --version, รุ่น Vagrant และเอกสาร Compatibility |
| VM ไม่เริ่ม; VT-x/AMD-V unavailable | Hardware Virtualization หรือ Hypervisor Conflict | ตรวจ BIOS/UEFI และ Hyper-V/WSL2/Docker Desktop โดยไม่ปิดฟีเจอร์ความปลอดภัยโดยไม่จำเป็น |
| Box ไม่รองรับ Provider | Box ไม่มี build สำหรับ virtualbox |
ตรวจ Provider, เวอร์ชัน Box และ Architecture |
SSH timeout |
Guest ไม่บูต, RAM ไม่พอ หรือ Networking มีปัญหา | ตรวจสถานะ/Console VM, vagrant status และ Boot Log |
| Host port 8080 ถูกใช้อยู่ | มีโปรแกรมอื่นใช้พอร์ตเดียวกัน | เปลี่ยน host: 8080 เป็น 8081 แล้ว vagrant reload |
| Nginx ไม่ทำงาน | Provision ล้มเหลวหรือ Nginx config ผิด | vagrant ssh → sudo nginx -t และ sudo systemctl status nginx |
| 403 หรือ 404 จาก Nginx | Path หรือสิทธิ์การอ่านไฟล์เว็บผิด | ตรวจ /srv/vagrant-site/index.html และ nginx -t |
| Synced Folder Mount Error | Guest Additions/Shared Folders ไม่เข้ากัน | ตรวจเวอร์ชันและสิทธิ์ Host/Guest และ Log ของ vagrant up |
| แก้ script แล้วไม่ทำงาน | Provisioner ไม่รันซ้ำอัตโนมัติทุกครั้ง | สั่ง vagrant provision |
#บันทึกเฉพาะ Windows
เมื่อใช้ VirtualBox ร่วมกับ Hyper-V หรือ WSL2 ประสิทธิภาพหรือความเข้ากันได้อาจแตกต่างกันตาม Windows/VirtualBox รุ่นจริง ควรตรวจข้อมูลใน Error ก่อนปรับ Windows Features เพราะการปิด Hyper-V อาจส่งผลต่อ WSL2, Docker Desktop และเครื่องมือ Virtualization อื่น
#10. เรื่องสำคัญในปี 2569 — HCP Vagrant Registry กำลังยุติบริการ
HashiCorp ประกาศเลิกให้บริการ HCP Vagrant Registry โดยมีวันสำคัญดังนี้:
- 1 ตุลาคม 2569: ไม่สามารถสร้าง Box/Registry ใหม่บนบริการเดิมได้
- 2 พฤศจิกายน 2569: สิ้นสุดการดูแลและบำรุงรักษา
- 31 ธันวาคม 2569: ยุติการให้บริการ Registry เดิม
Vagrant CLI ไม่ได้ถูกประกาศยุติพร้อม Registry แต่การดาวน์โหลด Box จาก Registry เดิมหลังวันปิดบริการจะไม่สามารถพึ่งพาได้ ดังนั้นผู้สอนที่วางแผนใช้เอกสารนี้ในปี 2570 ควรจัดเก็บ Box ในแหล่งที่เชื่อถือได้และควบคุมได้ (เช่น Repository/Artifact Storage ของสถาบัน) พร้อมตรวจ SHA-256 และทดสอบเวอร์ชันจริงล่วงหน้า
ตัวอย่างเมื่อต้องการนำ ไฟล์ .box ที่ได้มาจากแหล่งเชื่อถือได้ มาเพิ่มด้วยตัวเอง:
vagrant box add ./ubuntu-24.04-virtualbox.box --name local/ubuntu-24.04 --provider virtualbox
vagrant box list
แล้วแก้บรรทัดใน Vagrantfile:
config.vm.box = "local/ubuntu-24.04"
เส้นทางไฟล์ข้างต้นเป็นเพียงตัวอย่างเท่านั้น ไม่มีไฟล์
.boxอยู่ในชุด ZIP ผู้ใช้งานต้องดาวน์โหลดหรือจัดเตรียม Box ที่ถูกต้องตาม Provider/Architecture และตรวจสอบที่มาเอง หากต้องการเผยแพร่ Workshop ให้นักเรียนจำนวนมาก ควรใช้ Artifact Storage และไฟล์ Metadata ที่ควบคุมเวอร์ชันแทนการพึ่งพา Registry ที่กำลังยุติบริการ
#11. แบบฝึกหัดท้าย Workshop
| งาน | สิ่งที่ต้องส่ง | คะแนน |
|---|---|---|
| ติดตั้งเครื่องมือ | ภาพ/ผลคำสั่ง vagrant --version และ VBoxManage --version |
15 |
| สร้าง Ubuntu VM | ผล vagrant status และ cat /etc/os-release |
20 |
| Provision Nginx | ผล nginx -t และ systemctl is-active nginx |
20 |
| Port Forwarding | ภาพหน้าเว็บ http://127.0.0.1:8080 |
20 |
| Synced Folder | แก้ site/index.html แล้วแสดงผลบนเว็บโดยไม่ Provision ซ้ำ |
15 |
| Lifecycle | แสดงคำสั่ง vagrant halt และ vagrant up พร้อมอธิบายความแตกต่างจาก destroy |
10 |
| รวม | 100 |
#คำถามเพื่ออภิปราย
- Vagrant ต่างจากการสร้าง VM ผ่าน VirtualBox GUI อย่างไร?
- เหตุใดไฟล์
Vagrantfileและprovision.shจึงเหมาะกับการเก็บใน Git? Port ForwardingและPrivate Networkต่างกันอย่างไร?- เหตุใดใน Lab นี้จึงเลือก
host_ip: "127.0.0.1"? vagrant reloadและvagrant provisionใช้ในสถานการณ์ใด?- หากต้องใช้ Workshop ในห้องเรียน 40 เครื่องในปี 2570 ควรจัดการ Box และการแจกจ่ายไฟล์อย่างไร?
#12. แนวทางต่อยอดสำหรับ DevOps / Software Engineering
เมื่อทำ Workshop นี้สำเร็จ สามารถต่อยอดเป็นการติดตั้ง Docker Engine บน Ubuntu VM, การสร้าง VM หลายเครื่องสำหรับ Web/Database, ใช้ Ansible แทน Shell Provisioner, การทดลอง Kubernetes แบบ Multi-node ใน Lab, หรือการทดสอบ CI/CD ที่ต้องสร้าง Environment ตามความต้องการของแต่ละโปรเจกต์
สำหรับเครื่อง Host ที่มี RAM ไม่มาก ควรเริ่มจาก VM เดียวก่อน และประเมินทรัพยากรเมื่อเพิ่มจำนวน VM
#13. สรุป
VirtualBox มีหน้าที่สร้างและรัน VM ส่วน Vagrant ช่วยทำให้การสร้างและควบคุม VM เป็นกระบวนการที่กำหนดด้วยไฟล์และรันซ้ำได้ การใช้ร่วมกันใน Workshop นี้ทำให้ผู้เรียนฝึกการสร้าง Ubuntu, SSH, Provisioning, File Sharing และ Network Configuration ผ่าน Command Line ได้จริง โดยไม่ต้องตั้งค่าทุกอย่างผ่าน GUI
ขอบเขตการตรวจสอบ: ไฟล์ Vagrantfile และ Shell Script ในชุดประกอบบทความได้รับการตรวจไวยากรณ์ (ruby -c, bash -n) แต่ไม่ได้ทดลองเปิด VM จริงในสภาพแวดล้อมที่สร้างบทความนี้ ผู้สอนควรทดสอบบน Host OS, VirtualBox, Vagrant และ Box เวอร์ชันที่ใช้ในห้องเรียนก่อนนำไปสอน
#เอกสารอ้างอิง
- HashiCorp — Vagrant Installation
- HashiCorp — VirtualBox Provider
- HashiCorp — Vagrant Getting Started
- HashiCorp — VirtualBox Configuration
- HashiCorp — Forwarded Ports
- HashiCorp — Shell Provisioning
- HashiCorp — Synced Folders
- HashiCorp — Vagrant Box CLI
- HashiCorp — HCP Vagrant Deprecation, September 17, 2026
- Oracle — VirtualBox Downloads
บทความ Workshop ภาษาไทยสำหรับการศึกษาและฝึกปฏิบัติ Linux, Virtualization และ DevOps