031、none和host網路的適用場景(2019-02-18 週一)

三角形發表於2019-02-19
 
本節開始,會學習docker的幾種原生網路,以及如何建立自定義網路。然後探究容器之間如何通訊,以及容器與外界如何互動
 
docker網路從覆蓋範圍可以分為單個host上的容器網路和跨多個host的網路,本章終點學習前一種。對於更復雜的多host網路,將在後面的進階部分學習。
 
docker安裝時會自動在host上建立三個網路,我們可以用docker network ls 命令檢視
 
root@docker-lab:~# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
b41bf72cd691        bridge              bridge              local
e5cb8d603efd        host                host                local
f9dc6032baba        none                null                local
 
none網路
 
none網路就是什麼網路都沒有,掛載這個網路下的容器除了lo以外,沒有其他網路卡。容器建立時,可以通過 --network=none 指定容器使用none網路。
 
root@docker-lab:~# docker run -it --network=none busybox
/ # ifconfig -a
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
/ #
 
一個封閉的網路有什麼用呢,封閉即隔離,一些對安全性要求較高並且不需要聯網的應用可以使用none網路,比如專門用來生成隨機密碼的容器。
 
host網路
 
連線到host網路的容器共享docker host的網路棧,容器的網路配置與docker host完全一樣。可以通過 --network=host 指定容器使用host網路
 
root@docker-lab:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:02:7e:68 brd ff:ff:ff:ff:ff:ff
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:01:02:27:95 brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
    link/ether 02:42:0e:6c:b4:04 brd ff:ff:ff:ff:ff:ff
root@docker-lab:~# docker run -it --network=host busybox
/ # ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 52:54:00:02:7e:68 brd ff:ff:ff:ff:ff:ff
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 52:54:01:02:27:95 brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
    link/ether 02:42:0e:6c:b4:04 brd ff:ff:ff:ff:ff:ff
/ #
/ # hostname
docker-lab
 
 
可以看到host網路的容器,使用的網路以及hostname都和docker host一樣
 
直接使用host網路最大的好處就是效能,如果容器對網路傳輸效率要求比較高,則可以選擇host網路。
 
缺點是靈活性差,容器和docker host公用一套埠,需要解決埠衝突的問題。
 
host網路的另一個用途是讓容器可以直接配置docker host網路,比如某些跨docker host的網路解決方案,其本身也是以容器方式執行,這些方案需要對網路進行配置,比如管理iptables,後面的章節會做詳細介紹
 

相關文章