Tổng quan về Docker Network và các loại Network có sẵn trong Docker
Trong Docker, Network là một tính năng quan trọng giúp các container trong Docker có thể giao tiếp với nhau hoặc với các dịch vụ khác trên mạng. Docker hỗ trợ nhiều loại Network khác nhau để đáp ứng các nhu cầu khác nhau của người dùng. Trong bài viết này, chúng ta sẽ tìm hiểu về Docker Network và các loại Network có sẵn trong Docker.
Docker Network là gì?
Docker Network là một tính năng của Docker cho phép các container tương tác với nhau hoặc với các dịch vụ khác trên mạng. Mỗi Docker Network có một địa chỉ IP riêng, giúp các container trên cùng một mạng có thể giao tiếp với nhau thông qua địa chỉ IP này.
Các loại Network có sẵn trong Docker
Trong Docker, có nhiều loại Network khác nhau để đáp ứng các nhu cầu khác nhau của người dùng. Dưới đây là một số loại Network phổ biến trong Docker:
Bridge Network
Bridge Network là loại Network mặc định trong Docker. Khi bạn tạo một container mới, nó sẽ được tự động gán vào một Bridge Network mới. Bridge Network cho phép các container trong cùng một mạng giao tiếp với nhau qua địa chỉ IP.
Để tạo một Bridge Network mới trong Docker, bạn có thể sử dụng lệnh sau:
docker network create my-bridge-network
Host Network
Host Network cho phép các container trong Docker sử dụng cùng một địa chỉ IP với máy chủ chạy Docker.
Để sử dụng Host Network cho một container, bạn có thể sử dụng tùy chọn "--network host" khi khởi chạy container:
docker run --network host my-image
Overlay Network
Overlay Network cho phép các container trong Docker truy cập vào các dịch vụ khác trên mạng, bao gồm các dịch vụ chạy trên các máy chủ khác.
Để tạo một Overlay Network mới trong Docker, bạn có thể sử dụng lệnh sau:
docker network create --driver overlay my-overlay-network
Macvlan Network
Macvlan Network cho phép các container trong Docker có địa chỉ MAC và địa chỉ IP riêng.
Để tạo một Macvlan Network mới trong Docker, bạn có thể sử dụng lệnh sau:
docker network create --driver macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my-macvlan-network
Trong đó, "--subnet" và "--gateway" là địa chỉ IP của Macvlan Network, và "-o parent" là tên của Network interface gốc.
Ví dụ minh họa
Ví dụ sau đây minh họa cách sử dụng Bridge Network và Overlay Network trong Docker:
- Tạo một Bridge Network mới trong Docker:
docker network create my-bridge-network
- Tạo hai container và gán chúng vào Bridge Network vừa tạo:
docker run -d -p 8080:80 --network my-bridge-network --name container-a my-image
docker run -d -p 8081:80 --network my-bridge-network --name container-b my-image
Ở đây, container-a và container-b đều được gán vào Bridge Network "my-bridge-network".
- Kiểm tra xem container-a và container-b có thể giao tiếp với nhau qua địa chỉ IP hay không:
docker exec container-a ping container-b
Nếu kết quả trả về là "pong", chứng tỏ container-a và container-b có thể giao tiếp với nhau quađịa chỉ IP trong Bridge Network.
- Tạo một Overlay Network mới trong Docker:
docker network create --driver overlay my-overlay-network
- Tạo hai service và gán chúng vào Overlay Network vừa tạo:
docker service create --name service-a --network my-overlay-network my-image
docker service create --name service-b --network my-overlay-network my-image
Ở đây, service-a và service-b đều được gán vào Overlay Network "my-overlay-network".
- Kiểm tra xem service-a và service-b có thể giao tiếp với nhau qua địa chỉ IP trong Overlay Network hay không:
docker service ps service-a
docker service ps service-b
Nếu kết quả trả về cho thấy cả hai service đều đang chạy trên các node khác nhau trong Overlay Network, chứng tỏ service-a và service-b có thể giao tiếp với nhau qua địa chỉ IP trong Overlay Network.
Kết luận
Docker Network là một tính năng quan trọng trong Docker giúp các container trong Docker có thể giao tiếp với nhau hoặc với các dịch vụ khác trên mạng. Docker hỗ trợ nhiều loại Network khác nhau để đáp ứng các nhu cầu khác nhau của người dùng, bao gồm Bridge Network, Host Network, Overlay Network và Macvlan Network. Với các loại Network này, bạn có thể dễ dàng tạo ra các mạng ảo cho các container trong Docker và đảm bảo tính độc lập giữa container và máy chủ.