高級網絡配置

---恢復內容開始---html

本章將介紹 Docker 的一些高級網絡配置和選項。web

當 Docker 啓動時,會自動在主機上建立一個 docker0 虛擬網橋,其實是 Linux 的一個docker

bridge,能夠理解爲一個軟件交換機。它會在掛載到它的網口之間進行轉發。json

同時,Docker 隨機分配一個本地未佔用的私有網段(在 RFC1918 中定義)中的一個地址給服務器

docker0 接口。好比典型的 172.17.42.1 ,掩碼爲 255.255.0.0 。此後啓動的容器內的網口網絡

也會自動分配一個同一網段( 172.17.0.0/16 )的地址。測試

當建立一個 Docker 容器的時候,同時會建立了一對 veth pair 接口(當數據包發送到一個spa

接口時,另一個接口也能夠收到相同的數據包)。這對接口一端在容器內,即 eth0 ;另3d

一端在本地並被掛載到 docker0 網橋,名稱以 veth 開頭(例如 vethAQI2QT )。經過這種code

方式,主機能夠跟容器通訊,容器之間也能夠相互通訊。Docker 就建立了在主機和全部容器

之間一個虛擬共享網絡。

 

快速配置指南

 

下面是一個跟 Docker 網絡相關的命令列表。

其中有些命令選項只有在 Docker 服務啓動的時候才能配置,並且不能立刻生效。

  • -b BRIDGE 或 --bridge=BRIDGE 指定容器掛載的網橋
  • --bip=CIDR 定製 docker0 的掩碼
  • -H SOCKET... 或 --host=SOCKET... Docker 服務端接收命令的通道
  • --icc=true|false 是否支持容器之間進行通訊
  • --ip-forward=true|false 請看下文容器之間的通訊
  • --iptables=true|false 是否容許 Docker
  • --mtu=BYTES 容器網絡中的 MTU

 

  • --dns=IP_ADDRESS... 使用指定的DNS服務器
  • --dns-search=DOMAIN... 指定DNS搜索域

 

  • -h HOSTNAME 或 --hostname=HOSTNAME 配置容器主機名
  • --link=CONTAINER_NAME:ALIAS 添加到另外一個容器的鏈接
  • --net=bridge|none|container:NAME_or_ID|host 配置容器的橋接模式
  • -p SPEC 或 --publish=SPEC 映射容器端口到宿主主機
  • -P or --publish-all=true|false 映射容器全部端口到宿主主機

容器訪問控制

容器的訪問控制,主要經過 Linux 上的 iptables 防火牆來進行管理和實現。

 

容器訪問外部網絡

 

容器要想訪問外部網絡,須要本地系統的轉發支持。在Linux 系統中,檢查轉發是否打開

#net.ipv4.ip_forward = 1爲打開轉發,0爲關閉轉發
[gyy@lx-usc-03-209~]$sudo sysctl -a |grep net.ipv4.ip_forward
net.ipv4.ip_forward = 1

容器之間訪問

 

 

 

容器之間相互訪問,須要兩方面的支持。

  • 容器的網絡拓撲是否已經互聯。默認狀況下,全部容器都會被鏈接到 docker0 網橋上。
  • 本地系統的防火牆軟件 -- iptables 是否容許經過。

容器之間的訪問暫時忽略吧,默認都是容許訪問的,可使用本地的iptables來進行訪問控制

自定義網橋 

 

 

除了默認的 docker0 網橋,用戶也能夠指定網橋來鏈接各個容器。在啓動 Docker 服務的時候,使用 -b BRIDGE 或 --bridge=BRIDGE 來指定使用的網橋。

 

若是服務已經運行,那須要先中止服務,並刪除舊的網橋。

$ sudo systemctl stop docker
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0

而後建立一個網橋 bridge0

$ sudo brctl addbr bridge0
$ sudo ip addr add 192.168.5.1/24 dev bridge0
$ sudo ip link set dev bridge0 up

查看確認網橋建立並啓動。

[root@localhost ~]# ip addr show bridge0
115: bridge0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 96:1f:b3:5b:e7:2b brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.1/24 scope global bridge0
       valid_lft forever preferred_lft forever
    inet6 fe80::941f:b3ff:fe5b:e72b/64 scope link 
       valid_lft forever preferred_lft forever

