Tìm hiểu cơ bản về Docker [Phần 3]
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