ลองใช้ Docker Swarm: จัดการหลายคอนเทนเนอร์แบบไม่ต้องปวดหัวเท่า K8s

สวัสดีครับทุกๆ คน!

วันนี้ผมอยากจะมาเล่าเรื่อง Docker Swarm ให้ฟังนะ คือหลายคนอาจจะคุ้นเคยกับ Docker Compose ใช่ปะ ที่เอาไว้รันหลายๆ คอนเทนเนอร์ในเครื่องเดียว

แต่ถ้าวันนึงแอปเรามันใหญ่ขึ้น อยากจะรันหลายๆ ตัวบนเซิร์ฟเวอร์หลายเครื่อง หรืออยากได้ HA (High Availability) หน่อยๆ ไม่ให้ล่มง่ายๆ ถ้าเครื่องไหนพัง ทีนี้ Compose มันก็ไม่ตอบโจทย์ละไง

คนส่วนใหญ่คงพุ่งไป Kubernetes กันเลยใช่มะ ซึ่งมันก็ดีนะ แต่บอกตรงๆ ว่ากว่าจะเซ็ตอัพ กว่าจะเข้าใจแต่ละคอนเซปต์ของมันเนี่ย หัวจะปวดเอาได้เลยนะ ผมเองก็เคยเจอช่วงแบบเห้ยนี่มันเยอะไปรึป่าวฟะ

Docker Swarm นี่แหละ คือทางออกที่อยู่ตรงกลาง แบบว่า มันเป็น Orchestration Tool ของ Docker เองเลยนะ ใช้ง่ายกว่า K8s เยอะมาก เหมาะกับโปรเจกต์ที่ไม่ต้องสเกลเบอร์ล้าน หรือทีมที่ไม่ได้มี Ops โดยเฉพาะอ่ะครับ

มาเริ่มกันเลย! (สมมติว่ามี Docker ลงอยู่แล้วนะ)

อันดับแรกเลย เราต้อง "สร้าง Swarm" ขึ้นมาก่อนครับ ปกติก็ทำบนเครื่อง Manager Node ของเรานั่นแหละ

docker swarm init --advertise-addr <YOUR_MANAGER_IP>

ตรง <YOUR_MANAGER_IP> เนี่ย ก็ใส่ IP ของเครื่องที่คุณอยากให้เป็น Manager Node ไปเลยนะ (เช่น IP ของเครื่องคุณเองถ้าลองบนเครื่องเดียว)

พอรันเสร็จ มันจะโชว์ command มาให้เราเอาไปรันบน Worker Node (เครื่องอื่นๆ ที่อยากให้มาจอยใน Swarm) แบบนี้

docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxx <YOUR_MANAGER_IP>:2377

ก็อปเอาไปรันบนเครื่องอื่นๆ ที่เหลือเลยนะ ง่ายดีป่ะล่ะ?

Deploy Service แรกของเรา

ทีนี้พอมี Swarm ละ เราจะ Deploy Service (แอปของเรา) เข้าไปใน Swarm ได้ไง? เราใช้ docker stack deploy ครับ ซึ่งมันจะใช้ไฟล์ docker-compose.yml (หรือจะตั้งชื่ออื่นก็ได้ เช่น stack.yml) มาเป็นตัวกำหนดคอนฟิกเหมือนเดิม

มาลองสร้างไฟล์ stack.yml ง่ายๆ ด้วย Nginx กัน

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    deploy:
      replicas: 3 # อยากให้ Nginx รันกี่ตัวใน Swarm เราบอกตรงนี้เลย
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure

networks:
  default:
    driver: overlay

จะเห็นว่ามี deploy section เพิ่มมา ซึ่งตรงนี้แหละที่เราบอก Swarm ว่าอยากให้มันจัดการยังไง เช่น replicas: 3 คือบอกว่าอยากให้มี Nginx รันอยู่ 3 ตัวตลอดเวลา ถ้าตัวไหนตายไป Swarm จะสร้างใหม่ขึ้นมาให้ทันทีเลย โคตรคูล!

เสร็จแล้ว ก็รัน command นี้เลย

docker stack deploy -c stack.yml my_web_app

my_web_app คือชื่อ stack ของเรานะ ตั้งอะไรก็ได้

ทีนี้ลองเช็ค status ได้เลย

docker service ls
docker service ps my_web_app_web

คุณจะเห็นว่ามี Nginx รันอยู่ 3 ตัวกระจายๆ กันไปใน Node ที่เรามี โคตรเฟี้ยวป่ะ!

สเกลขึ้น-ลง ง่ายกว่าปอกกล้วย!

สมมติว่าเว็บเราเริ่มมีคนเข้าเยอะ อยากจะเพิ่ม Nginx เป็น 5 ตัว ทำไง? ง่ายโคตรๆ!

docker service scale my_web_app_web=5

แค่นี้เลย! Swarm จัดการให้หมด จะเพิ่มหรือลด ก็แค่เปลี่ยนเลขตรงนี้

Error ที่เคยเจอ (และอาจจะเจอเองได้)

