Tiếp tục với loạt bài tìm hiểu và thực hành Docker thì bài hôm nay chúng ta cùng tìm hiểu kiến thức về Network trong docker, những kiến thức căn bản về tạo quản lý và kết nối network trong docker, cách mà các container kết nối với nhau, cách mà từ máy host truy cập đến container qua các cổng.
bắt tay vào tìm hiểu và thực hành thôi !!!
Khái niệm và các default Docker Network
Khái niệm 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ó.
Default Networks
Có 3 loại networks được tự động tạo ra trong docker là bridge, none, host ta có thể xem bằng lệnh docker network ls
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
Thực hành tạo và quản lý Network
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
-
Tạo container B1 từ image busybox
docker run -it --rm --name B1 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 B1 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 B1 đã đượ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 B1
-
Tạo container B2 từ image busybox tương tự phần tạo container B1
Khi tạo xong container B2 thì thoát ra ngoài container bằng tổ hợp phím strl + p và strl + q, sau đó chạy lệnh
docker 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ả B2 và B1 -
Thử ping từ B1 sang B2
Ảnh trên ta thấy B1 có IPV4 là : 172.17.0.2 , B2 có IPV4 là: 172.17.0.3
Ở terminal nếu đang đứng ngoài B1 thì ta attach vào B1 bằng lệnh
docker attach B1
Đứng trong container B1 và ping sang B2 băng lệnh
ping 172.17.0.2
, ping thành công vậy là container B1 đã kết nối được với container B2
Tắt các container đã thực hành để tiếp tục thực hành phần tiếp theo
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 B3 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
1: Tạo container B3 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 B3 -p 8888:80 busybox
Bật một terminal khác để kiểm tra các container đang chạy
Tạo xong container B3 và thấy posts được ánh xạ từ cổng 8888 của máy host vào cổng 80 của container, nghĩa là khi ta truy cập cổng 8888 trên máy host chính là truy cập vào cổng 80 của container.
2: Quay lại terminal của B2 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 và sửa file này
:wq! để lưu và thoát file
3: 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
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 đó
1: 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
2: Xóa network
docker network rm name_network
3: Tạo container kết nối vào một network được chỉ định
docker run -it --name B4 --network network1 busybox
Lệnh trên ta tạo một container tên là B4 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 B4 kết nối
4: Kêt nối một container đang chạy với một mạng khác
Ví dụ: ta có 2 network là network1 và network2 có một container B5 đ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 B5
Lệnh trên là kết nối container B5 vào mạng network2
Kết bài
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. Cùng theo dõi những bài tiếp theo của hành trình chinh phục docker cùng mình nhé. Cảm ơn mn