Tìm hiểu cơ bản về Docker [Phần 3]

Tác giả: 24/05/2023

Mình sẽ tiếp tục phần trình bày chủ đề Tìm hiểu cơ bản về Docker.

Phần III – Network trong Docker

Docker network sẽ đảm nhiệm nhiệm vụ kết nối mạng giữa các container với nhau, kết nối giữa container với bên ngoài, cũng như kết nối giữa các cụm (swarm) docker containers. Với container và service của Docker, bạn có thể kết nối chúng lại với nhau hoặc kết nối chúng với các mạng khác nằm ngoài docker.

Khi chúng ta cài đặt Docker, virtual bridge docker0 sẽ được tạo ra, docker tìm một subnet chưa được dùng trên host và gán một địa chỉ cho docker0

Dải mạng mặc định của docker0 là 172.17.0.0/16.

Các mode của card mạng trong Docker

  • BRIDGE
  • HOST
  • OVERLAY
  • MACVLAN
  • NONE

Mình sẽ sử dụng container busybox chạy httpd để demo về các mode này.

docker pull busybox

1 – Mode Bridge

Đây là driver mạng default của Docker. Nếu không chỉ định driver thì bridge sẽ là driver mạng mặc định khi khởi tạo.

Mình sẽ demo trên HOST 45.117.80.225

 

 

  • Bridge Network tạo ra một cây cầu trên Docker Host để đạt được mục đích cho phép container kết nối với bên ngoài. Thông qua cây cầu này, các container của cùng một cây cầu có thể giao tiếp với nhau và trình điều khiển cầu docker sẽ tự động được đặt trên máy chủ. Quy tắc tương ứng (iptables, không gian tên mạng) cho phép mạng của bộ chứa được sử dụng chính xác.
  • Bridge Network được sử dụng để xử lý giao tiếp giữa các container đang chạy trên một trình docker daemon duy nhất. Nếu bạn muốn giao tiếp các container trên nhiều server khác nhau, bạn phải sử dụng overlay network.
docker network ls

 

Pull centos 7 mới sửa ở bài trước về

docker pull tudv1989/demo:sualan1

docker images

Mình sẽ chạy container  này

docker run -itd --name C1 -h centos7sualan1 4bd

Các tùy chọn trên các bạn có thể gõ docker run –help để check.

Xem tiến trình chạy của container centos trên

docker ps

Tìm các driver đang chạy mode bridge

docker network inspect bridge

Chúng ta có thể thấy container C1 là centos mới pull về đang có có card mạng dạng bridge và có địa chỉ là 172.17.0.2/16

Kết nối vào container C1 thông qua terminal

docker attach C1

Thử xem kết nối mạng

ping google.com

Thoát kết nối terminal vẫn để container chạy

Ctr + P + Q

Việc container ping ra được google có nghĩa là nó đã được định tuyến thông qua 172.17.0.1/16 > Host >…

Thử ping từ Host vào  IP của container và default gateway của driver host.

Ping từ container ra ngoài

Tạo 1 card bridge mới và gán card này cho container C3 ( sẽ tạo sau)

docker network create -d bridge bridgemoi
docker network ls
docker network inspect bridgemoi

Tạo container mới từ images centos7 , gán bridge mới cho container này

 

Ping thử từ Host vào container C3 này

Ping từ trong container C3 ra ngoài

docker attach C3
ping 10.10.10.9
ping 45.117.80.228
ping 172.19.0.1

Tạo card bridge tùy chọn IP dải 192.168.1.0/24 , tên bridgetuychon

docker network create -d bridge --subnet=192.168.1.0/24 --gateway=192.168.1.1 bridgetuychon

Gắn card bridgetuychon vào C1 và C3

docker network connect bridgetuychon C1
docker network connect bridgetuychon C3
docker network inspect bridgetuychon

Ping thông giữa 2 container C1 và C3 vì mình đã gắn 1 card 192.168.1.0/24

Chạy ứng dụng httpd của images busybox

Ở đây mình đã làm các hành động sau

Pull image busybox chạy httpd ,

docker pull busybox

Kiểm tra id images busybox có ký tự đầu =6

docker images

Đặt lại tên container và hostname image ,Forwarding port 80 của HOST vào port 80 của container

docker run -itd --name www -h www -p 80:80 6

Kết nối với container www qua terminal

docker attach www

Di chuyển vào /var/www chạy câu lệnh httpd để start apache

Tạo 1 file index.html có nội dung www.nhanhoa.com trong /var/www/

Kết quả

2- Mode HOST

Là card mạng của container  khiến container sử dụng card của HOST chạy container

Khi container chạy network mode này thì không thể add thêm driver loại khác nữa.

Nên khi chạy 1 container sử dụng mode này, chúng ta sẽ quan tâm đến việc gán card host này cho container.

Mình sẽ demo trên HOST 45.117.80.111 

Pull busybox và check ID images

docker pull busybox
docker images

docker run -it --network host --name www -h www 6
ping google.com
docker ps -a
netstat -tupln

Chúng ta không cần ánh xạ port HOST và port Ứng Dụng như trong mode Bridge, dịch vụ đã chạy

Nếu chúng ta add thêm cho HOST 1 IP public, IP local khác thì container cũng dùng luôn IP add thêm này, ở đây mình thêm IP 45.117.80.218

Kết quả

3- Mode Overlay

Mạng lớp phủ – Overlay network tạo một mạng phân tán giữa nhiều máy chủ Docker. Kết nối nhiều Docker daemons với nhau và cho phép các cụm services giao tiếp với nhau. Chúng ta có thể sử dụng overlay network để giao tiếp dễ dàng giữa cụm các services với một container độc lập, hay giữa 2 container với nhau ở khác máy chủ Docker daemons.

Nhờ Overlay network, không cần các công việc thiết lập routing giữa các container thông qua hệ điều hành. Overlay network tạo nên một lớp phủ trên mạng của máy chủ và cho phép container kết nối đến (bao gồm cả các cụm containers) để giao tiếp một cách bảo mật. Docker đảm bảo định tuyến các gói tin đến và đi đúng container đích.

4-MacVLAN

Mạng Macvlan cho phép chúng ta gán địa chỉ MAC cho container, điều này làm cho mỗi container như là một thiết bị vật lý trong mạng. Docker daemon định tuyến truy cập tới container bởi địa chỉ MAC. Sử dụng driver macvlan là lựa chon tốt khi các ứng dụng khác cần phải connect đến theo địa chỉ vật lý hơn là thông qua các lớp mạng của máy chủ.

5-None

Với container không cần networking hoặc cần disable đi tất cả mọi networking, chúng ta sẽ chọn driver này. Thường được dùng với mạng tùy chỉnh. Driver này không thể dùng trong cụm swarm.

Ba mode cuối cùng này thường sử dụng trong Cluster,ít dùng hoặc test thử nghiệm ,cách ly.

Chúng ta sẽ gặp lại tại bài viết sau Tìm hiểu cơ bản về Docker  Phần 4 – Mount trong Docker

Trả lời