Bài 05: Docker Swarm

  • Đăng bởi JP
  • 05/01/2025

Khi ứng dụng của bạn cần mở rộng và chạy trên nhiều máy chủ, Docker Swarm là một lựa chọn tuyệt vời. Docker Swarm cung cấp giải pháp đơn giản và hiệu quả để triển khai, quản lý, và mở rộng các container trong môi trường phân tán.

Docker Swarm

Docker Swarm


Docker Swarm Là Gì?

Docker Swarm là một công cụ tích hợp trong Docker, giúp bạn triển khai và quản lý các container trên nhiều máy chủ (nodes). Docker Swarm biến một nhóm các máy chủ Docker thành một “cluster”, nơi các container được quản lý tập trung.

Tính Năng Chính của Docker Swarm

  • Orchestration: Tự động phân phối container đến các máy chủ trong cluster.
  • High Availability: Hỗ trợ chạy ứng dụng không bị gián đoạn khi có máy chủ gặp sự cố.
  • Scaling: Dễ dàng mở rộng số lượng container chỉ với một lệnh.
  • Load Balancing: Phân phối lưu lượng truy cập giữa các container.
Docker Swarm features

Docker Swarm features


Kiến Trúc Docker Swarm

Docker Swarm bao gồm hai loại node chính:

  1. Manager Node:
    • Quản lý toàn bộ cluster.
    • Xử lý các lệnh từ người dùng, như triển khai ứng dụng, mở rộng container, và cập nhật dịch vụ.
  2. Worker Node:
    • Thực thi container và nhận nhiệm vụ từ Manager.

Triển Khai Docker Swarm

Dưới đây là hướng dẫn từng bước để thiết lập Docker Swarm và triển khai một ứng dụng.

1. Tạo Docker Swarm Cluster

Khởi Tạo Swarm

Trên máy chủ đầu tiên (Manager Node), chạy lệnh:

docker swarm init

Kết quả trả về sẽ bao gồm một token để thêm các node khác vào cluster, ví dụ:

docker swarm join --token SWMTKN-1-abc123 192.168.1.100:2377

Thêm Worker Node

Trên các máy chủ khác (Worker Node), chạy lệnh trên để tham gia cluster.

Kiểm tra danh sách node trong cluster:

docker node ls

2. Tạo Một Dịch Vụ (Service)

Docker Swarm sử dụng services để quản lý container. Ví dụ, để triển khai một ứng dụng web (Nginx), chạy lệnh:

docker service create --name web_service --replicas 3 -p 8080:80 nginx

Giải thích:

  • --name web_service: Tên dịch vụ.
  • --replicas 3: Triển khai 3 container.
  • -p 8080:80: Chuyển tiếp cổng 8080 của máy chủ đến cổng 80 của container.

Kiểm tra dịch vụ:

docker service ls

Kiểm tra các container được triển khai:

docker service ps web_service

3. Mở Rộng Dịch Vụ (Scaling)

Bạn có thể mở rộng hoặc thu hẹp số lượng container một cách linh hoạt:

docker service scale web_service=5

4. Cập Nhật Dịch Vụ

Docker Swarm hỗ trợ cập nhật dịch vụ mà không làm gián đoạn ứng dụng. Ví dụ, cập nhật phiên bản Nginx:

docker service update --image nginx:latest web_service

5. Xóa Dịch Vụ

Khi không cần dịch vụ nữa, bạn có thể xóa nó:

docker service rm web_service

Ví Dụ Thực Tế: Deploy Ứng Dụng Node.js

Giả sử bạn muốn triển khai ứng dụng Node.js đã tạo ở bài trước trên Docker Swarm:

File docker-compose.yml

version: '3.8'

services:
  backend:
    image: my_todo_app:latest
    ports:
      - "3000:3000"
    networks:
      - app_network
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure

  mongo:
    image: mongo:5.0
    networks:
      - app_network
    volumes:
      - mongo_data:/data/db

networks:
  app_network:
    driver: overlay

volumes:
  mongo_data:

Tạo và Deploy Stack

  1. Build image:

    docker build -t my_todo_app ./backend
    
  2. Deploy ứng dụng:

    docker stack deploy -c docker-compose.yml todo_stack
    
  3. Kiểm tra stack:

    docker stack ls
    
  4. Kiểm tra trạng thái dịch vụ:

    docker service ls
    

Tổng Kết

Docker Swarm là một công cụ mạnh mẽ để quản lý container trên nhiều máy chủ. Bạn có thể dễ dàng triển khai, mở rộng, và quản lý các ứng dụng một cách hiệu quả. Tuy nhiên, nếu bạn cần một hệ thống orchestration phức tạp hơn, bạn có thể xem xét Kubernetes.


Toàn bộ series


Trân trọng,
JP

Thảo luận trên tinh thần học hỏi