5.1 Các loại mạng tùy chỉnh cơ bản
Mạng tùy chỉnh trong Docker cung cấp khả năng linh hoạt để cấu hình và quản lý tương tác mạng giữa các container. Nó cho phép cô lập các container, tổ chức tương tác giữa chúng và tạo ra các cấu trúc mạng phức tạp. Trong bài giảng này, chúng ta sẽ tìm hiểu cách tạo và cấu hình mạng tùy chỉnh trong Docker, cũng như các ví dụ về cách sử dụng chúng.
Các loại mạng tùy chỉnh cơ bản
Docker hỗ trợ một số loại mạng tùy chỉnh, mỗi loại có các đặc điểm riêng và được thiết kế cho các kịch bản sử dụng khác nhau:
-
Bridge (mạng cầu nối): cung cấp sự cô lập và kết nối giữa các container trên cùng một host. Loại mạng này được sử dụng mặc định cho các ứng dụng cục bộ không yêu cầu tương tác bên ngoài host. -
Overlay (mạng overlay): được thiết kế để kết nối các container hoạt động trên các host khác nhau trong cụm Docker Swarm hoặc Kubernetes. Chúng đảm bảo khả năng mở rộng cao và an toàn cho các ứng dụng phân tán. -
Macvlan: cho phép các container sử dụng trực tiếp giao diện mạng vật lý của host. Điều này hữu ích đối với các ứng dụng mạng có yêu cầu hiệu suất cao, cũng như các trường hợp cần liên kết với các địa chỉ MAC cụ thể. Các container trong mạng Macvlan có thể tương tác với các thiết bị khác trong mạng vật lý như các nút độc lập. -
Host (mạng host): các container sử dụng stack mạng của host, loại bỏ chi phí trên mạng ảo hóa nhưng giảm đi phần cô lập. Loại mạng này phù hợp cho các ứng dụng cần hiệu suất mạng tối đa.
5.2 Tạo và sử dụng mạng cầu (bridge)
Mạng cầu (bridge) là loại mạng tùy chỉnh phổ biến nhất và được sử dụng để cô lập các container trên một máy chủ. Các container được kết nối với cùng một mạng bridge có thể tương tác với nhau qua các địa chỉ IP và tên host.
Tạo một mạng bridge tùy chỉnh
Để tạo một mạng bridge tùy chỉnh, hãy sử dụng lệnh docker network create:
docker network create --driver bridge my_bridge_network
Khởi chạy container trong mạng tùy chỉnh
Khởi chạy các container với kết nối đến mạng đã tạo:
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network busybox sleep 1000
Kiểm tra kết nối giữa các container
Bạn có thể sử dụng lệnh ping để kiểm tra kết nối giữa các container:
docker exec container2 ping -c 4 container1
Nếu các container được kết nối đúng vào mạng my_bridge_network, lệnh ping sẽ thành công.
5.3 Mạng tùy chỉnh trong Docker Compose
Ví dụ sử dụng mạng tùy chỉnh trong Docker Compose
Docker Compose giúp đơn giản hóa việc tạo và quản lý mạng cho các ứng dụng đa container. Bạn có thể định nghĩa mạng tùy chỉnh trong file docker-compose.yml.
Ví dụ file docker-compose.yml:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
app:
image: myapp:latest
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Chạy Docker Compose:
docker compose up -d
Trong ví dụ này, cả hai dịch vụ (web và app) đều được kết nối với mạng tùy chỉnh my_bridge_network.
5.4 Cấu hình và sử dụng mạng macvlan
Mạng macvlan cho phép container sử dụng trực tiếp giao diện mạng vật lý của host, điều này có thể hữu ích cho các ứng dụng yêu cầu hiệu suất mạng cao. Container trong mạng này nhận được địa chỉ IP riêng trong phạm vi subnet đã chỉ định, làm cho chúng hiển thị trong cùng mạng với host.
Tạo mạng macvlan
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my_macvlan_network
Trong lệnh này:
--subnet: xác định subnet nơi các container sẽ hoạt động.--gateway: đặt cổng gateway cho các container.-o parent: chỉ định giao diện mạng của host mà mạng sẽ được liên kết.
Chạy container trong mạng macvlan
docker run -d --name container1 --network my_macvlan_network nginx
docker run -d --name container2 --network my_macvlan_network busybox sleep 1000
Trong ví dụ này, cả hai container đều được kết nối với mạng my_macvlan_network và có quyền truy cập vào mạng bên ngoài thông qua giao diện vật lý eth0.
5.5 Ví dụ sử dụng trong Docker Compose
Bạn cũng có thể sử dụng mạng macvlan trong Docker Compose. Ví dụ:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_macvlan_network
networks:
my_macvlan_network:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
Chạy Docker Compose:
docker compose up -d
Trong ví dụ này, mạng my_macvlan_network cho phép dịch vụ web tương tác với các thiết bị trong subnet 192.168.1.0/24, bao gồm cả host.
Hướng dẫn thực hành:
- Cấu hình truy cập: Đảm bảo rằng router của bạn hoặc quản trị viên mạng cho phép sử dụng subnet được chỉ định trong cấu hình
macvlan. - Cách ly: Nếu bảo mật quan trọng, hãy sử dụng VLAN để phân đoạn mạng, để các container chỉ truy cập được tài nguyên cần thiết.
- Kiểm tra: Sau khi cấu hình, hãy kiểm tra kết nối giữa các container và mạng ngoài bằng các lệnh
pinghoặccurl.
5.6 Ví dụ sử dụng mạng cho microservices
Hãy xem ví dụ, nơi chúng ta có frontend, backend và cơ sở dữ liệu, chúng được cô lập trong các mạng khác nhau, nhưng vẫn đảm bảo tương tác thông qua sự giao thoa giữa các mạng.
Tệp docker-compose.yml
version: '3.8'
services:
frontend:
image: myfrontend:latest
networks:
- front-tier
- back-tier
backend:
image: mybackend:latest
networks:
- back-tier
- db-tier
database:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- db-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
db-tier:
driver: bridge
Chạy Docker Compose:
docker compose up -d
Trong ví dụ này:
- Dịch vụ
frontendđược kết nối với các mạngfront-tiervàback-tier, cho phép nó tương tác với cả khách hàng bên ngoài lẫn backend. - Dịch vụ
backendđược kết nối với các mạngback-tiervàdb-tier, cho phép nó tương tác cả với frontend và cơ sở dữ liệu. - Dịch vụ
databasechỉ được kết nối với mạngdb-tier, giúp cô lập cơ sở dữ liệu khỏi truy cập bên ngoài.
Khuyến nghị thực tế:
- Sử dụng cô lập: Phân tách các mạng giúp hạn chế quyền truy cập của các dịch vụ vào cơ sở dữ liệu hoặc các tài nguyên quan trọng khác.
- Kiểm tra kết nối: Đảm bảo rằng các dịch vụ có thể tương tác với nhau qua các mạng chung, sử dụng các lệnh như
pinghoặccurl. - Tối ưu hóa: Sử dụng mạng
overlaynếu dự án của bạn yêu cầu làm việc trong một cluster hoặc trên nhiều host.
Ví dụ này minh họa cách tạo cô lập mạng và đồng thời đảm bảo sự tương tác giữa các tầng khác nhau của ứng dụng.
GO TO FULL VERSION