🐳 Docker คืออะไร? ทำไมคนสาย DevOps และ Developer ถึงต้องรู้จัก!
Docker คือแพลตฟอร์มที่ช่วยให้เราสามารถ “บรรจุ” แอปพลิเคชันของเรา (รวมถึงระบบปฏิบัติการและไลบรารีต่างๆ) ลงไปในสิ่งที่เรียกว่า “Container” เพื่อให้สามารถรันที่ไหนก็ได้ โดยไม่ต้องกังวลเรื่อง “มันรันไม่ได้บนเครื่องนี้!”
🔧 ทำไมต้องใช้ Docker?
ปัญหาเดิมๆ ที่เจอ | วิธีที่ Docker ช่วยได้ |
---|---|
เครื่อง A ใช้ได้ เครื่อง B ใช้ไม่ได้ | Docker ทำให้เหมือนรันแอปในกล่องเดียวกันทุกเครื่อง |
ติดตั้งระบบยุ่งยาก | ใช้ Dockerfile หรือ image ที่มีอยู่แล้ว |
แอปต้องมีหลายบริการ | Docker รองรับ Multi-container ผ่าน Docker Compose |
🧱 คำศัพท์พื้นฐาน
- Image – พิมพ์เขียวของ Container เช่น Ubuntu, MySQL, PHP
- Container – เครื่องจำลองขนาดจิ๋วที่รันจริง
- Dockerfile – ไฟล์สคริปต์ที่บอกว่า Image นี้ต้องติดตั้งอะไรบ้าง
- Docker Hub – ศูนย์รวม image ที่มีให้โหลดฟรี
⚙️ ตัวอย่างการใช้งาน Docker เบื้องต้น
1. ตรวจสอบว่าเครื่องติดตั้ง Docker แล้วหรือยัง
docker --version
2. ดึง Image มาใช้งาน (เช่น nginx)
docker pull nginx
3. รัน container จาก image
docker run -d -p 8080:80 nginx
💡 เข้าเว็บ http://localhost:8080 จะเห็นหน้าเว็บ Nginx แล้ว!
📝 ตัวอย่าง Dockerfile สำหรับ PHP + Apache
FROM php:8.1-apache
COPY . /var/www/html/
EXPOSE 80
ใช้คำสั่ง docker build -t my-php .
เพื่อสร้าง image จาก Dockerfile
🔄 คำสั่ง Docker ที่ใช้บ่อย
คำสั่ง | อธิบาย |
---|---|
docker ps |
แสดง container ที่กำลังทำงาน |
docker images |
ดู images ที่มีในเครื่อง |
docker stop <id> |
หยุด container |
docker rm <id> |
ลบ container |
docker rmi <image> |
ลบ image |
docker exec -it <id> bash |
เข้าข้างใน container |
🧩 การจัดการหลาย Container ด้วย Docker Compose
ตัวอย่างไฟล์ docker-compose.yml
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpass
รันคำสั่ง:
docker-compose up -d
📦 ข้อดีของ Docker
- ✅ ติดตั้งง่าย แพ็กของครบ
- ✅ ย้ายเครื่องสะดวก
- ✅ รองรับ CI/CD
- ✅ ทำงานร่วมกับ Kubernetes ได้
🖼️ ภาพประกอบการทำงานของ Docker
📚 สรุป
Docker คือเครื่องมือที่ช่วยให้การพัฒนา ทดสอบ และ Deploy แอปของคุณเป็นไปได้ง่าย รวดเร็ว และแน่นอน ไม่ว่าจะรันบนเครื่องนักพัฒนาหรือบนเซิร์ฟเวอร์จริงก็ตาม