iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 21
0
DevOps

用30天來介紹和使用 Docker系列 第 21

Day 21:介紹 Docker 的 Network (二)

在執行 docker run 指令時,有一個參數是 --net,它可以設定在執行 Docker Container 是要使用哪一種的網路模式,目前所知道的網路模式有 none、container、host、bridge、overlay… 等等的模式,它們是透過使用 Linux 的 libnetwork 所建立出來的網路模式,以下分別說明這些網路模式:

  • none: 在執行 container 時,網路功能是關閉的,所以無法與此 container 連線

  • container: 使用相同的 Network Namespace,所以 container1 的 IP 是 172.17.0.2 那 container2 的 IP 也會是 172.17.0.2

  • host: container 的網路設定和實體主機使用相同的網路設定,所以 container 裡面也就可以修改實體機器的網路設定,因此使用此模式需要考慮網路安全性上的問題

  • bridge: Docker 預設就是使用此網路模式,這種網路模式就像是 NAT 的網路模式,例如實體主機的 IP 是 192.168.1.10 它會對應到 Container 裡面的 172.17.0.2,在啟動 Docker 的 service 時會有一個 docker0 的網路卡就是在做此網路的橋接。

  • overlay: container 之間可以在不同的實體機器上做連線,例如 Host1 有一個 container1,然後 Host2 有一個 container2,container1 就可以使用 overlay 的網路模式和 container2 做網路的連線。

以上就是目前在 Docker 主要可以使用的網路模式,另外常會看到 CNM 這個名詞,它的全名是 Container Network Model,定義了 Container 的網路模型所要的一些規範和標準。

今天主要的實作就是要測試 none、container、host、brige的網路模型,另外的overlay 網路模型就留在明天來實作。

Example1:
在使用 docker run 指令時,指定 --net=none 的網路模式,確認執行結果,指令如下:

$ docker run -it --net=none joffotron/docker-net-tools

進入 container 入後輸入 ifconfig 指令,如下圖
https://ithelp.ithome.com.tw/upload/images/20171224/20103456WfJdmI0x9U.png

從上圖可以看到除了 127.0.0.1 之外沒有其它的 IP 位址,另外 ping google 看看
https://ithelp.ithome.com.tw/upload/images/20171224/20103456rheE6TuTu9.png

結果確定了 none 的模式關閉了網路連線

Example2:
測試開啟了 container1 之後,再開啟 container2 並且設定 --net=container:container1的參數,測試 container1和container2的網路資訊是否相同,步驟如下:

  1. 啟動 container1 指令如下
$ docker run --name container1 -it joffotron/docker-net-tools
  1. 新開一個視窗,啟動 container2 指令如下
$ docker run --name container2 --net=container:container1 -it joffotron/docker-net-tools
  1. 輸入ifconfig指令,查看 container1 和 container2 的網路資訊內容是否相同,如下圖
    https://ithelp.ithome.com.tw/upload/images/20171224/20103456iYSQNVeV8p.png

上圖可以確認 container1 和 container2 的網路資訊是相同的

Example3:
在執行 docker run 指令時,參數指定為 --net=host,測試 host 模式。

執行的指令如下:

$ docker run --net=host -it joffotron/docker-net-tools

執行的結果如下圖:
https://ithelp.ithome.com.tw/upload/images/20171224/20103456MvJDLwdbu6.png

可以看到 Container 的網路資訊和實體主機的網路資訊是相同的結果

Example4:
在執行 docker run 指令時,參數指定為 --net=bridge,測試 bridge模式。

執行的指令如下:

$ docker run --net=bridge -it joffotron/docker-net-tools

執行結果如下圖
https://ithelp.ithome.com.tw/upload/images/20171224/20103456QuxFl6qxNt.png

可以看到使用 Bridge模式,會建立了 172.17.0.2 的 IP,它會橋接到實體主機的docker0的虛擬網路卡。

今天已經介紹了 Docker 的網路模式和實作了 none、container、host、bridge的網路模式,明天會繼續實作 overlay 的網路模式。


上一篇
Day20:介紹 Docker 的 Network (一)
下一篇
Day22:介紹 Docker 的 Network (三)
系列文
用30天來介紹和使用 Docker30

1 則留言

1
chichi
iT邦新手 5 級 ‧ 2018-01-13 14:21:39

--net=container:container1 它跟前面提到的 --link 應該不一樣吧 ?

--link 主要目的是要讓 container 可以連結起來,然後 --net=container:container1 是要讓新啟動的 container 和 container1要有相同的網路設定,像是相同的 IP Address。

所以 --link--net=container:container1 是不一樣的東西。

我要留言

立即登入留言