---恢復內容開始---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 服務啓動的時候才能配置,並且不能立刻生效。
容器訪問控制
容器的訪問控制,主要經過 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
容器之間訪問
容器之間相互訪問,須要兩方面的支持。
容器之間的訪問暫時忽略吧,默認都是容許訪問的,可使用本地的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 服務啓動的時候才能配置,並且不能立刻生效。
容器訪問控制
容器的訪問控制,主要經過 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
容器之間訪問
容器之間相互訪問,須要兩方面的支持。