Docker เบื้องต้นสำหรับ SysAdmin คู่มือฉบับสมบูรณ์ 2026
SiamCafe.net Since 1997 | 19/02/2026
สารบัญ
Docker คืออะไร
Docker เป็นแพลตฟอร์ม containerization ที่ช่วยให้ pack แอปพลิเคชันพร้อม dependencies ทั้งหมดลงใน container ที่สามารถรันได้ทุกที่ ไม่ว่าจะเป็น laptop, server, หรือ cloud
ก่อนมี Docker ปัญหาที่พบบ่อยคือ "It works on my machine" — แอปทำงานได้บนเครื่อง dev แต่พัง deploy Docker แก้ปัญหานี้โดยทำให้ environment เหมือนกันทุกที่
คำศัพท์สำคัญ:
- Image: template สำหรับสร้าง container (เหมือน ISO ของ OS)
- Container: instance ที่รันจาก image (เหมือน VM ที่เปิดจาก ISO)
- Dockerfile: ไฟล์ที่บอกวิธีสร้าง image
- Docker Hub: registry สำหรับเก็บและแชร์ image
- Docker Compose: เครื่องมือจัดการ multi-container application
Docker vs Virtual Machine
| เกณฑ์ | Docker Container | Virtual Machine |
|---|---|---|
| Boot Time | วินาที | นาที |
| Size | MB | GB |
| RAM Usage | ต่ำ | สูง |
| Isolation | Process level | Hardware level |
| OS | แชร์ kernel กับ host | มี OS เต็ม |
| Performance | ใกล้เคียง native | ช้ากว่า 5-20% |
ติดตั้ง Docker บน Ubuntu
# ลบ Docker เก่า (ถ้ามี) sudo apt remove docker docker-engine docker.io containerd runc # ติดตั้ง dependencies sudo apt update sudo apt install ca-certificates curl gnupg # เพิ่ม Docker GPG key sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # เพิ่ม Docker repository echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list # ติดตั้ง Docker sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin # เพิ่ม user เข้ากลุ่ม docker sudo usermod -aG docker $USER # ทดสอบ docker run hello-world
คำสั่ง Docker พื้นฐาน
# ดู images docker images # ดู containers ที่รันอยู่ docker ps docker ps -a # รวมที่หยุดแล้ว # รัน container docker run -d --name myapp -p 8080:80 nginx # หยุด/เริ่ม container docker stop myapp docker start myapp # ดู logs docker logs myapp docker logs -f myapp # follow # เข้าไปใน container docker exec -it myapp bash # ลบ container docker rm myapp # ลบ image docker rmi nginx
Dockerfile เขียนยังไง
# Dockerfile สำหรับ Python app FROM python:3.12-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 CMD ["python", "app.py"]
# Build image docker build -t myapp:1.0 . # รัน docker run -d -p 8000:8000 myapp:1.0
Docker Compose
Docker Compose ช่วยจัดการ multi-container application:
# docker-compose.yml
version: "3.8"
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
- redis
environment:
- DATABASE_URL=mysql://root:pass@db/myapp
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:7-alpine
volumes:
db_data:
# รัน docker compose up -d # หยุด docker compose down # ดู logs docker compose logs -f
Docker Networking
Network Types:
- bridge: default network สำหรับ containers บน host เดียวกัน
- host: container ใช้ network ของ host โดยตรง
- none: ไม่มี network
- overlay: สำหรับ Docker Swarm (multi-host)
# สร้าง network docker network create mynet # รัน container ใน network docker run -d --network mynet --name web nginx docker run -d --network mynet --name db mysql:8.0 # containers ใน network เดียวกันสื่อสารกันได้ด้วยชื่อ # web สามารถเชื่อมต่อ db ด้วย hostname "db"
Docker Volume
Volume ใช้เก็บข้อมูลถาวร (persistent data):
# สร้าง volume docker volume create mydata # ใช้ volume docker run -d -v mydata:/var/lib/mysql mysql:8.0 # Bind mount (map directory จาก host) docker run -d -v /host/path:/container/path nginx # ดู volumes docker volume ls docker volume inspect mydata
อ่านเพิ่มเติม: Ubuntu Server 2026 | Python Automation | AI อนาคตการเทรด | Passive Income จาก AI
Best Practices
1. ใช้ official images: เลือก image จาก Docker Hub ที่มี "Official Image" badge
2. ใช้ specific tag: อย่าใช้ :latest ใช้ version เฉพาะ เช่น python:3.12-slim
3. Multi-stage build: ลดขนาด image โดยแยก build stage กับ runtime stage
4. .dockerignore: ไม่ copy ไฟล์ที่ไม่จำเป็นเข้า image
5. Non-root user: อย่ารัน container ด้วย root ใช้ USER directive ใน Dockerfile
6. Health check: เพิ่ม HEALTHCHECK ใน Dockerfile เพื่อตรวจสอบว่า container ยังทำงานปกติ
สรุป
Docker เป็นเครื่องมือที่ SysAdmin ทุกคนต้องรู้ในปี 2026 ช่วยให้ deploy แอปได้เร็ว เสถียร และ reproducible เริ่มจากคำสั่งพื้นฐาน แล้วค่อยเรียนรู้ Dockerfile, Docker Compose, Networking, และ Volume
คำถามที่พบบ่อย (FAQ)
Q: Docker ฟรีไหม?
A: Docker Engine (CE) ฟรี 100% Docker Desktop ฟรีสำหรับบุคคลและบริษัทเล็ก (< 250 คน, รายได้ < $10M) บริษัทใหญ่ต้องซื้อ license
Q: Docker กับ Kubernetes ต่างกันยังไง?
A: Docker ใช้สร้างและรัน container Kubernetes ใช้จัดการ container จำนวนมาก (orchestration) ถ้ามี container ไม่กี่ตัว Docker Compose เพียงพอ ถ้ามีหลายสิบตัวขึ้นไป ใช้ Kubernetes
Q: Docker ปลอดภัยไหม?
A: ปลอดภัยถ้าตั้งค่าถูกต้อง อย่ารัน container ด้วย root ใช้ official images อัพเดท images สม่ำเสมอ scan images ด้วย Trivy หรือ Snyk
Q: Docker ใช้ RAM เยอะไหม?
A: Docker Engine ใช้ RAM น้อยมาก (50-100MB) แต่ container แต่ละตัวจะใช้ RAM ตามแอปที่รัน เช่น MySQL container ใช้ 200-500MB, Nginx ใช้ 10-50MB
Q: ต้องเรียน Docker นานแค่ไหน?
A: พื้นฐาน (run, build, compose) เรียนได้ใน 1-2 สัปดาห์ ระดับกลาง (networking, volume, multi-stage build) 1-2 เดือน ระดับสูง (Kubernetes, CI/CD) 3-6 เดือน