Docker Networking nâng cao: Overlay và Service Discovery
Bạn có biết?
Hãy tưởng tượng bạn có một hệ thống đường cao tốc ảo kết nối các container chạy trên nhiều Docker hosts khác nhau – như thể tất cả đều nằm trong cùng một mạng LAN vậy. Đó chính xác là những gì Overlay Network mang lại. Khi ứng dụng của bạn cần mở rộng ra nhiều server, Overlay Network cho phép các container “nói chuyện” với nhau như thể chúng đang ở trong cùng một máy.
Docker Network Types
Bridge Network (mặc định)
- Driver: bridge
- Dùng cho: single-host
- Tạo network ảo riêng, các container kết nối qua virtual bridge
Host Network
- Driver: host
- Dùng cho: containers cần performance cao
- Container dùng network của host trực tiếp, bỏ qua Docker network isolation
Overlay Network
- Driver: overlay
- Dùng cho: multi-host (Docker Swarm)
- Tạo virtual LAN xuyên qua nhiều Docker hosts
- Yêu cầu Swarm mode hoạt động
Macvlan
- Driver: macvlan
- Dùng cho: Legacy apps cần direct network access
- Container có MAC address riêng, xuất hiện như physical device trên network
Overlay Network trong Swarm
Khởi tạo Swarm
# Khởi tạo Swarm (leader)
docker swarm init
# Tham gia Swarm với token
docker swarm join --token SWMTKN-1-xxxxx node-ip:2377
Tạo Overlay Network
docker network create -d overlay my-overlay
Sử dụng trong Service
services:
web:
image: nginx
networks:
- my-overlay
networks:
my-overlay:
driver: overlay
Service Discovery
DNS-based discovery
Container có thể resolve theo service name – không cần IP cứng. Ví dụ: từ web container, bạn có thể ping db để kết nối đến database service.
Embedded DNS
Docker có built-in DNS server với địa chỉ 127.0.0.11. Tất cả container tự động được cấu hình để resolve qua Docker DNS.
VIP (Virtual IP)
Load balancing tự động qua VIP với round-robin mặc định. Service có một IP ảo duy nhất, Docker tự động phân phối requests đến các containers.
DNS Round Robin
# Kích hoạt DNS round-robin
docker service create --dns-opt round-robin --name my-service my-image
Mỗi container có nhiều A records, client có thể chọn random IP.
Các lệnh quản lý network
docker network ls
docker network ls
Liệt kê tất cả networks.
docker network inspect
docker network inspect my-overlay
Xem chi tiết network bao gồm containers kết nối.
docker network create
docker network create -d bridge my-bridge
docker network create -d overlay my-overlay
Tạo custom network với driver tương ứng.
docker network rm / docker network prune
docker network rm my-network
docker network prune
Xóa network cụ thể hoặc dọn dẹp networks không sử dụng.
docker network connect / disconnect
docker network connect my-network container-name
docker network disconnect my-network container-name
Kết nối/ngắt kết nối container với network.
Ví dụ: Multi-host Web App
version: "3.8"
services:
web:
image: nginx
networks:
- frontend
api:
image: node
networks:
- backend
networks:
frontend:
driver: overlay
backend:
driver: overlay
Web service và API service chạy trên các hosts khác nhau nhưng vẫn giao tiếp được qua Overlay Network.
Best Practices
- Dùng custom networks – tách biệt frontend/backend
- Overlay cho multi-host – cần Swarm mode hoạt động
- Service discovery tự động – dùng service name thay vì IP cứng
- External access – dùng ingress network để publish services
- Macvlan cho legacy apps – khi cần direct network access
Bước tiếp theo
Tiếp theo, chúng ta sẽ tìm hiểu về Docker Logging và Monitoring – cách thu thập logs và theo dõi performance của containers trong production.