Docker Swarm คืออะไร — คู่มือ Container Orchestration ฉบับสมบูรณ์ 2026

SiamCafe.net Since 1997 | 2026-02-23

สารบัญ

Docker Swarm คืออะไร

Docker Swarm เป็น Container Orchestration Tool ที่มาพร้อมกับ Docker Engine ตั้งแต่เวอร์ชัน 1.12 ขึ้นไป ทำหน้าที่จัดการ container หลายตัวที่กระจายอยู่บนหลาย server ให้ทำงานร่วมกันเป็น cluster เดียว

พูดง่ายๆ คือถ้าคุณมี server 5 เครื่อง แต่ละเครื่องรัน Docker อยู่ — Docker Swarm จะรวม 5 เครื่องนี้เป็น "กลุ่ม" เดียว แล้วคุณสั่งงานจากจุดเดียวได้เลย ไม่ต้อง SSH เข้าไปสั่งทีละเครื่อง

คุณสมบัติหลักของ Docker Swarm:

สถาปัตยกรรม Manager-Worker

Swarm Cluster ประกอบด้วย 2 ประเภทของ node:

ประเภทหน้าที่จำนวนแนะนำ
Manager Nodeควบคุม cluster, รับคำสั่ง, จัดการ scheduling, เก็บ state ของทั้ง cluster3 หรือ 5 (เลขคี่เสมอ)
Worker Nodeรัน container จริง, รับงานจาก Manager มาประมวลผลตามโหลดงาน

Manager node ใช้ Raft Consensus Algorithm ในการตัดสินใจร่วมกัน ถ้า Manager 1 ตัวล่ม ตัวอื่นเลือก leader ใหม่อัตโนมัติ — นี่คือเหตุผลที่ต้องใช้จำนวนคี่ (3, 5, 7) เพื่อให้ quorum ทำงานได้

ตัวอย่าง Production Setup ทั่วไป:

เปรียบเทียบ Docker Swarm vs Kubernetes

คำถามที่คนถามบ่อยที่สุดคือ "ใช้ Swarm หรือ Kubernetes ดี?" — คำตอบขึ้นอยู่กับ context:

หัวข้อDocker SwarmKubernetes
ความซับซ้อนง่าย เรียนรู้ 1-2 วันซับซ้อน เรียนรู้ 1-3 เดือน
Setupdocker swarm init จบต้อง kubeadm, etcd, CNI plugin
Scalingดี แต่ไม่มี auto-scalingมี HPA, VPA auto-scaling
Ecosystemเล็กใหญ่มาก (Helm, Istio, ArgoCD)
เหมาะกับทีมเล็ก, container ไม่เกิน 50ทีมใหญ่, container 100+
Learning Curveต่ำ — รู้ Docker ก็ใช้ได้สูง — ต้องเรียนหลาย concept ใหม่

สรุปง่ายๆ: ถ้าทีมคุณมี 3-5 คน, รัน app ไม่เกิน 20-30 service — Swarm เหมาะที่สุด เพราะ setup ง่ายและดูแลง่าย ถ้าต้องการ enterprise-grade, auto-scaling, multi-cloud — ใช้ Kubernetes

ติดตั้งและ Init Swarm Cluster

สิ่งที่ต้องเตรียม:

Step 1: Init Swarm บน Manager เครื่องแรก

# บน Manager-1 (IP: 192.168.1.10)
docker swarm init --advertise-addr 192.168.1.10

# Output จะให้ token สำหรับ join
# Swarm initialized: current node (abc123) is now a manager.
# docker swarm join --token SWMTKN-1-xxxxx 192.168.1.10:2377

Step 2: Join Worker Nodes

# บน Worker-1, Worker-2
docker swarm join --token SWMTKN-1-xxxxx 192.168.1.10:2377

# ตรวจสอบ node ทั้งหมด (รันบน Manager)
docker node ls
# ID          HOSTNAME    STATUS   AVAILABILITY   MANAGER STATUS
# abc123 *   manager-1   Ready    Active         Leader
# def456     worker-1    Ready    Active
# ghi789     worker-2    Ready    Active

Step 3: เพิ่ม Manager เพิ่มเติม (สำหรับ HA)

# ดู token สำหรับ manager
docker swarm join-token manager

# บน Manager-2, Manager-3
docker swarm join --token SWMTKN-1-manager-token 192.168.1.10:2377

Deploy Service จริง Step-by-Step

ตัวอย่าง deploy Nginx web server 3 replicas:

# สร้าง service
docker service create \
  --name web \
  --replicas 3 \
  --publish published=80,target=80 \
  nginx:alpine

# ตรวจสอบ
docker service ls
# ID       NAME   MODE         REPLICAS   IMAGE
# abc123   web    replicated   3/3        nginx:alpine

# ดูว่า container กระจายไปเครื่องไหน
docker service ps web

ตัวอย่าง Deploy แบบ Stack (docker-compose สำหรับ Swarm):

# docker-stack.yml
version: '3.8'
services:
  web:
    image: nginx:alpine
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
    ports:
      - "80:80"
    networks:
      - webnet

  redis:
    image: redis:alpine
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    networks:
      - webnet

networks:
  webnet:
    driver: overlay

