Docker 容器的網絡有五種模式:java
模式名稱 | 功能 | 是否支持多主機 | 南北向通訊機制 | 東西向通訊機制 |
---|---|---|---|---|
bridge | 默認設置,爲容器建立獨立的網絡命名空間,容器具備獨立的網卡等全部單獨的網絡棧。若是在容器運行時不加 --net 參數,就默認採用這種網絡模式。 | 否 | 宿主機端口綁定 | 經過Linux bridge |
host | 沒有獨立的網絡環境,直接使用宿主機的 ip 和端口。 | 是 | 按宿主機網絡通訊 | 按宿主機網絡通訊 |
none | 爲容器建立獨立網絡命名空間,但不爲它作任何網絡配置,容器中只有lo,用戶能夠在此基礎上,對容器網絡作任意定製。 | 否 | 沒法通訊 | 經過link通訊 |
container | 指定一個容器與其共享 IP 和端口 | 否 | 宿主機端口綁定 | 經過link通訊 |
自定義 | Docker 1.9版本之後新增的特性,容許容器使用第三方的網絡實現或者建立單獨的bridge 網絡,提供網絡隔離能力。 | 按網絡實現而定 | 按網絡實現而定 | 按網絡實現而定 |
注:南北向通訊指容器與宿主機外界的訪問機制,東西向通訊機制指同一宿主機上,與其餘容器相互訪問的機制。nginx
在自定義網絡模式下,用戶能夠建立一個新的 Bridge 、Overlay 或 Macvlan 網絡。與 Bridge 不一樣 Overlay 和 Macvlan 網絡主要用於建立跨主機訪問。docker
Bridge
網絡是 Docker
中最經常使用的網絡類型,建立一個 Bridge
網絡的語法以下:安全
docker network create --driver bridge --subnet 網絡ip段 --gateway 網關IP --ip 指定靜態IP 網絡段名稱
注:網絡
--driver bridge
是默認項,能夠不顯示寫出來--ip
必須配合 --subnet
參數一塊兒使用overlay 網絡驅動程序在多個 Docker 守護進程主機之間建立一個分佈式網絡。這個網絡在容許容器鏈接並進行安全通訊的主機專用網絡之上(overlay 覆蓋在上面)。Docker 透明地處理每一個 Docker 守護進程與目標容器之間的數據包的路由。分佈式
當初始化 swarm 集羣(注1)或將一個 Docker 主機加入已經存在的 swarm 集羣時,Docker 主機上會建立兩個新網絡:code
ingress
的 overlay 網絡用來處理與 swarm 服務相關的控制和數據流。當建立的 swarm 服務沒有鏈接到用戶自定義的 overlay 網絡時,這個服務會默認鏈接到 ingress 網絡。
一個稱爲 docker_gwbridge
的bridge 網絡進程
用來將單個的 Docker 守護進程鏈接到 swarm 中的其餘守護進程。
可使用 docker network create
命令建立用戶定義的 overlay
網絡,就像能夠建立用戶定義的 bridge 網絡同樣。服務或容器一次能夠鏈接到多個網絡。服務或容器只能經過它們各自鏈接的網絡進行通訊。在建立 overlay
網絡前,宿主機須要知足以下先決條件:ip
宿主機防火牆指定端口開放路由
- TCP 端口 2377:用於集羣管理通訊 - TCP 和 UDP 端口 7946:用於節點之間通訊 - UDP 端口 4789:overlay 網絡流量
將宿主機加入到 swarm 集羣
# 將容器初始化爲 swarm 集羣 docker swarm init 或 # 將其加入到一個已存在的熱情 docker swarm join
建立 Overlay
網絡:
docker network create -d overlay 網絡名
要建立能夠用於 swarm 服務和獨立容器跟其餘 Docker 守護進程中運行的獨立容器通訊的 overlay 網絡,添加 --attachable
標誌:
docker network create -d --attachable overlay 網絡名
其餘選項能夠查看 docker network create --help
命令。
注1:Docker Swarm
是 Docker
本身的容器本地集羣解決方案。
使用默認 bridge
模式 , --net bridge
能夠不用寫
docker run -di --name=myNginx -p 80:80 nginx
使用 host
模式
docker run -di --name=myNginx --net host -p 80:80 nginx
使用 none
模式
docker run -di --name=myNginx --net none -p 80:80 nginx
使用 container
模式
docker run -di --name=myNginx --net container:指定容器名 -p 80:80 nginx
使用自定義模式
1.建立自定義網段 docker network create --subnet=192.168.0.0/16 mynetwork 2.自定義網絡模式建立容器 docker run -di --name=myNginx --net mynetwork -p 80:80 nginx