Mục tiêu:
- Tạo network với subnet, gateway tùy chỉnh
- Gán IP tĩnh cho container
- Tạo network nội bộ (
-internal) - Giao tiếp giữa container thông qua mạng riêng
1. Tạo network với Subnet & Gateway tùy chỉnh
docker network create \
--subnet 10.1.0.0/24 \
--gateway 10.1.0.1 \
br02
Lưu ý: Chỉ dùng IP nội bộ như 10., 192., 172.
Mạng tạo ra sẽ có tên là br02, interface dạng br-<ID>.
2. Dọn dẹp mạng không sử dụng
docker network prune # Xoá toàn bộ network chưa dùng
Trước đó cần xóa container liên quan:
docker container rm -f <container_id>
3. Tạo mạng với dải IP con – -ip-range
Giả sử ta có 10.1.0.0/16 cho cả cụm → tạo mạng dùng 10.1.4.0/24
docker network create \
--subnet 10.1.0.0/16 \
--gateway 10.1.0.1 \
--ip-range 10.1.4.0/24 \
--driver bridge \
--label host4network \
br04
br04 sẽ dùng dải IP trong 10.1.4.0/24.
4. Khởi tạo container gắn luôn network
docker container run -it --name network-test01 \
--network br04 \
centos /bin/bash
yum update -y
yum install -y net-tools
ifconfig # Kiểm tra IP được gán từ br04
netstat -rn # Kiểm tra gateway
DNS hoạt động thông qua:
/etc/resolv.conf, /etc/hostname, /etc/hosts (Docker gán tự động)
5. Gán IP tĩnh cho container
docker container run -d --name network-test02 \
--network br04 \
--ip 10.1.4.102 \
nginx
docker container inspect network-test02 | grep IPAddr
6. Tạo mạng nội bộ – -internal
docker network create --internal localhost
Mạng localhost sẽ không thể truy cập từ bên ngoài host.
7. Container chỉ giao tiếp nội bộ
Tạo container MySQL:
docker container run -d \
--name test_mysql \
-e MYSQL_ROOT_PASSWORD=pass123 \
--network localhost \
mysql:5.7
Tạo container để ping:
docker container run -it --name ping-mysql \
--network bridge centos /bin/bash
exit
Thêm container vào mạng nội bộ:
docker network connect localhost ping-mysql
docker container start -i ping-mysql
ping test_mysql # Có thể ping qua localhost network
Tạo container không gắn localhost:
docker container run -it --name no-access centos /bin/bash
ping test_mysql # Không kết nối được
8. Cách hoạt động của Internal Network
docker container run -d \
--name private-nginx \
-p 8081:80 \
--network localhost \
nginx
curl localhost:8081 # Không truy cập được
docker inspect private-nginx | grep IPAddr
curl <PRIVATE_IP> # Truy cập được qua IP nội bộ
Vì --internal → mạng không liên kết với bất kỳ giao diện nào trên host
Tổng kết lệnh
| Lệnh | Ý nghĩa |
|---|---|
docker network create | Tạo network mới |
--subnet, --gateway | Định nghĩa mạng riêng |
--ip-range | Chỉ định dải IP nhỏ trong subnet |
--internal | Mạng nội bộ, không truy cập từ ngoài |
--ip | Gán IP tĩnh cho container |
docker network connect | Kết nối container với mạng |
docker container inspect | Kiểm tra IP, gateway, DNS, v.v. |