1. 程式人生 > 實用技巧 >docker 四種網路模型

docker 四種網路模型

docker的網路模型

有4種網路模型,通過宿主機的docker 0這樣一個網路裝置,NAT出一個網路,這個配置是在daemon.json中配置的。

NAT(預設)

[root@huan ~]# docker tag b7b28af77ffe myalpine
[root@huan ~]# docker images | grep myalpine
REPOSITORY         TAG                       IMAGE ID          CREATED             
myalpine           latest                    b7b28af77ffe      13 months ago       5.58MB
[root@huan ~]# docker run -it --rm myalpine /bin/sh
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
60: eth0@if61: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:11:00:01 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/24 brd 172.17.0.255 scope global eth0
       valid_lft forever preferred_lft forever
/ #

NONE

None是第二種網路模型

docker封裝的容器的業務,很有可能不對外提供網路介面。比如可能只要cpu的運算資源,記憶體資源,或者儲存資源等,或者沒有任何協議棧的要求,不對外提供http服務,或者rpc服務等。

用到任何容器,甚至任何技術的時候,嚴格的和你的業務契合或者匹配,什麼樣的業務決定用什麼樣的技術。不能說為了用docker而用docker,或者為了用k8s而用k8s,

k8s最適合編排的是那種沒有狀態的服務,還有不需要擴容的,比如mysql不適合用k8s到生產上,比如如果擴容,能保證資料的一致性嗎?

橫向擴容的最大特徵就是沒有狀態。

HOST

host就是docker和宿主機在同一個網路

[root@huan ~]# docker run -it --rm --net=host myalpine /bin/sh

聯合網路

兩個容器共享一個網路名稱空間。

[root@huan ~]# docker run -ti --rm --name lhwl2 --net=container:d62807b4af37 xxxxxxxxxxxx/nginx:curl /bin/bash