เคยเจอตอนแรกๆ เลยคือเรื่อง Networking นี่แหละครับ บางทีเน็ตเวิร์ค Overlay มันไม่ยอมทำงาน หรือ Node มันมองไม่เห็นกันเอง อันนี้ต้องเช็ค Firewall ดีๆ นะว่าเปิดพอร์ตที่ Docker Swarm ต้องการหรือยัง (เช่น 2377, 7946 TCP/UDP, 4789 UDP)

อีกเรื่องคือ Port Conflict ถ้าเกิดว่าเรา deploy service ที่ใช้พอร์ต 80 เหมือนกัน แต่เราใช้ Host Port แบบ 80:80 บน Node เดียวกันเนี่ย มันจะชนกันได้นะครับ ต้องระวังตรงนี้ให้ดี

บางทีก็เจอ Permission Denied ตอน Mount Volume เนี่ยแหละ อันนี้ต้องไปเช็ค permission ของโฟลเดอร์บน Host ที่เราจะ mount เข้าไปในคอนเทนเนอร์ให้ดีๆ นะครับ

ความเห็นส่วนตัวจากคนเคยใช้

ผมว่า Docker Swarm นี่มันเหมาะกับ:

  • โปรเจกต์เล็กถึงกลาง: ที่อยากได้ความสามารถ Orchestration แต่ไม่อยากเสียเวลาเรียนรู้เยอะๆ
  • ทีมเล็กๆ หรือ Dev ที่ต้องทำเองหมด: เพราะมันเซ็ตอัพง่าย ดูแลง่ายกว่า K8s เยอะมาก
  • ต้องการ High Availability แบบไม่ซับซ้อน: ให้แอปเราไม่ล่มง่ายๆ ถ้าเครื่องใดเครื่องหนึ่งพัง

แต่ถ้าโปรเจกต์คุณใหญ่มาก ต้องการฟีเจอร์แอดวานซ์แบบเต็มพิกัดอย่าง Auto Scaling ตามโหลด, Canary Deployments ที่ซับซ้อน, หรือมีทีม Ops ที่เชี่ยวชาญ K8s อยู่แล้วเนี่ย ก็คงต้องไป K8s นั่นแหละครับ

แต่สำหรับผมนะ สำหรับโปรเจกต์ส่วนตัว หรือระบบเล็กๆ ที่ต้องการความรวดเร็วและไม่อยากปวดหัวมาก Swarm นี่แหละตอบโจทย์สุดๆ ลองเล่นกันดูนะ สนุกดี!

Read more

ภาพปก Grand Theft Auto VI: เมื่อองค์ประกอบบางอย่างดู "ผิดเพี้ยน" จนแฟนเกมต้องตั้งคำถาม!

ภาพปก Grand Theft Auto VI: เมื่อองค์ประกอบบางอย่างดู "ผิดเพี้ยน" จนแฟนเกมต้องตั้งคำถาม!

Rockstar Games เปิดพรีออเดอร์ GTA VI พร้อมปล่อยภาพปกทางการ เจาะลึกองค์ประกอบที่ไม่คาดคิด ทั้งตัวละครและสัญลักษณ์สุดแปลกบนปกเกมใหม่

By ทีมงาน devdog
ไม่เลื่อนแน่! "Grand Theft Auto VI" เตรียมเปิดพรีออเดอร์ 25 มิ.ย.นี้ พร้อมภาพปกสุดอลังการ!

ไม่เลื่อนแน่! "Grand Theft Auto VI" เตรียมเปิดพรีออเดอร์ 25 มิ.ย.นี้ พร้อมภาพปกสุดอลังการ!

Grand Theft Auto VI เกมที่ทุกคนรอคอยเปิดให้สั่งจองล่วงหน้า 25 มิ.ย.นี้! หลัง Rockstar Games ปล่อยภาพปกทางการและยืนยันการพัฒนาตามกำหนด

By ทีมงาน devdog
ตุรกีบอล: ไก่งวงกู้ชีพ! ลุ้นเข้ารอบฟุตบอลโลก 2026 กับความหวัง อาร์ดา กือแลร์

ตุรกีบอล: ไก่งวงกู้ชีพ! ลุ้นเข้ารอบฟุตบอลโลก 2026 กับความหวัง อาร์ดา กือแลร์

เจาะลึกความหวังทีมชาติตุรกีในศึกฟุตบอลโลก 2026 นำโดยอาร์ดา กือแลร์ พร้อมวิเคราะห์เกมสำคัญกับปารากวัย และช่องทางดูบอลสด

By ทีมงาน devdog
สกอตแลนด์ vs โมร็อกโก: ศึกฟุตบอลโลก 2026 ที่เต็มไปด้วยประวัติศาสตร์และกลยุทธ์

สกอตแลนด์ vs โมร็อกโก: ศึกฟุตบอลโลก 2026 ที่เต็มไปด้วยประวัติศาสตร์และกลยุทธ์

สรุปผลและวิเคราะห์ศึกฟุตบอลโลก 2026 กลุ่ม C ระหว่างสกอตแลนด์และโมร็อกโก พร้อมสถิติประวัติศาสตร์ที่ Atlas Lions กำลังสร้าง

By ทีมงาน devdog