Docker網絡基礎

網絡

docker提供幾種網絡,它決定容器之是以及外界和容器之間怎麼樣去通訊。
能夠經過以下方法查看docker的網絡:web

docker network ls
  • null:無網絡,使用這種網絡的容器會徹底隔離
  • host:主機網絡,使用這種網絡的容器會使用主機的網絡,這種網絡對外界是徹底開放的,可以訪問到主機,就能訪問到容器
  • bridge:橋接網絡,除非建立容器的時候指定網絡,不然容器默認使用橋接網絡。屬於這個網絡的容器之間能夠相互通訊,不過外界想要訪問這個網絡的容器,須要使用橋接網絡,有點兒像主機和容器之間的一座橋,對容器有必定的隔離做用

bridge網絡

查看bridge網絡信息:docker

docker network inspect bridge

會列出bridge網絡的相關信息,containers表示使用了這網絡的容器。網絡

建立一個使用bridge網絡的容器:code

docker run -d --name web1 --net bridge nginx

none網絡

建立一個使用none網絡的容器:dns

docker run -d --name web_none --net none nginx

查看none網絡信息:it

docker network inspect none

host網絡

建立一個使用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
相關文章
相關標籤/搜索