สำหรับนักศึกษาระดับ ปวส.
Docker คือแพลตฟอร์มที่ใช้สำหรับการพัฒนา จัดส่ง และรันแอปพลิเคชันในรูปแบบของ Container
| คุณสมบัติ | Container | Virtual Machine |
|---|---|---|
| ขนาด | เล็ก (MB) | ใหญ่ (GB) |
| ความเร็วในการเริ่มต้น | วินาที | นาที |
| การใช้ทรัพยากร | น้อย | มาก |
| OS | ใช้ร่วมกับ Host | แยก OS เป็นของตัวเอง |
คำตอบ: ใช่! Docker ใช้ทรัพยากรน้อยกว่า Virtual Machine เพราะ Container ใช้ OS ร่วมกับเครื่อง Host ไม่ต้องติดตั้ง OS แยกเหมือน VM ทำให้ประหยัดทั้ง CPU, RAM และพื้นที่จัดเก็บข้อมูล นอกจากนี้ Container ยังเริ่มทำงานได้เร็วกว่า (ใช้เวลาเพียงไม่กี่วินาที แทนที่จะเป็นหลายนาทีเหมือน VM)
docker --version
# อัพเดทแพ็คเกจ
sudo apt update
# ติดตั้ง Docker
sudo apt install docker.io -y
# เริ่มต้น Docker service
sudo systemctl start docker
sudo systemctl enable docker
# ตรวจสอบเวอร์ชัน
docker --version
คำตอบ: docker --version หรือ docker version จะแสดงเวอร์ชันของ Docker ที่ติดตั้ง นอกจากนี้ยังสามารถใช้ docker run hello-world เพื่อทดสอบว่า Docker ทำงานได้ปกติหรือไม่
docker --version
docker version
docker run hello-world
# ดูเฉพาะที่ทำงานอยู่
docker ps
# ดูทั้งหมด (รวมที่หยุดแล้ว)
docker ps -a
docker images
docker pull ubuntu
docker pull nginx
docker pull node:18
# รันแบบพื้นฐาน
docker run ubuntu
# รันแบบโต้ตอบ (Interactive)
docker run -it ubuntu bash
# รันแบบ Detached (Background)
docker run -d nginx
# รันและตั้งชื่อ Container
docker run --name my-nginx -d nginx
# รันและ map port
docker run -d -p 8080:80 nginx
# หยุด Container
docker stop <container-id>
# เริ่ม Container ที่หยุดไว้
docker start <container-id>
# รีสตาร์ท Container
docker restart <container-id>
# ลบ Container
docker rm <container-id>
# บังคับลบ Container ที่ทำงานอยู่
docker rm -f <container-id>
คำตอบ: docker run -d -p 8080:80 nginx
คำอธิบาย:
-d = Detached mode (รันแบบ background)-p 8080:80 = Port mapping (port 8080 บนเครื่อง host เชื่อมกับ port 80 ใน container)nginx = ชื่อ image ที่จะรัน# ดาวน์โหลด nginx image
docker pull nginx
# รัน nginx container และเปิด port 8080
docker run -d -p 8080:80 --name my-web nginx
# เปิดเบราว์เซอร์แล้วไปที่ http://localhost:8080
# รัน MySQL container
docker run -d \
--name my-mysql \
-e MYSQL_ROOT_PASSWORD=mypassword \
-p 3306:3306 \
mysql:8
# เข้าใช้งาน MySQL
docker exec -it my-mysql mysql -uroot -pmypassword
คำตอบ:
Dockerfile คือไฟล์คำสั่งที่ใช้สร้าง Docker Image ของเราเอง
# เริ่มจาก base image
FROM ubuntu:22.04
# ข้อมูลผู้สร้าง
LABEL maintainer="your-email@example.com"
# ติดตั้งแพ็คเกจ
RUN apt-get update && apt-get install -y \
curl \
vim
# กำหนด working directory
WORKDIR /app
# คัดลอกไฟล์เข้า container
COPY . /app
# เปิด port
EXPOSE 80
# คำสั่งที่รันเมื่อ container เริ่มทำงาน
CMD ["echo", "Hello Docker!"]
| คำสั่ง | คำอธิบาย |
|---|---|
FROM |
กำหนด base image |
RUN |
รันคำสั่งระหว่างการ build image |
COPY |
คัดลอกไฟล์จาก host เข้า container |
WORKDIR |
กำหนด working directory |
EXPOSE |
ระบุ port ที่ container จะใช้ |
CMD |
คำสั่งที่รันเมื่อ container เริ่มทำงาน |
FROM node:18-alpine
WORKDIR /app
# คัดลอก package.json และ install dependencies
COPY package*.json ./
RUN npm install
# คัดลอกโค้ดทั้งหมด
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Build และ Run:
# Build image
docker build -t my-node-app .
# Run container
docker run -d -p 3000:3000 my-node-app
คำตอบ:
Docker Compose เป็นเครื่องมือสำหรับการกำหนดและรันหลาย Docker Container พร้อมกัน
version: '3.8'
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydb
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
# รันทุก services
docker-compose up
# รันแบบ background
docker-compose up -d
# หยุดทุก services
docker-compose down
# ดูสถานะ
docker-compose ps
# ดู logs
docker-compose logs
version: '3.8'
services:
# Frontend (React)
frontend:
build: ./frontend
ports:
- "3000:3000"
depends_on:
- backend
# Backend (Node.js)
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- db
environment:
DB_HOST: db
DB_USER: root
DB_PASSWORD: secret
# Database (PostgreSQL)
db:
image: postgres:15
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: secret
POSTGRES_DB: appdb
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
คำตอบ: Docker Compose ช่วย:
docker run hello-world และดูผลลัพธ์สร้าง Todo List Application โดยใช้:
ใช้ Docker Compose จัดการทั้ง 3 services และให้สามารถสื่อสารกันได้
คำตอบ:
docker logs <container-id> - ดู logs ทั้งหมดdocker logs -f <container-id> - ดู logs แบบ real-time (follow)docker logs --tail 100 <container-id> - ดู logs 100 บรรทัดล่าสุดdocker-compose logs - ดู logs ทุก services (ถ้าใช้ docker-compose)# ใช้ alpine version
FROM node:18-alpine # แทน FROM node:18
# ลบ cache หลัง install
RUN apt-get update && apt-get install -y \
package1 \
package2 \
&& rm -rf /var/lib/apt/lists/*
# ใช้ multi-stage build
สร้างไฟล์ .dockerignore:
node_modules
npm-debug.log
.git
.env
*.md
# ใช้ชื่อที่มีความหมาย
docker build -t myapp:v1.0 .
docker run --name myapp-prod -d myapp:v1.0
version: '3.8'
services:
app:
image: myapp
environment:
- NODE_ENV=production
- PORT=3000
env_file:
- .env
# Named volume
docker run -v mydata:/app/data myapp
# Bind mount
docker run -v $(pwd):/app myapp
คำตอบ: Alpine Linux มีขนาดเล็กมาก (ประมาณ 5MB) เมื่อเทียบกับ base image ปกติที่มีขนาดหลัก 100MB ขึ้นไป ข้อดี:
ข้อควรระวัง: บาง library อาจไม่รองรับ Alpine ต้องติดตั้งเพิ่มเติม
docker ps # ดู containers ที่รันอยู่
docker ps -a # ดูทุก containers
docker start <container> # เริ่ม container
docker stop <container> # หยุด container
docker restart <container> # รีสตาร์ท container
docker rm <container> # ลบ container
docker rm -f <container> # บังคับลบ container
docker images # ดูทุก images
docker pull <image> # ดาวน์โหลด image
docker rmi <image> # ลบ image
docker build -t <name> . # build image
docker tag <image> <new-name> # tag image
docker logs <container> # ดู logs
docker logs -f <container> # ดู logs แบบ real-time
docker inspect <container> # ดูข้อมูลเต็ม
docker stats # ดูการใช้ทรัพยากร
docker exec -it <container> bash # เข้าไปใน container
docker system prune # ลบสิ่งที่ไม่ใช้
docker container prune # ลบ containers ที่หยุดแล้ว
docker image prune # ลบ images ที่ไม่มี tag
docker volume prune # ลบ volumes ที่ไม่ใช้
docker-compose up # รัน services
docker-compose up -d # รันแบบ background
docker-compose down # หยุดและลบ services
docker-compose ps # ดูสถานะ services
docker-compose logs # ดู logs
docker-compose build # build images
คำตอบ: docker system prune -a --volumes
คำอธิบาย:
docker system prune - ลบ containers ที่หยุดแล้ว, networks ที่ไม่ใช้, images ที่ dangling-a - ลบ images ทั้งหมดที่ไม่มี container ใช้งาน--volumes - ลบ volumes ที่ไม่ได้ใช้งานด้วย⚠️ คำเตือน: คำสั่งนี้จะลบข้อมูลถาวร ใช้ด้วยความระมัดระวัง!
Docker เป็นเครื่องมือที่สำคัญในยุคปัจจุบันสำหรับการพัฒนาและ deploy แอปพลิเคชัน การเรียนรู้ Docker จะช่วยให้:
เอกสารนี้จัดทำขึ้นเพื่อการศึกษาสำหรับนักศึกษาระดับ ปวส.
© 2026 Docker Learning Guide | Powered by Glassmorphism Design