在 Docker 配置文件 /etc/docker/daemon.json 中添加以下內容,便可將 Docker 默認橋接到建立的網橋上

 

 *****已測試  無論用,docker0網卡會自動生成,容器默認仍是連的docker0網橋

 

{
"bridge": "bridge0",
}
#臨時使用命令刪除的docker0網橋會自動生成
[root@localhost network-scripts]# brctl show bridge name bridge id STP enabled interfaces br-016e93959d0a 8000.0242d160379c no bridge0 8000.000000000000 no docker0 8000.0242f73f8106 no [root@localhost network-scripts]# docker run -d -p80:80 -v /data/:/var/www/html --hostname web1 --name web1-server1 06292 98559157ae8eded010d02662f2590a45323de8256dd17c37392d29554bf6a87a [root@localhost network-scripts]# brctl show bridge name bridge id STP enabled interfaces br-016e93959d0a 8000.0242d160379c no bridge0 8000.000000000000 no docker0 8000.0242f73f8106 no veth176c620

 

 

---恢復內容結束---

本章將介紹 Docker 的一些高級網絡配置和選項。

當 Docker 啓動時,會自動在主機上建立一個 docker0 虛擬網橋,其實是 Linux 的一個

bridge,能夠理解爲一個軟件交換機。它會在掛載到它的網口之間進行轉發。

同時,Docker 隨機分配一個本地未佔用的私有網段(在 RFC1918 中定義)中的一個地址給

docker0 接口。好比典型的 172.17.42.1 ,掩碼爲 255.255.0.0 。此後啓動的容器內的網口

也會自動分配一個同一網段( 172.17.0.0/16 )的地址。

當建立一個 Docker 容器的時候,同時會建立了一對 veth pair 接口(當數據包發送到一個

接口時,另一個接口也能夠收到相同的數據包)。這對接口一端在容器內,即 eth0 ;另

一端在本地並被掛載到 docker0 網橋,名稱以 veth 開頭(例如 vethAQI2QT )。經過這種

方式,主機能夠跟容器通訊,容器之間也能夠相互通訊。Docker 就建立了在主機和全部容器

之間一個虛擬共享網絡。

 

快速配置指南

 

下面是一個跟 Docker 網絡相關的命令列表。

其中有些命令選項只有在 Docker 服務啓動的時候才能配置,並且不能立刻生效。

  • -b BRIDGE 或 --bridge=BRIDGE 指定容器掛載的網橋
  • --bip=CIDR 定製 docker0 的掩碼
  • -H SOCKET... 或 --host=SOCKET... Docker 服務端接收命令的通道
  • --icc=true|false 是否支持容器之間進行通訊
  • --ip-forward=true|false 請看下文容器之間的通訊
  • --iptables=true|false 是否容許 Docker
  • --mtu=BYTES 容器網絡中的 MTU

 

  • --dns=IP_ADDRESS... 使用指定的DNS服務器
  • --dns-search=DOMAIN... 指定DNS搜索域

 

  • -h HOSTNAME 或 --hostname=HOSTNAME 配置容器主機名
  • --link=CONTAINER_NAME:ALIAS 添加到另外一個容器的鏈接
  • --net=bridge|none|container:NAME_or_ID|host 配置容器的橋接模式
  • -p SPEC 或 --publish=SPEC 映射容器端口到宿主主機
  • -P or --publish-all=true|false 映射容器全部端口到宿主主機

容器訪問控制

容器的訪問控制,主要經過 Linux 上的 iptables 防火牆來進行管理和實現。

 

容器訪問外部網絡

 

容器要想訪問外部網絡,須要本地系統的轉發支持。在Linux 系統中,檢查轉發是否打開

#net.ipv4.ip_forward = 1爲打開轉發,0爲關閉轉發
[gyy@lx-usc-03-209~]$sudo sysctl -a |grep net.ipv4.ip_forward
net.ipv4.ip_forward = 1

容器之間訪問

 

 

 

容器之間相互訪問,須要兩方面的支持。

  • 容器的網絡拓撲是否已經互聯。默認狀況下,全部容器都會被鏈接到 docker0 網橋上。
  • 本地系統的防火牆軟件 -- iptables 是否容許經過。
相關文章
相關標籤/搜索