1. 程式人生 > >理解Docker的網路模式

理解Docker的網路模式

容器的網路,大的方向,分為兩大類: A.單臺宿主下,容器網路環境的構建 B.多臺宿主組成的宿主叢集的網路環境 單宿主模式下: Docker提供了,3種預設的網路模式,分別是none,bridge,host 檢視本機上擁有的網路模式: docker image ls docker預設這3種網路模式,如果需要將docker容器使用某種網路模式啟動,指定 --network={networkname} eg: docker run -dit --name 'test_network_restart' --network=bridge centos /bin/bash bridge 網路的代表就是docker0網橋的出現(一般伴隨著docker的安裝),如果不特殊指定, 啟動的容器預設連線到bridge網路。 none network 會將容器置於一個特定的網路棧中,該容器缺乏網路介面,如果,exec,或者attach,接入到容器中, ifconfig只能看到lo(迴環網路介面) host network,將會把容器增加到主機的網路棧中,在容器中,ifconfig,看到的,完全與宿主的網路棧相同 預設bridge網路的詳細資訊: docker network inspect bridge [ { "Name":"bridge", "Id":"f7ab26d71dbd6f557852c7156ae0574bbf62c42f539b50c8ebde0f728a253b6f", "Scope":"local", "Driver":"bridge", "IPAM": { "Driver":"default", "Config": [ { "Subnet":"172.17.0.1/16", "Gateway":"172.17.0.1" } ] }, "Containers": {}, "Options": { "com.docker.network.bridge.default_bridge"
:"true", "com.docker.network.bridge.enable_icc":"true", "com.docker.network.bridge.enable_ip_masquerade":"true", "com.docker.network.bridge.host_binding_ipv4":"0.0.0.0", "com.docker.network.bridge.name":"docker0", "com.docker.network.driver.mtu":"9001" } }] Docker引擎會在該網路下建立子網,閘道器。如果在該網路下新增容器,將會在Containers中增加容 器的網絡卡資訊 容器在預設的網路(bridge)下可以通過Ip進行互相之間的互動,Docker在預設的bridge網路下不支援服務的自發現,如果需要在預設的bridge網路下互相互動,必須使用docker run --link來連線不同的容器 預設的docker0 bridge網路支援使用埠對映,以及docker run ---link 來連線在docker0網路下的容器,這些技術,通常比較笨重並且容易出錯。有一種更好的方法,就是建立自己的bridge網路。 使用者自定義網路: 使用者可以使用自己定義的二層網路來對容器之間進行隔離。Docker提供了幾種預設的網路驅動(Network drivers)來建立這些網路。使用者可以建立bridge網路,overlay網路,或者是MACVLAN 網路。使用者甚至可以建立自己的網路外掛或者遠端網路。 使用者可以將容器置於不同的網路下。容器只能與同網路下的容器之間進行互動,而不能跨網路。如果一個容器,接入了兩個網路,那麼這個容器可以與這兩個網路中的容器進行互動。 bridge網路: 建立一個bridge網路非常簡單,這個網路非常類似之前的docker0網路,這裡是一些新增的功能和一些之前網路不能用的功能。 docker network create --driver bridge isolated_nw docker network inspect isolated_nw [ {
"Name": "isolated_nw", "Id": "1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.21.0.0/16", "Gateway": "172.21.0.1/16" } ] }, "Containers": {}, "Options": {} }]
對比可以發現isolated_nw與預設的Docker0網路的Options是完全不同的,因此isolated_nw與docker0網路支援的特性完全不同。
如果將容器連線到isolate_nw下,該容器將與該網路下的所有其他容器可以通過Ip進行互動,但是與其他網路是完全隔絕的。在使用者自建的bridge模式網路下是不支援的link,使用者可以釋出容器的埠到該網路下。