容器自動化(二):docker基礎(下)
阿新 • • 發佈:2021-11-30
五,網路管理
Docker支援5種網路模式
bridge
預設網路,Docker啟動後預設建立一個docker0網橋,預設建立的容器也是新增到這個網橋中
host
容器不會獲得一個獨立的network namespace,而是與宿主機共用一個
none
獲取獨立的network namespace,但不為容器進行任何網路配置
container
與指定的容器使用同一個network namespace,網絡卡配置也都是相同的
自定義
自定義網橋,預設與bridge網路一樣
5.1.1 bridge網路型別
#安裝bridge管理工具 [root@docker ~]# yum -y install bridge-utils #檢視網橋狀態 [root@docker ~]# brctl show bridge name bridge id STP enabled interfaces br-b02d86520223 8000.02427fd4e96d no veth3c0da5f #網橋br-br0綁定了兩個虛擬網絡卡 vethcd34854 docker0 8000.02424cab4d14 no veth0d15221 #網橋docker0綁定了一個虛擬網絡卡 #檢視網路型別 [root@docker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 29e8c90dbd80 bridge bridge local #兩個網橋型別的網路 f11e598312bd host host local b02d86520223 lnmp bridge local #兩個網橋型別的網路 3978eff69b11 none null local #檢視容器程序 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 274cd088c4ad centos "/bin/bash" 14 minutes ago Up 14 minutes test 1ab26792a73c richarvey/nginx-php-fpm "docker-php-entrypoi…" 2 days ago Up 2 days 443/tcp, 9000/tcp, 0.0.0.0:88->80/tcp lnmp_web 07bd252ec637 mysql:5.6 "docker-entrypoint.s…" 2 days ago Up 2 days 0.0.0.0:3306->3306/tcp lnmp_mysql #檢視容器lnmp_mysql的網路資訊 [root@docker ~]# docker inspect lnmp_mysql | grep -A 15 "Networks" "Networks": { "lnmp": { #網路型別lnmp "IPAMConfig": null, "Links": null, "Aliases": [ "07bd252ec637" ], "NetworkID": "b02d8652022382f21780ee4935f472689883b64389ae120174268de57ec03e4e", "EndpointID": "6059606168f72d1561e4ce1d345fdc8dafed7b3956f9b2a392f29635c4001b7c", "Gateway": "172.18.0.1", #閘道器172.18.0.1,這就是網橋br-b02d86520223 "IPAddress": "172.18.0.2", #容器IP172.18.0.2 "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:12:00:02", #檢視容器lnmp_web的網路資訊 [root@docker ~]# docker inspect lnmp_web | grep -A 15 "Networks" "Networks": { "lnmp": { #網路型別lnmp "IPAMConfig": null, "Links": null, "Aliases": [ "1ab26792a73c" ], "NetworkID": "b02d8652022382f21780ee4935f472689883b64389ae120174268de57ec03e4e", "EndpointID": "778d44313652bce9af6f09c3f67d56946eca2c6b7cf7dc8b9c79046e7874842a", "Gateway": "172.18.0.1", #閘道器172.18.0.1,這就是網橋br-b02d86520223 "IPAddress": "172.18.0.3", #容器IP172.18.0.3 "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:12:00:03", #檢視容器test的網路資訊 [root@docker ~]# docker inspect test | grep -A 15 "Networks" "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "29e8c90dbd80c38e964c4a6055456fb1718f499f03a1ff81af0a3c2643231de5", "EndpointID": "cacf4aea37a8d12bae2358fa682da1e3c3b6bb85947a88d8242fbf1bff3d3d86", "Gateway": "172.17.0.1", #閘道器172.17.0.1,這就是網橋docker0 "IPAddress": "172.17.0.2", #容器IP172.17.0.2 "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02", "DriverOpts": null } 5.1.2 host網路型別 - #啟動一個網路型別為host的容器 [root@docker ~]# docker run -dit --name test2 --network host centos:latest /bin/bash 156dbada7627542fd0ab7134cec270466bcef5180feeec44343821d71cc6ebaf [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 156dbada7627 centos:latest "/bin/bash" 3 seconds ago Up 3 seconds test2 274cd088c4ad centos "/bin/bash" 2 hours ago Up 2 hours test 1ab26792a73c richarvey/nginx-php-fpm "docker-php-entrypoi…" 3 days ago Up 3 days 443/tcp, 9000/tcp, 0.0.0.0:88->80/tcp lnmp_web 07bd252ec637 mysql:5.6 "docker-entrypoint.s…" 3 days ago Up 3 days 0.0.0.0:3306->3306/tcp lnmp_mysql #檢視容器的ip [root@docker ~]# docker exec test2 hostname -I #這就是網路型別為host的容器,ip地址和docker宿主機完全一樣 192.168.200.142 172.17.0.1 172.18.0.1 [root@docker ~]# docker exec test hostname -I #網橋型別容器 172.17.0.2 [root@docker ~]# docker exec lnmp_mysql hostname -i #網橋型別容器 172.18.0.2 [root@docker ~]# docker exec lnmp_web hostname -i #網橋型別容器 172.18.0.3 5.1.3 none網路型別(用於建立與宿主機的橋接模式) #啟動一個網路型別為none的容器 [root@docker ~]# docker run -dit --name test3 --net none centos:latest cddf4c8888d71df9224b6455ae426fe33470e219c5c755252875da7a20c4527f #檢視容器IP地址 [root@docker ~]# docker exec test3 hostname -I 查詢後發現,什麼IP地址都沒有,是的,none型別就是暫時不給容器指定網絡卡。 5.1.4 container網路型別 - #啟動一個容器,網路型別container,使用test容器的網絡卡 [root@docker ~]# docker run -dit --name test4 --net container:test centos:latest /bin/bash d0100ebdadde9733d5c2d0fd8f1a8017d1c74c4323408cd11ac593c0f7d7f42f [root@docker ~]# docker inspect test | grep -A 15 "Networks" \ "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "29e8c90dbd80c38e964c4a6055456fb1718f499f03a1ff81af0a3c2643231de5", "EndpointID": "cacf4aea37a8d12bae2358fa682da1e3c3b6bb85947a88d8242fbf1bff3d3d86", "Gateway": "172.17.0.1", #test容器的閘道器 "IPAddress": "172.17.0.2", #test容器模式網橋 "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02", "DriverOpts": null } [root@docker ~]# docker inspect test4 | grep -A 15 "Networks" "Networks": {} #test4容器並沒有自己的網路設定 } } ] [root@docker ~]# docker exec test4 hostname -I #test4沒有網路設定卻有IP地址和test容器完全一樣 172.17.0.2