# Deploy
docker stack deploy -c docker-stack.yml myapp
docker stack services myapp

Scaling, Rolling Update, Rollback

Scaling (เพิ่ม-ลด container)

# Scale จาก 3 เป็น 10 replicas
docker service scale web=10

# ลดกลับเป็น 5
docker service scale web=5

Rolling Update (อัพเดทแบบไม่ downtime)

# อัพเดท image จาก nginx:1.24 เป็น nginx:1.25
docker service update --image nginx:1.25 web

# กำหนด update strategy
docker service update \
  --update-parallelism 2 \
  --update-delay 10s \
  --update-failure-action rollback \
  web

Rollback (ย้อนกลับ)

# ถ้า update มีปัญหา — rollback ทันที
docker service rollback web

Swarm จะเก็บ previous version ไว้ ถ้า update ใหม่ container fail เกินจำนวนที่กำหนด จะ rollback อัตโนมัติ

Networking ใน Swarm

Docker Swarm สร้าง network พิเศษ 2 ประเภท:

Routing Mesh ทำงานอย่างไร: เมื่อ request มาที่ port 80 ของ node ใดก็ได้ ใน cluster — Swarm จะ route ไปยัง container ที่รัน service นั้นอัตโนมัติ แม้ว่า node นั้นจะไม่ได้รัน container ก็ตาม

# สร้าง custom overlay network
docker network create --driver overlay --attachable my-network

# ใช้กับ service
docker service create --name api --network my-network myapi:latest
docker service create --name db --network my-network postgres:15

Security: TLS, Secrets, Config

Docker Swarm มีระบบ security ในตัวที่ดีมาก:

Mutual TLS (mTLS) — node ทุกตัวสื่อสารกันผ่าน TLS อัตโนมัติ certificate rotate ทุก 90 วัน (ปรับได้)

# ปรับ certificate rotation
docker swarm update --cert-expiry 720h

Docker Secrets — เก็บ password, API key, certificate อย่างปลอดภัย ไม่ต้อง hardcode ใน image

# สร้าง secret
echo "MySecretPassword123" | docker secret create db_password -

# ใช้ใน service
docker service create \
  --name db \
  --secret db_password \
  postgres:15

# Secret จะอยู่ที่ /run/secrets/db_password ใน container

Docker Config — คล้าย secret แต่สำหรับ config file ที่ไม่ sensitive

# สร้าง config จากไฟล์
docker config create nginx_conf ./nginx.conf

# ใช้ใน service
docker service create \
  --name web \
  --config source=nginx_conf,target=/etc/nginx/nginx.conf \
  nginx:alpine

Production Best Practices

  1. Manager Node จำนวนคี่เสมอ — ใช้ 3 สำหรับ cluster เล็ก, 5 สำหรับ cluster ใหญ่ ห้ามใช้มากกว่า 7
  2. แยก Manager ไม่ให้รัน workload — ใช้ docker node update --availability drain manager-1
  3. ใช้ Placement Constraints — กำหนดว่า service ไหนรันบน node ไหน เช่น database รันเฉพาะเครื่อง SSD
  4. Health Check ทุก service — กำหนด --health-cmd เพื่อให้ Swarm ตรวจสอบ container อัตโนมัติ
  5. Resource Limits — กำหนด CPU/Memory limit ป้องกัน container กิน resource เกิน
  6. Log Aggregation — ใช้ logging driver ส่ง log ไป centralized system (ELK, Loki)
  7. Backup Swarm State — backup /var/lib/docker/swarm/ เป็นประจำ
  8. Monitoring — ใช้ Prometheus + Grafana ดู metrics ทั้ง cluster

FAQ คำถามที่พบบ่อย

Q: Docker Swarm ยังมีคนใช้อยู่ไหมในปี 2026?

A: ใช้ครับ โดยเฉพาะทีมขนาดเล็กถึงกลางที่ไม่ต้องการความซับซ้อนของ Kubernetes Docker ยังคง support Swarm Mode อยู่ และมีข้อได้เปรียบเรื่องความง่ายในการ setup

Q: Swarm รองรับ container ได้กี่ตัว?

A: ในทางปฏิบัติ cluster ที่มี 50-100 node สามารถรัน 1,000-5,000 container ได้สบาย ถ้าเกินนี้แนะนำ Kubernetes

Q: Manager node ล่ม 1 ตัว มีผลกับ cluster ไหม?

A: ถ้ามี Manager 3 ตัว ล่มได้ 1 ตัวโดย cluster ยังทำงานปกติ เพราะ Raft consensus ต้องการ quorum (majority) คือ 2 จาก 3

Q: ต้องมีพื้นฐานอะไรก่อนเรียน Swarm?

A: ต้องรู้ Docker พื้นฐาน (image, container, volume, network) และ Linux command line ถ้ารู้ docker-compose จะเข้าใจ Swarm stack ได้เร็วขึ้นมาก

Q: Swarm กับ Docker Compose ต่างกันยังไง?

A: Docker Compose ใช้รัน multi-container บน เครื่องเดียว ส่วน Swarm ใช้รัน container กระจายบน หลายเครื่อง แต่ Swarm stack ใช้ไฟล์ docker-compose.yml เดียวกันได้