3.1 Cơ bản về mạng bridge
Mạng bridge
là network driver mặc định trong Docker và được sử dụng để tạo một mạng cách ly, nơi các container có thể tương tác với nhau. Mạng này cho phép các container giao tiếp qua địa chỉ IP và tên host, cung cấp một cách thuận tiện để tổ chức sự tương tác giữa các thành phần khác nhau của ứng dụng nhiều container.
Mạng bridge
tạo ra một mạng nội bộ riêng tư trên cấp độ host, cách ly khỏi mạng bên ngoài của host. Các container kết nối với mạng này có thể tương tác với nhau, nhưng không thể được truy cập trực tiếp từ bên ngoài nếu không cấu hình port forwarding.
Tự động tạo mạng bridge
Theo mặc định, Docker tạo mạng bridge
khi cài đặt, và các container được chạy mà không chỉ định cụ thể mạng sẽ tự động kết nối với mạng này.
Ví dụ về cách tạo và sử dụng container trong mạng bridge
1. Chạy container trong mạng bridge
:
Trong ví dụ này, chúng ta chạy hai container: container1 với Nginx và container2 với Busybox. Cả hai container đều được kết nối với mạng bridge mặc định.
docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000
2. Kiểm tra địa chỉ IP của container:
Để kiểm tra địa chỉ IP của container, sử dụng lệnh docker inspect.
Các lệnh này sẽ xuất địa chỉ IP của các container, mà có thể được sử dụng để giao tiếp giữa chúng.
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2
3. Giao tiếp giữa các container qua địa chỉ IP:
Để kiểm tra giao tiếp giữa các container, sử dụng lệnh ping
từ container container2
để ping đến container1
.
Nếu các container được kết nối đúng vào mạng bridge
, lệnh ping
sẽ thành công.
docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>
Giải thích: Mạng bridge
cung cấp một giải pháp đơn giản cho các ứng dụng cục bộ, nơi các container cần tương tác với nhau, trong khi vẫn được cách ly khỏi mạng bên ngoài. Ping qua địa chỉ IP là cách cơ bản để kiểm tra kết nối mạng, tuy nhiên đối với các ứng dụng phức tạp hơn, có thể cần cấu hình DNS hoặc các network driver bổ sung.
3.2 Sử dụng tên host
Sử dụng tên host để kết nối giữa các container
Ngoài việc sử dụng địa chỉ IP, Docker cũng cho phép sử dụng tên container để kết nối giữa chúng. Điều này làm cho cấu hình đơn giản hơn vì tên container luôn cố định, không giống như địa chỉ IP có thể thay đổi khi khởi động lại container.
Ví dụ kết nối qua tên host
1. Chạy container với chỉ định mạng bridge
:
docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
2. Kiểm tra kết nối qua tên host:
Sử dụng lệnh ping
từ container appserver
để ping webserver
:
docker exec appserver ping -c 4 webserver
Tạo bridge network
tùy chỉnh
Thay vì sử dụng mạng bridge
mặc định, bạn có thể tạo bridge network
tùy chỉnh để kiểm soát tốt hơn sự tương tác giữa các container.
Ví dụ tạo mạng tùy chỉnh
1. Tạo mạng tùy chỉnh:
docker network create --driver bridge my_bridge_network
2. Chạy container trong mạng tùy chỉnh:
docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000
3. Kiểm tra kết nối qua tên host:
docker exec appserver ping -c 4 webserver
3.3 Ví dụ về nhiều host
Ví dụ về cách sử dụng thực tế
Ví dụ 1: Web server và cơ sở dữ liệu
Tạo file docker-compose.yml
cho web server và cơ sở dữ liệu:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Chạy Docker Compose:
docker compose up -d
Kiểm tra kết nối giữa các container:
docker compose exec web ping -c 4 db
Ví dụ 2: Kiến trúc Microservice
Tạo file docker-compose.yml
cho ứng dụng microservice:
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- my_bridge_network
backend:
image: mybackend:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Chạy Docker Compose
:
docker compose up -d
Kiểm tra kết nối giữa các container:
docker compose exec backend ping -c 4 db
docker compose exec frontend ping -c 4 backend
GO TO FULL VERSION