1. Docker Swarm - Tổng quan
Docker Swarm là native container orchestration tool của Docker, cho phép quản lý cluster gồm nhiều Docker hosts và triển khai services trên đó.
Kiến trúc Swarm
┌─────────────────────────────────────────┐
│ Docker Swarm │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Manager 1 │ │ Manager 2 │ │
│ │ (Leader) │ │ (Follower) │ │
│ │ │ │ │ │
│ │ Raft │←→│ Raft │ │
│ │ Consensus │ │ Consensus │ │
│ └─────────────┘ └─────────────┘ │
│ │ │ │
│ ┌──────▼───┐ ┌────────▼──┐ ┌──────┐│
│ │ Worker 1 │ │ Worker 2 │ │Wkr 3 ││
│ │ ┌──────┐ │ │ ┌──────┐ │ │ ││
│ │ │Task 1│ │ │ │Task 2│ │ │ ││
│ │ │Task 3│ │ │ │Task 4│ │ │ ││
│ │ └──────┘ │ │ └──────┘ │ │ ││
│ └──────────┘ └───────────┘ └──────┘│
└─────────────────────────────────────────┘
2. Tạo Swarm Cluster
# Khởi tạo Swarm (trên manager node) docker swarm init --advertise-addr 192.168.1.10Output sẽ cho join token
docker swarm join --token SWMTKN-xxx 192.168.1.10:2377
Lấy join token cho worker
docker swarm join-token worker
Lấy join token cho manager
docker swarm join-token manager
Join cluster (trên worker nodes)
docker swarm join --token SWMTKN-xxx 192.168.1.10:2377
Xem nodes trong cluster
docker node ls
Promote worker thành manager
docker node promote worker-1
Demote manager thành worker
docker node demote manager-2
Leave swarm
docker swarm leave # Worker docker swarm leave --force # Manager (last one)
3. Services, Tasks và Replicas
# Tạo service docker service create \ --name web \ --replicas 3 \ --publish published=80,target=80 \ nginx:1.27-alpineLiệt kê services
docker service ls
Xem tasks của service
docker service ps web
Xem logs
docker service logs web docker service logs -f web
Scale service
docker service scale web=5
Inspect service
docker service inspect --pretty web
4. Rolling Updates và Rollback
# Tạo service với update config docker service create \ --name api \ --replicas 3 \ --update-parallelism 1 \ --update-delay 10s \ --update-order start-first \ --update-failure-action rollback \ --rollback-parallelism 1 \ --rollback-delay 5s \ myapp:1.0Update image (rolling update)
docker service update --image myapp:2.0 api
Rollback
docker service rollback api
Update với environment variables
docker service update
--env-add NEW_VAR=value
--env-rm OLD_VAR
apiUpdate resource limits
docker service update
--limit-cpu 1.0
--limit-memory 512m
api
5. Overlay Networking
# Tạo overlay network docker network create -d overlay my-overlayTạo encrypted overlay
docker network create -d overlay --opt encrypted my-secure-overlay
Service sử dụng overlay network
docker service create
--name api
--network my-overlay
myappdocker service create
--name db
--network my-overlay
postgres:16api có thể kết nối db bằng hostname "db"
Ingress Load Balancing
Swarm tự động load balance traffic đến service replicas thông qua ingress network:
# Traffic đến bất kỳ node nào trên port 80 # sẽ được route đến một replica của web service docker service create \ --name web \ --replicas 3 \ --publish 80:80 \ nginxRouting mesh: Request → Any Node → Ingress → Service Container
6. Placement Constraints
# Chạy service trên nodes cụ thể docker service create \ --name db \ --constraint 'node.role == manager' \ postgres:16docker service create
--name api
--constraint 'node.labels.environment == production'
--constraint 'node.labels.region == asia'
myappLabel nodes
docker node update --label-add environment=production worker-1 docker node update --label-add region=asia worker-1
Placement preferences (soft constraints)
docker service create
--name web
--replicas 6
--placement-pref 'spread=node.labels.datacenter'
nginx
7. Secrets và Configs trong Swarm
# Tạo secret echo "mysecretpassword" | docker secret create db_password - docker secret create ssl_cert ./server.crtSử dụng secret
docker service create
--name db
--secret db_password
-e POSTGRES_PASSWORD_FILE=/run/secrets/db_password
postgres:16Tạo config
docker config create nginx_conf ./nginx.conf
Sử dụng config
docker service create
--name web
--config source=nginx_conf,target=/etc/nginx/nginx.conf
nginx
8. Stack Deploy
# docker-stack.yml version: '3.8'services: web: image: nginx:1.27-alpine ports: - "80:80" deploy: replicas: 3 update_config: parallelism: 1 delay: 10s restart_policy: condition: on-failure networks: - frontend
api: image: myapp:latest deploy: replicas: 2 resources: limits: cpus: '0.5' memory: 256M secrets: - db_password networks: - frontend - backend
db: image: postgres:16-alpine deploy: placement: constraints: - node.role == manager volumes: - db-data:/var/lib/postgresql/data secrets: - db_password networks: - backend
networks: frontend: backend:
volumes: db-data:
secrets: db_password: external: true
# Deploy stack
docker stack deploy -c docker-stack.yml myapp
# Liệt kê stacks
docker stack ls
# Xem services trong stack
docker stack services myapp
# Xem tasks
docker stack ps myapp
# Remove stack
docker stack rm myapp
9. Docker Swarm vs Kubernetes
| Feature | Docker Swarm | Kubernetes |
|---|---|---|
| Complexity | Đơn giản, dễ setup | Phức tạp hơn |
| Learning curve | Thấp | Cao |
| Scaling | Tốt cho small-medium | Tốt cho mọi quy mô |
| Auto-scaling | Không built-in | HPA, VPA, Cluster Autoscaler |
| Ecosystem | Nhỏ | Rất lớn (CNCF) |
| Community | Nhỏ hơn | Rất lớn |
| Use case | Small teams, simple deployments | Enterprise, complex microservices |
10. Tổng kết
Trong bài này, bạn đã nắm được:
Docker Swarm architecture và cluster setup
Services, tasks, replicas
Rolling updates và rollback
Overlay networking và ingress
Placement constraints
Secrets, configs, và stack deploy
Swarm vs Kubernetes comparison
Bài tiếp theo sẽ hướng dẫn Docker cho Microservices Architecture.