Docker Network sẽ đảm nhiệm nhiệm vụ kết nối mạng giữa các container với nhau, kết nối giữa container với bên ngoài. Với container và service của Docker, bạn có thể kết nối chúng lại với nhau hoặc kết nối chúng với các mạng khác nằm ngoài docker.
1. Định nghĩa và các Default Docker Network
1.1 Định nghĩa về Docker Network
Docker network là nơi sẽ đảm nhiệm nhiệm vụ cho container kết nối vào network
-
Các container cùng một network có thể liên lạc với nhau qua tên của container và cổng (port) được lắng nghe của container trên mạng đó
-
Kết nối trên 1 host hoặc nhiều host,
-
Kết nối giữa các cụm (swarm) docker containers.
-
Kết nối container với các mạng khác nằm ngoài docker.
-
Có thể cung cấp hầu hết các chức năng mà một hệ thống mạng bình thường cần có.
1.2 Default Networks
Có 3 loại networks được tự động tạo ra trong docker là:
- bridge
- none
- host
Chúng ta có thể xem bằng lệnh:
docker network ls
Output:
~ docker network ls
NETWORK ID NAME DRIVER SCOPE
e187cc02365d bridge bridge local
954add77e404 host host local
b2fadf2348a9 none null local
-
bridge đây là driver mạng mặc định của Docker, bridge là driver phù hợp nhất cho việc giao tiếp các containers độc lập. các container trong cùng mạng có thể giao tiếp với nhau qua địa chỉ IP, nếu không chỉ định driver thì bridge sẽ là driver mạng mặc định khi khởi tạo.
-
none driver cung cấp cho một container networking stack và không gian mạng riêng của nó, thường được dùng với mạng tùy chỉnh, driver này không thể dùng trong cụm swarm.
-
host dùng khi container cần giao tiếp với host và sử dụng trực tiếp mạng của máy chủ đang chạy
2. Thực hành tạo và quản lý Network
2.1 Tạo kết nối giữa 2 container
Phần thực hành này chúng ta sẻ tạo ra 2 container và nằm cùng trong một network bridge để cho 2 container này có thể kết nối đến nhau.
- Tải image busybox: là 1 công cụ nhỏ gọn chứa sẵn các lệnh ubuntu
docker pull busybox
2. Tạo container C1 từ image busybox
docker run -it --rm --name C1 busybox
Thêm tham số --rm
để khi ta dừng container thì sẽ tự động xóa container này
Khi tạo xong container C1 thì ta có thể bật 1 terminal khác để kiểm tra network bridge bằng lệnh
docker network inspect bridge
Ta thấy C1 đã được kết nối vào mạng này.
Hoặc có thể kiểm tra một container đang kết nối trong mạng nào bằng lệnh:
docker inspect C1
- Tạo container C2 từ image busybox tương tự phần tạo container C1
Sau khi tạo xong container C2 ta chạy lệnhdocker network inspect bridge
để kiểm tra xem các container nào kết nối vào mạng này, ta thấy cả C2 và C1 đều nằm cùng một lớp mạng.
- Kiểm tra kết nối giữa C1 và C2
Ảnh trên ta thấy C1 có IPV4 là :172.17.0.2
, C2 có IPV4 là:172.17.0.3
.
Ở terminal nếu đang đứng ngoài C1 thì ta access vào C1 bằng lệnhdocker attach C1
Đứng trong container C1 và ping sang C2 băng lệnhping 172.17.0.3
, ping thành công vậy là container C1 đã kết nối được với container C2.
2.2 Tạo kết nối từ máy host đến container
Phần thực hành này chúng ta sẽ tạo 1 container C3 từ busybox và container này có máy chủ web httpd để chạy file html, container này có cổng ánh xạ với cổng của máy host để từ máy host có thể truy cập vào máy chủ web trên container busybox này
- Tạo container C3 và ánh xạ cổng 80 của container này với cổng 8888 của máy host
docker run -it --name C3 -p 8888:80 busybox
Kiểm tra các container đang chạy bằng lệnh docker ps
2. Quay lại terminal của C2 ta vào thư mục /var/www
và bật máy chủ web httpd
lên.
Sau đó ta tạo file index.html để hiển thị hé lô guốc. :)
/var/www # httpd
/var/www # vi index.html
- Từ máy host vào trình duyệt truy cập vào container qua cổng 8888
Vậy là đã kết nối thành công từ máy host tới container.
2.3 Tạo docker network
Ngoài việc sử dụng các mạng có sẵn thì ta có thể tạo các mạng riêng để các container có thể sử dụng tách biệt với các container đó
- Tạo network
docker network create --driver bridge network1
Lệnh trên tạo ra mạng network1 ta kiểm tra bằng lệnh docker network ls
- Xóa network
docker network rm name_network
- Tạo container kết nối vào một network được chỉ định
docker run -it --name C4 --network network1 busybox
Lệnh trên ta tạo một container tên là C4 từ image busybox và có kết nối trong mạng network1 mới tạo ở trên.
Kiểm tra bằng lệnh docker network inspect network1
sẽ thấy có container C4 kết nối
- Kêt nối một container đang chạy với một mạng khác
Bài toán đặt ra: Chúng ta có 2 network là network1 và network2 có một container C5 đang kết nối với mạng network1 và ta muốn container này kết nối với cả network2 thì ta chạy lệnh.
docker network connect network2 C5
Lệnh trên là kết nối container C5 vào mạng network2
3. Kêt luận
Trên đây chúng ta đã tìm hiểu những kiến thức căn bản về tạo và quản lý và kết nối network trong docker. Phần tiếp đến mình sẽ cùng tìm hiểu về các bài tập thực hành nâng cao hơn docker và network nhé.
Cảm ơn mọi người đã đồng hành!