CodeGym /Các khóa học /Docker SELF /Kết nối giữa các container

Kết nối giữa các container

Docker SELF
Mức độ , Bài học
Có sẵn

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.

Terminal

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.

Terminal

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.

Terminal

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:

Terminal

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:

Terminal

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:

Terminal

docker network create --driver bridge my_bridge_network 
    

2. Chạy container trong mạng tùy chỉnh:

Terminal

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:

Terminal

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:

Yaml

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:

Terminal


docker compose up -d 

Kiểm tra kết nối giữa các container:

Terminal


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:

Yaml

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:

Terminal

        
docker compose up -d 

Kiểm tra kết nối giữa các container:

Terminal

docker compose exec backend ping -c 4 db

docker compose exec frontend ping -c 4 backend 
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION