docker提供幾種網絡,它決定容器之是以及外界和容器之間怎麼樣去通訊。
能夠經過以下方法查看docker的網絡:web
docker network ls
查看bridge網絡信息:docker
docker network inspect bridge
會列出bridge網絡的相關信息,containers表示使用了這網絡的容器。網絡
建立一個使用bridge網絡的容器:code
docker run -d --name web1 --net bridge nginx
建立一個使用none網絡的容器:dns
docker run -d --name web_none --net none nginx
查看none網絡信息:it
docker network inspect none
建立一個使用host網絡的容器:class
docker run -d --name web_host -net host nginx
能夠看到該容器沒有IP地址,由於它直接使用宿主機IP地址容器
若是想讓外界能夠訪問到基於bridge網絡建立的容器提供的服務,則必需要告訴docker要使用的端口。
能夠經過以下方法查看鏡像會使用哪些端口:sed
docker inspect nginx | jq .[]."ContainerConfig"."ExposedPorts"
在建立容器的時候能夠指定這個容器的端口與主機端口的映射關係:
docker run -d --name web -p 8888:80 nginx -p,--publis: 能夠指定主機與容器的端口關係,冒號左邊是主機的端口,右邊是映射到容器中的端口 -P:該參數會分配鏡像中全部的會使用的端口,並映射到主機上的隨機端口
查看容器的端口狀況:
docker port web
若是建立容器時,-p參數後面只一個指定端口,意思是主機會隨機一個端口,映射到容器的該指定端口:
docker run -d --name web -p 80 nginx
能夠基於某一個類型的網絡去建立一些自定義的網絡,這樣屬於這個網絡的容器就能夠單獨隔離出來,它們之間能夠相互通訊,而不在這個網絡的容器就不能直接訪問到它們。一個容器能夠屬於多個網絡,同一個自定義網絡下的容器能夠經過各自的容器名訪問到對方,由於會使用到docker內嵌的一個dns功能。
建立一個自定義網絡:
docker network create --driver bridge custom #--driver用於指定網絡類型
能夠經過docker network ls
查看到新建立的custom網絡相關信息,Subnet表示這個網絡下的子網IP段,那麼基於custom自定義網絡建立的容器IP都會以該IP段開頭。
基於custom網絡建立容器:
docker run -d --name web2 --net custom nginx
若是想將已經建立的容器放到自定義網絡中,使用以下指令:
docker network connect custom web
將web從bridge網絡中移除:
docker network disconnect bridge web