Docker網絡模式

1、Docker 網絡模式

Docker 容器的網絡有五種模式:java

模式名稱 功能 是否支持多主機 南北向通訊機制 東西向通訊機制
bridge 默認設置,爲容器建立獨立的網絡命名空間,容器具備獨立的網卡等全部單獨的網絡棧。若是在容器運行時不加 --net 參數,就默認採用這種網絡模式。 宿主機端口綁定 經過Linux bridge
host 沒有獨立的網絡環境,直接使用宿主機的 ip 和端口。 按宿主機網絡通訊 按宿主機網絡通訊
none 爲容器建立獨立網絡命名空間,但不爲它作任何網絡配置,容器中只有lo,用戶能夠在此基礎上,對容器網絡作任意定製。 沒法通訊 經過link通訊
container 指定一個容器與其共享 IP 和端口 宿主機端口綁定 經過link通訊
自定義 Docker 1.9版本之後新增的特性,容許容器使用第三方的網絡實現或者建立單獨的bridge 網絡,提供網絡隔離能力。 按網絡實現而定 按網絡實現而定 按網絡實現而定

注:南北向通訊指容器與宿主機外界的訪問機制,東西向通訊機制指同一宿主機上,與其餘容器相互訪問的機制。nginx

2、自定義網絡模式

在自定義網絡模式下,用戶能夠建立一個新的 Bridge 、Overlay 或 Macvlan 網絡。與 Bridge 不一樣 Overlay 和 Macvlan 網絡主要用於建立跨主機訪問。docker

2.1 Bridge 網絡

Bridge 網絡是 Docker 中最經常使用的網絡類型,建立一個 Bridge 網絡的語法以下:安全

docker network create --driver bridge --subnet 網絡ip段 --gateway 網關IP --ip 指定靜態IP 網絡段名稱

注:網絡

  • --driver bridge 是默認項,能夠不顯示寫出來
  • --ip 必須配合 --subnet參數一塊兒使用

2.2 Overlay 網絡

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 SwarmDocker 本身的容器本地集羣解決方案。

3、使用指定網絡模式建立容器

使用默認 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
相關文章
相關標籤/搜索