เริ่มต้นใช้งาน Docker
Docker เป็นแพลตฟอร์ม Containerization ที่ช่วยให้นักพัฒนาสามารถแพ็กเกจแอปพลิเคชันพร้อมกับ Dependencies ทั้งหมดไว้ใน Container เดียว ทำให้สามารถรันได้บนทุกระบบที่มี Docker ติดตั้ง
Docker คืออะไร?
Docker เป็นเครื่องมือที่ช่วยให้สามารถสร้าง, ส่ง, และรันแอปพลิเคชันใน Container ได้ Container คือสภาพแวดล้อมที่แยกออกจากกัน (Isolated Environment) ที่มีทุกอย่างที่แอปพลิเคชันต้องการเพื่อทำงาน ไม่ว่าจะเป็นโค้ด, Runtime, Library และ Config
ความแตกต่างระหว่าง Container กับ Virtual Machine
| คุณสมบัติ | Container | Virtual Machine |
|---|---|---|
| ขนาด | เล็ก (MB) | ใหญ่ (GB) |
| เวลาเริ่ม | วินาที | นาที |
| ทรัพยากร | ใช้น้อย | ใช้มาก |
| OS | ใช้ร่วมกัน | แยกกัน |
การติดตั้ง Docker
บน Ubuntu/Debian
# อัปเดต package index
sudo apt update
# ติดตั้ง dependencies
sudo apt install -y ca-certificates curl gnupg lsb-release
# เพิ่ม Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# เพิ่ม Docker repository
echo "deb [arch=$(dpkg --print-architecture) 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
# ติดตั้ง Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# เพิ่ม user เข้า docker group (ไม่ต้องใช้ sudo)
sudo usermod -aG docker $USER
บน macOS
ดาวน์โหลดและติดตั้ง Docker Desktop for Mac จากเว็บไซต์ Docker
ตรวจสอบการติดตั้ง
docker --version
docker run hello-world
คำสั่ง Docker พื้นฐาน
จัดการ Image
# ดาวน์โหลด Image จาก Docker Hub
docker pull nginx
# แสดง Image ที่มีอยู่
docker images
# ลบ Image
docker rmi nginx
# ค้นหา Image บน Docker Hub
docker search ubuntu
จัดการ Container
# รัน Container
docker run nginx
# รัน Container แบบ background (detached mode)
docker run -d nginx
# รัน Container พร้อมตั้งชื่อ
docker run -d --name my-nginx nginx
# รัน Container พร้อม port mapping
docker run -d -p 8080:80 --name my-nginx nginx
# แสดง Container ที่กำลังทำงาน
docker ps
# แสดง Container ทั้งหมด (รวมที่หยุดแล้ว)
docker ps -a
# หยุด Container
docker stop my-nginx
# เริ่ม Container อีกครั้ง
docker start my-nginx
# ลบ Container
docker rm my-nginx
# เข้าไปใน Container
docker exec -it my-nginx bash
ดู Log
# ดู log ของ Container
docker logs my-nginx
# ดู log แบบ real-time
docker logs -f my-nginx
# ดู 50 บรรทัดล่าสุด
docker logs --tail 50 my-nginx
การสร้าง Dockerfile
Dockerfile คือไฟล์ที่ใช้สร้าง Docker Image ของเราเอง
ตัวอย่าง Dockerfile สำหรับ Node.js
# ใช้ base image ที่มี Node.js
FROM node:18-alpine
# ตั้ง working directory
WORKDIR /app
# คัดลอก package files
COPY package*.json ./
# ติดตั้ง dependencies
RUN npm install --production
# คัดลอกโค้ดทั้งหมด
COPY . .
# เปิด port 3000
EXPOSE 3000
# คำสั่งเริ่มต้นแอปพลิเคชัน
CMD ["node", "server.js"]
Build Image
# Build image จาก Dockerfile
docker build -t my-node-app .
# Build พร้อม tag เวอร์ชัน
docker build -t my-node-app:1.0 .
# รัน image ที่ build แล้ว
docker run -d -p 3000:3000 my-node-app
Docker Compose
Docker Compose ช่วยให้จัดการหลาย Container พร้อมกันได้ง่ายด้วยไฟล์ docker-compose.yml
ตัวอย่าง docker-compose.yml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- api
api:
build: ./api
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=db
depends_on:
- db
db:
image: postgres:15
environment:
- POSTGRES_DB=myapp
- POSTGRES_USER=user
- POSTGRES_PASSWORD=your_secure_password_here
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
คำสั่ง Docker Compose
# เริ่มต้น services ทั้งหมด
docker compose up -d
# หยุด services ทั้งหมด
docker compose down
# ดู logs ของทุก service
docker compose logs -f
# Scale service
docker compose up -d --scale api=3
# Build และ restart
docker compose up -d --build
Docker Volume
Volume ใช้สำหรับเก็บข้อมูลที่ต้องการให้คงอยู่แม้ Container จะถูกลบ
# สร้าง volume
docker volume create my-data
# รัน Container พร้อม mount volume
docker run -d -v my-data:/app/data my-app
# แสดง volumes ที่มีอยู่
docker volume ls
# ลบ volume
docker volume rm my-data
Docker Network
# สร้าง network
docker network create my-network
# รัน Container ใน network เดียวกัน
docker run -d --network my-network --name app1 my-app
docker run -d --network my-network --name app2 my-app
# แสดง networks
docker network ls
# ดูรายละเอียด network
docker network inspect my-network
เคล็ดลับการใช้งาน Docker
ทำความสะอาดระบบ
# ลบ Container ที่หยุดแล้วทั้งหมด
docker container prune
# ลบ Image ที่ไม่ได้ใช้
docker image prune
# ลบ Volume ที่ไม่ได้ใช้
docker volume prune
# ทำความสะอาดทุกอย่างพร้อมกัน
docker system prune -a
ตรวจสอบทรัพยากร
# ดูการใช้ทรัพยากรของ Container
docker stats
# ดูข้อมูลโดยละเอียดของ Container
docker inspect my-nginx
เครื่องมือที่เกี่ยวข้อง
- System Monitor — มอนิเตอร์ประสิทธิภาพระบบแบบเรียลไทม์
- System Info — ข้อมูลระบบและเบราว์เซอร์โดยละเอียด