Danh sách bài viết trong series Sử dụng Docker từ cơ bản đến nâng cao
- Bài 1. Cơ Bản Docker: Hiểu Container và Vai Trò trong DevOps
- Bài 2. Docker Image: cách xây Dựng và tối Ưu
- Bài 3. Docker Networking: Kết Nối Container Hiệu Quả
- Bài 4. Docker Volume: Quản Lý Dữ Liệu Hiệu Quả cho Container
- Bài 5. Docker Compose: Điều Phối Multi-Container Hiệu Quả
- Bài 6. Docker Swarm: Orchestration Cơ Bản để Scale Container
- Bài 7. Docker Security: Bảo Mật Container Hiệu Quả
- Bài 8. Docker CI/CD: Tích Hợp Container vào Pipeline DevOps
- Bài 9. Docker Monitoring: Theo Dõi và Logging Container Hiệu Quả
- Bài 10. Docker resources: Tối Ưu và Debug Container Hiệu Quả
- Bài 11. Docker và Microservices: Thiết Kế Ứng Dụng Phân Tán
- Bài 12. Docker Registry: Tự Host và Quản Lý Image Hiệu Quả
- Bài 13. Docker với Cloud: Tích Hợp Container trên AWS ECS và GCP Cloud Run
Khi hệ thống của bạn lớn lên – từ vài container đơn lẻ sang hàng chục, hàng trăm chạy trên nhiều máy – việc quản lý thủ công trở thành cơn ác mộng. Docker Swarm trong DevOps là cách đơn giản để bước vào thế giới orchestration container. Trong bài thứ sáu của series, tôi sẽ dẫn bạn qua Swarm mode, cách scale container, và thực hành triển khai ứng dụng web trên cluster. Đây là giải pháp nhẹ nhàng, thực tế, không quá phức tạp như Kubernetes, nhưng đủ mạnh cho DevOps.
Docker Swarm Là Gì?
Swarm Mode: Orchestration Đơn Giản
Docker Swarm là chế độ tích hợp sẵn trong Docker để quản lý và điều phối container trên nhiều host (node).
- Manager: Node điều khiển (quản lý cluster).
- Worker: Node chạy container (thực thi task).
- Service: Định nghĩa container cần chạy, số lượng replica.
So với Compose: Compose chạy multi-container trên một host, Swarm mở rộng ra nhiều host.
DevOps: Swarm giúp deploy ứng dụng production mà không cần học ngay Kubernetes.
Tại Sao Dùng Swarm trong DevOps?
- Dễ dùng: Chỉ cần lệnh Docker quen thuộc.
- Scale nhanh: Tăng giảm container trong giây lát.
- Tích hợp CI/CD: Deploy từ pipeline dễ dàng.
Tình huống thực tế: Một team DevOps cần chạy 5 instance API để xử lý tải cao. Swarm giúp họ scale từ 1 lên 5 chỉ bằng một lệnh, không cần thêm tool phức tạp.
Cách Swarm Hoạt Động
Khởi Tạo Swarm
- Trên manager node:
docker swarm init
- Nhận token để worker join.
- Trên worker node:
docker swarm join --token <token> <manager-ip>:2377
Kết quả: Cluster sẵn sàng với 1 manager, 1+ worker.
Service: Đơn Vị Cơ Bản
- Service: Một ứng dụng chạy nhiều replica.
- Ví dụ:
docker service create --name web --replicas 3 -p 8080:80 nginx
- Chạy 3 container Nginx, load balance qua port 8080.
DevOps: Service tự động phân phối task qua worker, đảm bảo HA (high availability).
Scale và Update
- Scale:
docker service scale web=5
- Tăng từ 3 lên 5 replica.
- Update:
docker service update --image nginx:1.21 web
- Rolling update không downtime.
Thực Hành: Triển Khai Web trên Swarm
Chuẩn Bị
- Máy: 2 node (1 manager, 1 worker). Dùng local hoặc VM (VD: VirtualBox).
- Docker đã cài trên cả hai.
Khởi Tạo Cluster
- Manager:
docker swarm init --advertise-addr 192.168.1.10
- Copy token từ output.
- Worker:
docker swarm join --token <token> 192.168.1.10:2377
- Kiểm tra:
docker node ls
- Thấy 2 node (1 manager, 1 worker).
Deploy Ứng Dụng
- Tạo overlay network:
docker network create -d overlay my-net
- Deploy Nginx service:
docker service create --name web --replicas 3 --network my-net -p 8080:80 nginx
- Test:
curl 192.168.1.10:8080
- Thấy trang Nginx (load balance giữa 3 replica).
Scale và Debug
- Scale:
docker service scale web=5 docker service ps web
- Xem 5 container chạy trên node nào.
- Debug:
docker service logs web
- Xem log nếu lỗi.
Ghi chú thực tế: Tôi từng deploy Swarm trên 3 VM, scale từ 2 lên 10 replica mất chưa tới 30 giây – nhanh và không rắc rối.
Ứng Dụng trong DevOps
Pipeline CI/CD
- Deploy từ GitLab CI:
deploy: image: docker script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD - docker service update --image myapp:$CI_COMMIT_SHA web
- Kết quả: Ứng dụng cập nhật trên Swarm từ pipeline.
Microservices
- Chạy web, API, DB trên Swarm với overlay network:
docker service create --name api --replicas 2 --network my-net my-api
Case study: Một team nhỏ dùng Swarm thay Kubernetes cho hệ thống 10 service, giảm thời gian học và quản lý 50%, vẫn đáp ứng tải 1000 user.
So Sánh với Kubernetes
- Swarm: Nhẹ, dễ, tích hợp Docker.
- Kubernetes: Mạnh, phức tạp, nhiều tính năng hơn.
- DevOps: Swarm tốt cho team nhỏ hoặc dự án vừa, K8s cho hệ thống lớn.
Kết Luận
Docker Swarm trong DevOps là cách đơn giản để làm orchestration container, từ khởi tạo cluster, deploy service, đến scale container dễ dàng. Thực hành với Nginx cho thấy bạn có thể áp dụng Swarm vào production mà không cần quá nhiều công sức. Nó không phải Kubernetes, nhưng đủ tốt cho nhiều trường hợp thực tế. Bài tiếp theo, chúng ta sẽ khám phá Docker Security – cách bảo mật container trong DevOps.