Tổng quan
Bridge là một thuật ngữ networking, ám chỉ một thiết bị nằm ở tầng Link của mô hình OSI, đóng vai trò chuyển tiếp lưu thông giữa các phân đoạn của mạng. Bridge có thể là một thiết bị phần cứng hoặc một phần mềm (trong bài viết này gọi là Linux bridge). Mạng các thiết bị đứng sau một bridge được gọi là mạng bridge.
Docker sử dụng một Linux bridge để triển khai mạng Docker bridge (trong bài viết này gọi tắt là bridge), nhằm giúp các container được kết nối vào cùng một mạng bridge để giao tiếp với nhau, trong khi vẫn giữ được sự cô lập với các container khác nằm ngoài mạng.
Mạng bridge được sử dụng cho các container có chung Docker deamon. Để thực hiện thao tác tương đương cho các container nằm trên các Docker daemon khác nhau, cần sử dụng đến mạng overlay thông qua driver mạng Docker Overlay.
Khi khởi động Docker, một bridge mặc định sẽ được tạo ra tự động, và các container khởi động sau đó sẽ mặc định được kết nối vào bridge này, trừ khi chúng được chỉ thị đặc biệt.
Quản trị viên có thể tự định nghĩa một bridge riêng.
Sự khác nhau giữa mạng bridge mặc-định và tự-định-nghĩa

- Các
bridgetự định nghĩa cung cấp giải pháp DNS tự động giữa các container. Các container củabridgetự định nghĩa có thể nhận biết được các container còn lại thông qua tên hay bí danh. Một container tên làappcó thể kết nối tới container tên làdbthông qua tên miềndb, mà không cần cấu hình DNS. Trong khi đó, các container củabridgemặc định chỉ có thể truy cập tới các container khác thông qua địa chỉ IP, trừ khi chúng được--link(một giải pháp cổ-điển) với nhau. Các link cần phải được tạo ra từ cả hai phía, kiến cho giải pháp này trở nên phức tạp hơn. Một cách khác là cấu hình/etc/hostscho các container cần nhận thức nhau, nhưng giải pháp này khiến thao tác debug trở nên khó khăn hơn. - Các
bridgetự định nghĩa cô lập hơn. Các container được tạo ra mà không được chỉ thị--networksẽ được kết nối vàobridgemặc định. Điều này tạo ra rủi ro rò rỉ thông tin. Sử dụngbridgetự định nghĩa sẽ giúp cô lập phạm vi kết nối xuống còn chỉ duy nhất các container trong mạng. - Các container có thể được cắm và rút khỏi
bridgetự định nghĩa tại runtime. Trong khi đó, để cắm rút container khỏibridgemặc định, cần phải dừng xóa và tạo lại container với một--networkkhác. - Mỗi
bridgetự định nghĩa sử dụng các Linux bridge có thể cấu hình riêng biệt. Linux bridge củabridgemặc định cũng có thể cấu hình, nhưng việc thay đổi cấu hình xảy ra bên ngoài Docker, nên sẽ cần phải khởi động lại Docker. Các Linux bridge của cácbridgetự định nghĩa được tạo ra bởi lệnhdocker network createvà được điều khiển bởi Docker nên sẽ không yêu cầu khởi động lại. - Các container được
--linktrênbridgemặc định chia sẻ tập biến môi trường với nhau. Và--linklà cơ chế duy nhất có khả năng làm được việc đó một cách tự nhiên. Tuy vậy, các phương pháp thay thế tạo hiệu quả tương đương không phải là không có:- Các container có thể mount chung một tập tin hay thư mục
- Các container có thể được khởi động trong cùng một
docker-composestack và theo đó có thể sử dụng chung một tập tin cấu hình biến môi trường. - Các container có thể lấy cấu hình từ
secretshayconfigscủa Docker Swarm nếu chúng được khởi động trong swarm mode.
Quản trị mạng bridge tự-định-nghĩa
Để định nghĩa một bridge, sử dụng lệnh docker network create:
$ docker network create my-net
Các thông số subnet, dải IP, gateway… có thể được cấu hình trong lúc khởi tạo. Chi tiết có thể tham khảo tại tài liệu docker network create, hay bằng docker network create --help.
Để hủy bỏ một bridge, sử dụng lệnh docker network rm, sẽ cần phải rút các container đang kết nối vào mạng này trước.
$ docker network rm my-netKết nối container tới bridge tự định nghĩa
Khi tạo một container, cờ --network có thể được sử dụng một hoặc nhiều lần để kết nối container vào mạng. Trong ví dụ dưới đây, my-nginx được kết nối vào mạng my-net. Nó cũng xuất bản port 80 của nó tới 8080 của máy host, nhờ đó các client bên ngoài có thể truy xuất vào 80. Tất cả các container khác có kết nối vào my-net đều có thể truy cập tất cả các port của my-nginx, và ngược lại.
$ docker create --name my-nginx \
--network my-net \
--publish 8080:80 \
nginx:latest
Để kết nối các container đang hoạt động, vào bridge tự định nghĩa, sử dụng câu lệnh docker network connect. Ví dụ dưới đây kết nối my-nginx (đang hoạt động) vào my-net (đã được khởi tạo từ trước):
$ docker network connect my-net my-nginxRút container khỏi mạng tự-định-nghĩa
Để rút một container đang hoạt động khỏi một bridge tự định nghĩa, sử dụng lệnh docker network disconnect. Ví dụ dưới đây rút container my-nginx khỏi my-net:
$ docker network disconnect my-net my-nginxTài nguyên tham khảo:
![]()
One Reply to “Sử dụng mạng Docker Bridge”