Mục tiêu bài học
- Hiểu mô hình mạng của Docker
- Nắm được các loại network driver:
bridge,overlay,macvlan,none - Hiểu mô hình CNM (Container Network Model) gồm: Sandbox, Endpoint, Network
- Biết vai trò của libnetwork & network plugin
1. Thành phần chính trong Docker Networking
Docker networking gồm 3 thành phần cốt lõi:
| Thành phần | Mô tả |
|---|---|
| CNM (Container Network Model) | Mô hình thiết kế mạng chuẩn của Docker |
| libnetwork | Thư viện hiện thực CNM trong thế giới thực |
| Drivers | Triển khai các loại mạng khác nhau |
2. libnetwork – Bộ máy kết nối mạng
libnetwork là hiện thực của CNM, đảm nhận:
- Service discovery (tìm kiếm dịch vụ giữa container)
- Load balancing theo mô hình ingress
- Network control plane (quản lý logic mạng)
Nó sử dụng các driver để tạo các mô hình mạng cụ thể.
3. Các Docker Network Driver phổ biến
| Driver | Mô tả |
|---|---|
| bridge | Mạng mặc định, dùng để nối các container trên cùng host (Linux-only) |
| overlay | Dùng để kết nối container giữa nhiều host – thường dùng với Docker Swarm |
| macvlan | Cấp địa chỉ MAC riêng cho container → giống như thiết bị vật lý |
| none | Tắt toàn bộ kết nối mạng của container |
| plugin bên thứ 3 | Cài từ Docker Hub để mở rộng chức năng mạng |
bridge là mặc định cho container chạy trên 1 máy.
overlay = phân tán trên nhiều máy (Docker Swarm).
macvlan dùng cho app cần cảm giác “vật lý”.
4. CNM – Container Network Model
CNM định nghĩa 3 khối thành phần cơ bản:
| Thành phần | Mô tả |
|---|---|
| Sandbox | Cô lập network stack (interface, port, DNS, route table) |
| Endpoint | Cổng kết nối giữa sandbox và mạng – giống card mạng |
| Network | Mạng kết nối các endpoint lại với nhau (giống cầu nối 802.1d) |
5. Mô hình minh họa CNM
Container A:
- Có 1 Sandbox
- Có 1 Endpoint nối vào Network A
Container B:
- Có 1 Sandbox
- Có 2 Endpoint:
+ Nối vào Network A (nối với Container A)
+ Nối vào Network B (nối với nơi khác)
Vì endpoint chỉ kết nối được 1 mạng, nên cần nhiều endpoint nếu container cần tham gia nhiều mạng. Hai container có thể giao tiếp nếu chung network. Dù chạy trên cùng Docker host, các container vẫn hoàn toàn cô lập về mạng nếu không chia sẻ network.
6. Một vài lưu ý quan trọng
- Không thể dùng
nonedriver với Docker Swarm bridgekhông hỗ trợ trên Docker Desktop (Windows/macOS)- Dùng
macvlankhi app cần nhận dạng giống như thiết bị thực - Có thể mở rộng bằng plugin bên thứ ba (có trên Docker Hub)
Tóm tắt
| Thành phần | Mô tả |
|---|---|
| CNM | Mô hình chuẩn cho mạng Docker |
| libnetwork | Thư viện hiện thực CNM |
| Sandbox | Cô lập mạng của container |
| Endpoint | Card mạng ảo gắn vào network |
| Network | Cầu nối giữa các endpoint |
| Bridge | Mạng nội bộ cho container trên 1 host |
| Overlay | Kết nối container giữa nhiều host |
| Macvlan | Gán MAC thật cho container |
| None | Không có mạng |
| Plugin | Mạng mở rộng từ Docker Hub |
Note
CNM là kiến trúc lý thuyết, libnetwork là hiện thực kỹ thuật, driver là cách triển khai mạng cụ thể.