ลองใช้ 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

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

เจาะลึกเรื่องราวของ Eileen Gu นักสกีฟรีสไตล์ผู้สร้างประวัติศาสตร์ในโอลิมปิก 2026 สถิติที่ไม่เคยมีมาก่อน ประเด็นถกเถียง และความแข็งแกร่งส่วนตัวที่ทำให้เธอก้าวสู่ระดับโลก

By ทีมงาน devdog
วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

เจาะลึกวันพระและความสำคัญของวันมาฆบูชา 2569 ทั้งวันหยุดราชการ ธนาคาร กิจกรรมเวียนเทียนต้นไม้ และผลกระทบต่อบริการขนส่ง เตรียมตัววางแผนทำบุญและพักผ่อน

By ทีมงาน devdog
ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

เจาะลึกงานวิวาห์ "บังมัดคลองตัน" กับ "ต้นข้าว มิสแกรนด์" พร้อมเหตุผลจากใจเจ้าสาวที่เลือกความรักเหนือกาลเวลาและคำวิจารณ์ สู่การเริ่มต้นชีวิตคู่ที่สะท้อนการให้อภัย

By ทีมงาน devdog
ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

เจาะลึกไฮไลท์บอลไทยลีก 2 ของมหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรง ชัยชนะสำคัญจาก ชิตชนก และบทบาทโค้ชดุสิต สู่เส้นทางเพลย์ออฟที่น่าจับตา!

By ทีมงาน devdog